5#include "CoreMinimal.h"
7#include "BehaviorTree/BlackboardComponent.h"
9#include "DetourCrowdAIController.h"
10#include "ProjectXAIController.generated.h"
14class UVehicleSeatComponent;
17#define BLACKBOARDKEY_TARGET FName("Target")
18#define BLACKBOARDKEY_MOVEWAYPOINT FName("MoveWaypoint")
19#define BLACKBOARDKEY_SETTINGTARGET FName("IsSwitchingTargets")
20#define BLACKBOARDKEY_RANGEMIN FName("EngagementRangeMin")
21#define BLACKBOARDKEY_RANGEMAX FName("EngagementRangeMax")
22#define BLACKBOARDKEY_MAXFIRINGDISTANCE FName("FiringDistance")
23#define BLACKBOARDKEY_VISIBILITYEXTENT FName("VisibilityExtent")
24#define BLACKBOARDKEY_AGENTHEIGHT FName("AgentHeight")
25#define BLACKBOARDKEY_TARGET_THREATLEVEL FName("TargetThreatLevel")
57 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category =
"AI")
58 FText DisplayName = NSLOCTEXT("LEAP", "AI_DisplayName", "Bot");
60 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
61 int32 AllowableSimultaneousFailures = -1.0f;
63 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
64 bool bSelectTargetOnPosssess = false;
66 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
67 bool bAllowHeadshots = false;
69 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
70 bool bTargetAttackers = true;
72 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
73 bool bCanTargetAllies = false;
75 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI", meta = (EditCondition = "bCanTargetAllies"))
76 bool bDropAllyTargetsIfThreatIsZero = false;
78 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
79 bool CanLoseTarget = false;
81 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI", meta=(EditCondition="CanLoseTarget"))
82 float AttentionSpan = 3.0f;
84 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
87 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
88 float ThreatDecayRate = 1.0f;
90 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
91 float MaxFiringDistance = 8000.0f;
93 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
94 FVector2D EngagementDistance = FVector2D(1000.0f, 5000.0f);
96 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
97 float VisibilityExtentTrace = 25.0f;
99 UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "AI")
100 float EngagementRangePadding = 300.0f;
101 UPROPERTY(VisibleAnywhere, BlueprintReadWrite, Category = "AI Components")
102 UProjectXAIPerception* PerceptionSystem =
nullptr;
106 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category = "AI")
108 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category = "AI")
109 float GetTargetThreatLevel() const;
110 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category = "AI")
111 FORCEINLINE
bool HasTarget()
const {
return GetTarget() !=
nullptr; }
112 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
113 virtual UObject* GetTarget() const;
114 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category = "AI")
115 virtual
bool CanSeeTarget()
const {
return bCanSeeTarget; }
116 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
117 virtual
bool IsWithinEngagementMaxRangeOfTarget()
const {
return bIsWithinEngagementMaxRangeOfTarget; }
118 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
119 virtual
bool IsWithinEngagementRangeOfTarget()
const {
return bIsWithinEngagementRangeOfTarget; }
120 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
121 virtual
bool IsWithinFiringRangeOfTarget()
const {
return bIsWithinFiringRangeOfTarget; }
122 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
123 virtual
float GetSquareFiringDistance()
const {
return FiringDistanceSquared; }
124 UFUNCTION(BlueprintPure, BlueprintAuthorityOnly, Category =
"AI")
125 virtual const FVector2D& GetSquareEngagementDistance()
const {
return EngagementDistanceSquared; }
127 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category =
"AI")
128 virtual
void SetTarget(AActor* Target,
ESetTargetEvent Context,
bool bAllowDelays = true,
float TargetThreatLevel = 1.0f);
130 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = "AI")
131 virtual
bool SelectTarget(
bool bDontReselectSameTarget,
EAcquireTargetType SearchType);
132 UFUNCTION(BlueprintCallable, BlueprintAuthorityOnly, Category = "AI")
133 virtual AActor* GetMoveActor()
const {
return MoveActor; }
143 if (GetBlackboardComponent())
152 virtual void CheckIfStuck();
153 virtual void EndPlay(
const EEndPlayReason::Type EndPlayReason)
override;
154 virtual void UpdateCanLoseTarget();
155 virtual void UpdateThreatDecay();
156 virtual void OnBehaviourTreeFailureReported();
157 virtual void OnBehaviourTreeSuccess();
158 virtual void OnPossess(APawn* InPawn)
override;
159 virtual void OnUnPossess()
override;
160 virtual int32
GetTeam()
const override;
161 virtual int32
SetTeam(int32 NewTeam)
override;
162 virtual FVector GetFocalPointOnActor(
const AActor* Actor)
const override;
165 void OnTargetKilled(class AActor* Victim, const
float Damage, struct FDamageEvent const& DamageEvent, const class AController* EventInstigator, const class AActor* DamageCauser, const class APlayerState* InstigatorPlayerState);
171 void OnPawnDeath(class AActor* Victim, const
float Damage, struct FDamageEvent const& DamageEvent, const class AController* EventInstigator, const class AActor* DamageCauser, const class APlayerState* InstigatorPlayerState);
177 FTimerHandle UpdateTargetTimerHandle;
178 FTimerHandle ThreatDecayTimerHandle;
179 FTimerHandle TargetSwitchDelayTimerHandle;
180 AActor* MoveActor =
nullptr;
181 FVector SpawnLocation = FVector::ZeroVector;
182 int32 FailCounter = 0;
183 bool bCanSeeTarget = false;
184 bool bIsWithinEngagementMaxRangeOfTarget = false;
185 bool bIsWithinEngagementRangeOfTarget = false;
186 bool bIsWithinFiringRangeOfTarget = false;
187 float FiringDistanceSquared = 0.0f;
188 FVector2D EngagementDistanceSquared = FVector2D::ZeroVector;
189 FVector CachedPawnPosition = FVector::ZeroVector;
#define BLACKBOARDKEY_TARGET
Definition: ProjectXAIController.h:17
EAcquireTargetType
Definition: ProjectXAIController.h:45
ESetTargetEvent
Definition: ProjectXAIController.h:29
Definition: ProjectXAIController.h:52
T * GetTarget() const
Definition: ProjectXAIController.h:141
virtual void SetCanSeeTarget(bool bToggle)
Definition: ProjectXAIController.h:135
virtual void SetIsWithinEngagementRangeOfTarget(bool bToggle)
Definition: ProjectXAIController.h:137
virtual void SetIsWithinFiringRangeOfTarget(bool bToggle)
Definition: ProjectXAIController.h:138
virtual void SetIsWithinEngagementMaxRangeOfTarget(bool bToggle)
Definition: ProjectXAIController.h:136
Definition: ProjectXCharacter.h:128
virtual int32 GetTeam() const override
Definition: ProjectXCharacter.cpp:1855
TWeakObjectPtr< AProjectXVehicle > PreviousVehicle
Definition: ProjectXCharacter.h:714
virtual void BeginPlay() override
Definition: ProjectXCharacter.cpp:179
TWeakObjectPtr< AProjectXVehicle > Vehicle
Definition: ProjectXCharacter.h:711
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override
Definition: ProjectXCharacter.cpp:1207
virtual int32 SetTeam(int32 NewTeam) override
Definition: ProjectXCharacter.cpp:1870
Definition: ProjectXVehicle.h:56
Definition: TeamInterface.h:26
Definition: ProjectXAIPerception.h:36