86 lines
2.2 KiB
C++
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);
|
|
};
|