İlk yürütme
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
// 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);
|
||||
};
|
||||
Reference in New Issue
Block a user