UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AIPerceptionTypes.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
7#include "AITypes.h"
9#include "AIPerceptionTypes.generated.h"
10
12class UAISense;
13
16{};
18
23
25
26UENUM()
34
36{
38
40
41 // by default accept all
44
45 void Clear()
46 {
48 }
49
50 bool IsEmpty() const
51 {
52 return (AcceptedChannelsMask == 0);
53 }
54
56 {
57 AcceptedChannelsMask &= ~(1 << Channel);
58 return *this;
59 }
60
62 {
63 AcceptedChannelsMask |= (1 << Channel);
64 return *this;
65 }
66
67 inline bool ShouldRespondToChannel(FAISenseID Channel) const
68 {
69 return (AcceptedChannelsMask & (1 << Channel)) != 0;
70 }
71
77
82
84 {
85 private:
86 FFlagsContainer RemainingChannelsToTest;
87 const FPerceptionChannelAllowList& AllowList;
88 int32 CurrentIndex;
89
90 public:
92 : RemainingChannelsToTest((FFlagsContainer)-1)
93 , AllowList(InAllowList)
94 , CurrentIndex(INDEX_NONE)
95 {
97 }
98
100 {
101 const FFlagsContainer& Flags = AllowList.GetAcceptedChannelsMask();
102
103 while ((RemainingChannelsToTest & Flags) != 0 && ((1 << ++CurrentIndex) | Flags) == 0)
104 {
105 RemainingChannelsToTest &= ~(1 << CurrentIndex);
106 }
107 }
108
109 inline explicit operator bool() const
110 {
111 return (RemainingChannelsToTest & AllowList.GetAcceptedChannelsMask()) != 0;
112 }
113
114 inline int32 operator*() const
115 {
116 return CurrentIndex;
117 }
118
119 inline void operator++()
120 {
121 // mark "old" index as already used
122 RemainingChannelsToTest &= ~(1 << CurrentIndex);
124 }
125 };
126};
127
128USTRUCT(BlueprintType)
130{
132
133 static AIMODULE_API const float NeverHappenedAge;
134
136 {
138 SensingFailed
139 };
140
141protected:
142 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
143 float Age;
144
145 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
146 float ExpirationAge;
147public:
148 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
149 float Strength;
150 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
151 FVector StimulusLocation;
152 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
153 FVector ReceiverLocation;
154 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
156
158
160 uint32 bWantsToNotifyOnlyOnValueChange : 1;
161
162 UPROPERTY(BlueprintReadWrite, Category = "AI|Perception")
163 uint32 bSuccessfullySensed:1; // currently used only for marking failed sight tests
164
167 uint32 bExpired:1;
168
169public:
170
173
174 // default constructor
176 : Age(NeverHappenedAge), ExpirationAge(NeverHappenedAge), Strength(-1.f), StimulusLocation(FAISystem::InvalidLocation)
177 , ReceiverLocation(FAISystem::InvalidLocation), Tag(NAME_None), Type(FAISenseID::InvalidID()), bWantsToNotifyOnlyOnValueChange(false)
178 , bSuccessfullySensed(false), bExpired(false)
179 {}
180
181 FAIStimulus& SetExpirationAge(float InExpirationAge) { ExpirationAge = InExpirationAge; return *this; }
182 FAIStimulus& SetStimulusAge(float StimulusAge) { Age = StimulusAge; return *this; }
183 FAIStimulus& SetWantsNotifyOnlyOnValueChange(bool InEnable) { bWantsToNotifyOnlyOnValueChange = InEnable; return *this; }
184
185 inline float GetAge() const { return Strength > 0 ? Age : NeverHappenedAge; }
188 {
190 return Age < ExpirationAge;
191 }
192 inline bool WasSuccessfullySensed() const { return bSuccessfullySensed; }
193 inline bool IsExpired() const { return bExpired; }
194 inline void MarkNoLongerSensed() { bSuccessfullySensed = false; }
195 inline void MarkExpired() { bExpired = true; MarkNoLongerSensed(); }
196 inline bool IsActive() const { return WasSuccessfullySensed() == true && IsValid(); }
197 inline bool WantsToNotifyOnlyOnPerceptionChange() const { return bWantsToNotifyOnlyOnValueChange; }
198 inline bool IsValid() const { return Type != FAISenseID::InvalidID() && GetAge() < NeverHappenedAge; }
199
200#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
201 AIMODULE_API FString GetDebugDescription() const;
202#endif // !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
203};
204
205USTRUCT(BlueprintType)
207{
209
211
213 : bDetectEnemies(bInDetectEnemies)
214 , bDetectNeutrals(bInDetectNeutrals)
215 , bDetectFriendlies(bInDetectFriendlies) {}
216
217 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Sense")
218 uint32 bDetectEnemies : 1 = false;
219
220 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Sense")
221 uint32 bDetectNeutrals : 1 = false;
222
223 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Sense")
224 uint32 bDetectFriendlies : 1 = false;
225
226 uint8 GetAsFlags() const { return IntCastChecked<uint8>((bDetectEnemies << ETeamAttitude::Hostile) | (bDetectNeutrals << ETeamAttitude::Neutral) | (bDetectFriendlies << ETeamAttitude::Friendly)); }
227 inline bool ShouldDetectAll() const { return (bDetectEnemies && bDetectNeutrals && bDetectFriendlies); }
228
230
232 {
233 static const uint8 AllFlags = DetectAllFlags();
234 return AffiliationFlags == AllFlags || ((1 << FGenericTeamId::GetAttitude(TeamA, TeamB)) & AffiliationFlags);
235 }
236
237 static bool ShouldSenseTeam(const IGenericTeamAgentInterface* TeamAgent, const AActor& TargetActor, uint8 AffiliationFlags)
238 {
239 static const uint8 AllFlags = DetectAllFlags();
240 return AffiliationFlags == AllFlags
241 || (TeamAgent == nullptr ? (AffiliationFlags & (1 << ETeamAttitude::Neutral)) : ((1 << TeamAgent->GetTeamAttitudeTowards(TargetActor)) & AffiliationFlags));
242 }
243};
244
247{
249
251
254
256
257private:
258 uint32 bHasStimulusToProcess : 1;
259
260 FPerceptionListenerID ListenerID;
261
263public:
265
267
268 bool operator==(const UAIPerceptionComponent* Other) const { return Listener.Get() == Other; }
269 bool operator==(const FPerceptionListener& Other) const { return Listener == Other.Listener; }
270
272
273 AIMODULE_API void RegisterStimulus(AActor* Source, const FAIStimulus& Stimulus);
274
275 inline bool HasAnyNewStimuli() const { return bHasStimulusToProcess; }
277
278 inline bool HasSense(FAISenseID SenseID) const { return Filter.ShouldRespondToChannel(SenseID); }
279
280 // used to remove "dead" listeners
282
283 inline FPerceptionListenerID GetListenerID() const { return ListenerID; }
284
287
289 AIMODULE_API const AActor* GetBodyActor() const;
290
292
293private:
295 inline void SetListenerID(FPerceptionListenerID InListenerID) { ListenerID = InListenerID; }
296 inline void MarkForStimulusProcessing() { bHasStimulusToProcess = true; }
297};
298
304
EAISenseNotifyType
Definition AIPerceptionTypes.h:28
FAIGenericID< FPerceptionListenerCounter > FPerceptionListenerID
Definition AIPerceptionTypes.h:22
FAINamedID< FAISenseCounter > FAISenseID
Definition AIPerceptionTypes.h:17
@ INDEX_NONE
Definition CoreMiscDefines.h:150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition NameTypes.h:617
Definition GenericTeamAgentInterface.h:82
Definition UnrealString.h.inl:34
Definition AIPerceptionSystem.h:31
Definition AISense.h:21
Definition AIPerceptionTypes.h:306
TMap< FPerceptionListenerID, FPerceptionListener > FListenerMap
Definition AIPerceptionTypes.h:307
@ Neutral
Definition GenericTeamAgentInterface.h:17
@ Hostile
Definition GenericTeamAgentInterface.h:18
@ Friendly
Definition GenericTeamAgentInterface.h:16
Definition AIController.h:459
@ false
Definition radaudio_common.h:23
Definition AITypes.h:284
Definition AITypes.h:228
Definition AITypes.h:172
static FAINamedID< FAISenseCounter > InvalidID()
Definition AITypes.h:214
Definition AIPerceptionTypes.h:207
static bool ShouldSenseTeam(const IGenericTeamAgentInterface *TeamAgent, const AActor &TargetActor, uint8 AffiliationFlags)
Definition AIPerceptionTypes.h:237
static uint8 DetectAllFlags()
Definition AIPerceptionTypes.h:229
bool ShouldDetectAll() const
Definition AIPerceptionTypes.h:227
static bool ShouldSenseTeam(FGenericTeamId TeamA, FGenericTeamId TeamB, uint8 AffiliationFlags)
Definition AIPerceptionTypes.h:231
Definition AIPerceptionTypes.h:16
Definition AIPerceptionTypes.h:130
bool AgeStimulus(float ConstPerceptionAgingRate)
Definition AIPerceptionTypes.h:187
bool WantsToNotifyOnlyOnPerceptionChange() const
Definition AIPerceptionTypes.h:197
bool IsValid() const
Definition AIPerceptionTypes.h:198
bool IsActive() const
Definition AIPerceptionTypes.h:196
bool IsExpired() const
Definition AIPerceptionTypes.h:193
void MarkNoLongerSensed()
Definition AIPerceptionTypes.h:194
float GetAge() const
Definition AIPerceptionTypes.h:185
FResult
Definition AIPerceptionTypes.h:136
@ SensingSucceeded
Definition AIPerceptionTypes.h:137
FAIStimulus & SetWantsNotifyOnlyOnValueChange(bool InEnable)
Definition AIPerceptionTypes.h:183
FAIStimulus & SetExpirationAge(float InExpirationAge)
Definition AIPerceptionTypes.h:181
FAIStimulus & SetStimulusAge(float StimulusAge)
Definition AIPerceptionTypes.h:182
void MarkExpired()
Definition AIPerceptionTypes.h:195
bool WasSuccessfullySensed() const
Definition AIPerceptionTypes.h:192
Definition GenericTeamAgentInterface.h:24
static AIMODULE_API ETeamAttitude::Type GetAttitude(const AActor *A, const AActor *B)
Definition AIInterfaces.cpp:38
Definition AIPerceptionTypes.h:84
int32 operator*() const
Definition AIPerceptionTypes.h:114
FConstIterator(const FPerceptionChannelAllowList &InAllowList)
Definition AIPerceptionTypes.h:91
void FindNextAcceptedChannel()
Definition AIPerceptionTypes.h:99
void operator++()
Definition AIPerceptionTypes.h:119
Definition AIPerceptionTypes.h:36
FFlagsContainer AcceptedChannelsMask
Definition AIPerceptionTypes.h:39
FPerceptionChannelAllowList & AcceptChannel(FAISenseID Channel)
Definition AIPerceptionTypes.h:61
FFlagsContainer GetAcceptedChannelsMask() const
Definition AIPerceptionTypes.h:78
bool ShouldRespondToChannel(FAISenseID Channel) const
Definition AIPerceptionTypes.h:67
FPerceptionChannelAllowList()
Definition AIPerceptionTypes.h:42
int32 FFlagsContainer
Definition AIPerceptionTypes.h:37
void Clear()
Definition AIPerceptionTypes.h:45
bool IsEmpty() const
Definition AIPerceptionTypes.h:50
FPerceptionChannelAllowList & FilterOutChannel(FAISenseID Channel)
Definition AIPerceptionTypes.h:55
FPerceptionChannelAllowList & MergeFilterIn(const FPerceptionChannelAllowList &OtherFilter)
Definition AIPerceptionTypes.h:72
Definition AIPerceptionTypes.h:21
Definition AIPerceptionTypes.h:247
FPerceptionChannelAllowList Filter
Definition AIPerceptionTypes.h:250
AIMODULE_API void UpdateListenerProperties(UAIPerceptionComponent &Listener)
Definition AIPerceptionTypes.cpp:91
AIMODULE_API FName GetBodyActorName() const
Definition AIPerceptionTypes.cpp:113
AIMODULE_API const AActor * GetBodyActor() const
Definition AIPerceptionTypes.cpp:125
bool operator==(const FPerceptionListener &Other) const
Definition AIPerceptionTypes.h:269
AIMODULE_API const IGenericTeamAgentInterface * GetTeamAgent() const
Definition AIPerceptionTypes.cpp:130
bool HasSense(FAISenseID SenseID) const
Definition AIPerceptionTypes.h:278
static AIMODULE_API const FPerceptionListener NullListener
Definition AIPerceptionTypes.h:281
FVector CachedDirection
Definition AIPerceptionTypes.h:253
TWeakObjectPtr< UAIPerceptionComponent > Listener
Definition AIPerceptionTypes.h:248
AIMODULE_API uint32 GetBodyActorUniqueID() const
Definition AIPerceptionTypes.cpp:119
FVector CachedLocation
Definition AIPerceptionTypes.h:252
AIMODULE_API void CacheLocation()
Definition AIPerceptionTypes.cpp:83
FGenericTeamId TeamIdentifier
Definition AIPerceptionTypes.h:255
AIMODULE_API void ProcessStimuli()
Definition AIPerceptionTypes.cpp:106
bool HasAnyNewStimuli() const
Definition AIPerceptionTypes.h:275
FPerceptionListenerID GetListenerID() const
Definition AIPerceptionTypes.h:283
bool operator==(const UAIPerceptionComponent *Other) const
Definition AIPerceptionTypes.h:268
AIMODULE_API void RegisterStimulus(AActor *Source, const FAIStimulus &Stimulus)
Definition AIPerceptionTypes.cpp:100
Definition AIPerceptionTypes.h:300
FPerceptionChannelAllowList RelevantSenses
Definition AIPerceptionTypes.h:302
TWeakObjectPtr< AActor > SourceActor
Definition AIPerceptionTypes.h:301
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132