Files
unrealtest/Source/first/Variant_Shooter/AI/ShooterAIController.h
T
2026-08-02 22:34:52 +03:00

86 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "AIController.h"
#include "ShooterAIController.generated.h"
class UStateTreeAIComponent;
class UAIPerceptionComponent;
struct FAIStimulus;
DECLARE_DELEGATE_TwoParams(FShooterPerceptionUpdatedDelegate, AActor*, const FAIStimulus&);
DECLARE_DELEGATE_OneParam(FShooterPerceptionForgottenDelegate, AActor*);
/**
* Simple AI Controller for a first person shooter enemy
*/
UCLASS(abstract)
class FIRST_API AShooterAIController : public AAIController
{
GENERATED_BODY()
/** Runs the behavior StateTree for this NPC */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
UStateTreeAIComponent* StateTreeAI;
/** Detects other actors through sight, hearing and other senses */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components", meta = (AllowPrivateAccess = "true"))
UAIPerceptionComponent* AIPerception;
protected:
/** Team tag for pawn friend or foe identification */
UPROPERTY(EditAnywhere, Category="Shooter")
FName TeamTag = FName("Enemy");
/** Enemy currently being targeted */
TObjectPtr<AActor> TargetEnemy;
public:
/** Called when an AI perception has been updated. StateTree task delegate hook */
FShooterPerceptionUpdatedDelegate OnShooterPerceptionUpdated;
/** Called when an AI perception has been forgotten. StateTree task delegate hook */
FShooterPerceptionForgottenDelegate OnShooterPerceptionForgotten;
public:
/** Constructor */
AShooterAIController();
protected:
/** Pawn initialization */
virtual void OnPossess(APawn* InPawn) override;
protected:
/** Called when the possessed pawn dies */
UFUNCTION()
void OnPawnDeath();
public:
/** Sets the targeted enemy */
void SetCurrentTarget(AActor* Target);
/** Clears the targeted enemy */
void ClearCurrentTarget();
/** Returns the targeted enemy */
AActor* GetCurrentTarget() const { return TargetEnemy; };
protected:
/** Called when the AI perception component updates a perception on a given actor */
UFUNCTION()
void OnPerceptionUpdated(AActor* Actor, FAIStimulus Stimulus);
/** Called when the AI perception component forgets a given actor */
UFUNCTION()
void OnPerceptionForgotten(AActor* Actor);
};