UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BrainComponent.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"
9#include "EngineDefines.h"
10#include "AITypes.h"
11#include "AIResourceInterface.h"
12#include "BrainComponent.generated.h"
13
14class AAIController;
15class AController;
16class APawn;
17class UBlackboardComponent;
18class UBrainComponent;
19struct FAIMessage;
21
23
25
27{
29 {
32 };
33
36
39
42
45
48
55
57 void SetFlag(uint8 Flag) { MessageFlags |= Flag; }
58 void ClearFlag(uint8 Flag) { MessageFlags &= ~Flag; }
59 bool HasFlag(uint8 Flag) const { return (MessageFlags & Flag) != 0; }
60
61 static AIMODULE_API void Send(AController* Controller, const FAIMessage& Message);
62 static AIMODULE_API void Send(APawn* Pawn, const FAIMessage& Message);
63 static AIMODULE_API void Send(UBrainComponent* BrainComp, const FAIMessage& Message);
64
65 static AIMODULE_API void Broadcast(UObject* WorldContextObject, const FAIMessage& Message);
66};
67
69
70struct FAIMessageObserver : public TSharedFromThis<FAIMessageObserver>
71{
72public:
74
76 static AIMODULE_API FAIMessageObserverHandle Create(AController* Controller, FName MessageType, FAIRequestID MessageID, FOnAIMessage const& Delegate);
77
78 static AIMODULE_API FAIMessageObserverHandle Create(APawn* Pawn, FName MessageType, FOnAIMessage const& Delegate);
79 static AIMODULE_API FAIMessageObserverHandle Create(APawn* Pawn, FName MessageType, FAIRequestID MessageID, FOnAIMessage const& Delegate);
80
83
85
86 AIMODULE_API void OnMessage(const FAIMessage& Message);
88
89 inline FName GetObservedMessageType() const { return MessageType; }
90 inline FAIRequestID GetObservedMessageID() const { return MessageID; }
91 inline bool IsObservingMessageID() const { return bFilterByID; }
92
93private:
94
95 AIMODULE_API void Register(UBrainComponent* OwnerComp);
96 AIMODULE_API void Unregister();
97
99 FName MessageType;
100
102 FAIRequestID MessageID;
103 bool bFilterByID;
104
106 FOnAIMessage ObserverDelegate;
107
110
111 // Non-copyable
114};
115
116UCLASS(ClassGroup = AI, BlueprintType, hidecategories = (Sockets, Collision), MinimalAPI)
118{
120
121protected:
124 TObjectPtr<UBlackboardComponent> BlackboardComp;
125
128
129 // @TODO this is a temp contraption to implement delayed messages delivering
130 // until proper AI messaging is implemented
131 TArray<FAIMessage> MessagesToProcess;
132
133public:
134 virtual FString GetDebugInfoString() const { return TEXT(""); }
135
139 AIMODULE_API void RequestLogicRestartOnUnlock();
140
142 UFUNCTION(BlueprintCallable, Category = "AI|Logic")
143 AIMODULE_API virtual void StartLogic();
144
146 UFUNCTION(BlueprintCallable, Category = "AI|Logic")
147 AIMODULE_API virtual void RestartLogic();
148
150 UFUNCTION(BlueprintCallable, Category = "AI|Logic")
151 AIMODULE_API virtual void StopLogic(const FString& Reason);
152
154 virtual void Cleanup() {}
155
157 virtual void PauseLogic(const FString& Reason) {}
158
163 AIMODULE_API virtual EAILogicResuming::Type ResumeLogic(const FString& Reason);
164public:
165
166 UFUNCTION(BlueprintPure, Category = "AI|Logic")
167 AIMODULE_API virtual bool IsRunning() const;
168
169 UFUNCTION(BlueprintPure, Category = "AI|Logic")
170 AIMODULE_API virtual bool IsPaused() const;
171
172#if ENABLE_VISUAL_LOG
173 AIMODULE_API virtual void DescribeSelfToVisLog(struct FVisualLogEntry* Snapshot) const;
174#endif // ENABLE_VISUAL_LOG
175
176 // IAIResourceInterface begin
177 AIMODULE_API virtual void LockResource(EAIRequestPriority::Type LockSource) override;
178 AIMODULE_API virtual void ClearResourceLock(EAIRequestPriority::Type LockSource) override;
179 AIMODULE_API virtual void ForceUnlockResource() override;
180 AIMODULE_API virtual bool IsResourceLocked() const override;
181 // IAIResourceInterface end
182
183 AIMODULE_API virtual void HandleMessage(const FAIMessage& Message);
184
186 AIMODULE_API virtual void InitializeComponent() override;
187 AIMODULE_API virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
188 AIMODULE_API virtual void OnRegister() override;
192 AIMODULE_API void CacheBlackboardComponent(UBlackboardComponent* BBComp);
193
195 UBlackboardComponent* GetBlackboardComponent();
196
198 const UBlackboardComponent* GetBlackboardComponent() const;
199
200 inline AAIController* GetAIOwner() const { return AIOwner; }
201
202protected:
203
206
207 friend struct FAIMessageObserver;
208 friend struct FAIMessage;
209
212
213private:
214 uint32 bDoLogicRestartOnUnlock : 1;
215
216public:
217 // static names to be used with SendMessage. Fell free to define game-specific
218 // messages anywhere you want
222};
223
225// Inlines
226
227inline UBlackboardComponent* UBrainComponent::GetBlackboardComponent()
228{
229 return BlackboardComp;
230}
231
232inline const UBlackboardComponent* UBrainComponent::GetBlackboardComponent() const
233{
234 return BlackboardComp;
235}
TSharedPtr< struct FAIMessageObserver > FAIMessageObserverHandle
Definition BrainComponent.h:68
bool bSuccess
Definition ConvexDecomposition3.cpp:819
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:57
ELevelTick
Definition EngineBaseTypes.h:70
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition AIController.h:91
Definition Controller.h:41
Definition NameTypes.h:617
Definition AIResourceInterface.h:18
Definition Sockets.Build.cs:6
Definition Array.h:670
Definition EnumAsByte.h:22
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition ActorComponent.h:152
Definition BrainComponent.h:118
virtual void PauseLogic(const FString &Reason)
Definition BrainComponent.h:157
FAIResourceLock ResourceLock
Definition BrainComponent.h:211
TObjectPtr< UBlackboardComponent > BlackboardComp
Definition BrainComponent.h:124
static AIMODULE_API const FName AIMessage_QueryFinished
Definition BrainComponent.h:221
TArray< FAIMessageObserver * > MessageObservers
Definition BrainComponent.h:205
AAIController * GetAIOwner() const
Definition BrainComponent.h:200
static AIMODULE_API const FName AIMessage_RepathFailed
Definition BrainComponent.h:220
static AIMODULE_API const FName AIMessage_MoveFinished
Definition BrainComponent.h:219
UBlackboardComponent * GetBlackboardComponent()
Definition BrainComponent.h:227
Definition Object.h:95
Type
Definition AITypes.h:116
Type
Definition AITypes.h:126
Definition BrainComponent.h:71
FAIRequestID GetObservedMessageID() const
Definition BrainComponent.h:90
AIMODULE_API FAIMessageObserver()
Definition BrainComponent.cpp:82
AIMODULE_API ~FAIMessageObserver()
Definition BrainComponent.cpp:145
AIMODULE_API FString DescribeObservedMessage() const
Definition BrainComponent.cpp:176
FName GetObservedMessageType() const
Definition BrainComponent.h:89
AIMODULE_API void OnMessage(const FAIMessage &Message)
Definition BrainComponent.cpp:165
bool IsObservingMessageID() const
Definition BrainComponent.h:91
Definition BrainComponent.h:27
FAIMessage()
Definition BrainComponent.h:49
TEnumAsByte< EStatus > Status
Definition BrainComponent.h:44
EStatus
Definition BrainComponent.h:29
@ Success
Definition BrainComponent.h:31
@ Failure
Definition BrainComponent.h:30
FAIRequestID RequestID
Definition BrainComponent.h:41
FAIMessage(FName InMessage, UObject *InSender, EStatus InStatus)
Definition BrainComponent.h:53
FAIMessage(FName InMessage, UObject *InSender, FAIRequestID InID, bool bSuccess)
Definition BrainComponent.h:52
FAIMessage(FName InMessage, UObject *InSender, bool bSuccess)
Definition BrainComponent.h:54
FName MessageName
Definition BrainComponent.h:35
FAIMessage(FName InMessage, UObject *InSender)
Definition BrainComponent.h:50
void SetFlag(uint8 Flag)
Definition BrainComponent.h:57
FWeakObjectPtr Sender
Definition BrainComponent.h:38
void SetFlags(uint8 Flags)
Definition BrainComponent.h:56
static AIMODULE_API void Broadcast(UObject *WorldContextObject, const FAIMessage &Message)
Definition BrainComponent.cpp:70
FAIMessage(FName InMessage, UObject *InSender, FAIRequestID InID, EStatus InStatus)
Definition BrainComponent.h:51
uint8 MessageFlags
Definition BrainComponent.h:47
void ClearFlag(uint8 Flag)
Definition BrainComponent.h:58
bool HasFlag(uint8 Flag) const
Definition BrainComponent.h:59
Definition AITypes.h:403
Definition AITypes.h:329
Definition EngineBaseTypes.h:571
Definition VisualLoggerTypes.h:205
Definition WeakObjectPtr.h:49
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25