UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
EnvQueryManager.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"
6#include "Stats/Stats.h"
8#include "UObject/Object.h"
13#include "AISubsystem.h"
15#include "EnvQueryManager.generated.h"
16
17class UEnvQuery;
19class UEnvQueryOption;
20class UEnvQueryTest;
21
22//----------------------------------------------------------------------//
23// FEnvQueryManagerConfig
24//----------------------------------------------------------------------//
25
27USTRUCT()
29{
31
32public:
33
35 UPROPERTY(config)
36 float MaxAllowedTestingTime = 0.003f;
37
41 UPROPERTY(config)
42 bool bTestQueriesUsingBreadth = false;
43
45 UPROPERTY(config)
46 int32 QueryCountWarningThreshold = 200;
47
49 UPROPERTY(config)
50 double QueryCountWarningInterval = 60.0f;
51
53 UPROPERTY(config)
54 double ExecutionTimeWarningSeconds = 0.025f;
55
57 UPROPERTY(config)
58 double HandlingResultTimeWarningSeconds = 0.025f;
59
61 UPROPERTY(config)
62 double GenerationTimeWarningSeconds = 0.01f;
63
64public:
65 FString ToString() const;
66};
67
69USTRUCT()
71{
73
74 FEnvQueryRequest() : QueryTemplate(NULL), Owner(NULL), World(NULL) {}
75
76 // basic constructor: owner will be taken from finish delegate bindings
77 FEnvQueryRequest(const UEnvQuery* Query) : QueryTemplate(Query), Owner(NULL), World(NULL) {}
78
79 // use when owner is different from finish delegate binding
80 FEnvQueryRequest(const UEnvQuery* Query, UObject* RequestOwner) : QueryTemplate(Query), Owner(RequestOwner), World(NULL) {}
81
82 // set names param indicated by Param. If Param is configured to read values from a blackboard then BlackboardComponent
83 // is expected to be non-null (the function will fail a check otherwise).
84 AIMODULE_API FEnvQueryRequest& SetDynamicParam(const FAIDynamicParam& Param, const UBlackboardComponent* BlackboardComponent = nullptr);
85
86 // set named params
87 inline FEnvQueryRequest& SetFloatParam(FName ParamName, float Value) { NamedParams.Add(ParamName, Value); return *this; }
88 inline FEnvQueryRequest& SetIntParam(FName ParamName, int32 Value) { NamedParams.Add(ParamName, *((float*)&Value)); return *this; }
89 inline FEnvQueryRequest& SetBoolParam(FName ParamName, bool Value) { NamedParams.Add(ParamName, Value ? 1.0f : -1.0f); return *this; }
90 inline FEnvQueryRequest& SetNamedParam(const FEnvNamedValue& ParamData) { NamedParams.Add(ParamData.ParamName, ParamData.Value); return *this; }
91 AIMODULE_API FEnvQueryRequest& SetNamedParams(const TArray<FEnvNamedValue>& Params);
92
93 // set world (for accessing query manager) when owner can't provide it
95
96 template< class UserClass >
97 inline int32 Execute(EEnvQueryRunMode::Type Mode, UserClass* InObj, typename FQueryFinishedSignature::TMethodPtr< UserClass > InMethod)
98 {
99 return Execute(Mode, FQueryFinishedSignature::CreateUObject(InObj, InMethod));
100 }
101 template< class UserClass >
102 inline int32 Execute(EEnvQueryRunMode::Type Mode, UserClass* InObj, typename FQueryFinishedSignature::TConstMethodPtr< UserClass > InMethod)
103 {
104 return Execute(Mode, FQueryFinishedSignature::CreateUObject(InObj, InMethod));
105 }
107
108protected:
109
111 UPROPERTY()
112 TObjectPtr<const UEnvQuery> QueryTemplate;
113
115 UPROPERTY()
117
119 UPROPERTY()
121
123 TMap<FName, float> NamedParams;
124
126};
127
129USTRUCT()
145
146#if USE_EQS_DEBUGGER
147struct FEQSDebugger
148{
149 struct FEnvQueryInfo
150 {
152 double Timestamp;
153 };
154
155 struct FStatsInfo
156 {
157 // most expensive run
160
161 // average run (sum of all runs, divide by TotalAvgCount to get values)
163 double TotalAvgDuration;
165
166 // EQS tick load
168 double LastTickTime;
172
173 FStatsInfo() :
176 LastTickTime(0.0f), LastTickFrame(0),
178 {}
179 };
180
181 AIMODULE_API void StoreStats(const FEnvQueryInstance& QueryInstance);
182 AIMODULE_API void StoreTickTime(const FEnvQueryInstance& QueryInstance, double TickTime, double MaxTickTime);
183 AIMODULE_API void StoreQuery(const TSharedPtr<FEnvQueryInstance>& QueryInstance);
184
185 static AIMODULE_API void SaveStats(const FString& FileName);
186 static AIMODULE_API void LoadStats(const FString& FileName);
187
189
190 // map query name with profiler data
192
193protected:
194 // maps owner to performed queries
196};
197
198FArchive& operator<<(FArchive& Ar, FEQSDebugger::FStatsInfo& Data);
199
200inline bool operator== (const FEQSDebugger::FEnvQueryInfo & Left, const FEQSDebugger::FEnvQueryInfo & Right)
201{
202 return Left.Instance == Right.Instance;
203}
204#endif // USE_EQS_DEBUGGER
205
206UCLASS(config = Game, defaultconfig, Transient, MinimalAPI)
208{
210
211 // makes sure we don't have any UEnvQueryManager instances serialized in.
212 // Any loaded instance will get marked as PendingKill
213 AIMODULE_API virtual void PostLoad() override;
214 AIMODULE_API virtual void PostInitProperties() override;
215
216 // FTickableGameObject begin
217 AIMODULE_API virtual void Tick(float DeltaTime) override;
218 AIMODULE_API virtual TStatId GetStatId() const override;
219 virtual bool IsTickableInEditor() const override { return true; }
220 // FTickableGameObject end
221
223 AIMODULE_API int32 RunQuery(const FEnvQueryRequest& Request, EEnvQueryRunMode::Type RunMode, FQueryFinishedSignature const& FinishDelegate);
224 AIMODULE_API int32 RunQuery(const TSharedPtr<FEnvQueryInstance>& QueryInstance, FQueryFinishedSignature const& FinishDelegate);
225
228 void SilentlyRemoveAllQueriesByQuerier(const UObject& Querier)
229 {
230 RemoveAllQueriesByQuerier(Querier, /*bExecuteFinishDelegate=*/false);
231 }
232
233 AIMODULE_API void RemoveAllQueriesByQuerier(const UObject& Querier, bool bExecuteFinishDelegate);
234
239 AIMODULE_API void RunInstantQuery(const TSharedPtr<FEnvQueryInstance>& QueryInstance);
240
242 AIMODULE_API TSharedPtr<FEnvQueryInstance> PrepareQueryInstance(const FEnvQueryRequest& Request, EEnvQueryRunMode::Type RunMode);
243
246 AIMODULE_API UEnvQuery* FindQueryTemplate(const FString& QueryName) const;
247
250
252 AIMODULE_API float FindNamedParam(int32 QueryId, FName ParamName) const;
253
255 AIMODULE_API bool AbortQuery(int32 RequestID);
256
258 AIMODULE_API void PrintActiveQueryInfo() const;
259
261 AIMODULE_API virtual void OnWorldCleanup();
262
264 AIMODULE_API virtual void FinishDestroy() override;
265
267 AIMODULE_API void RegisterExternalQuery(const TSharedPtr<FEnvQueryInstance>& QueryInstance);
268
270 AIMODULE_API void UnregisterExternalQuery(const TSharedPtr<FEnvQueryInstance>& QueryInstance);
271
273 static AIMODULE_API TArray<TSubclassOf<UEnvQueryItemType> > RegisteredItemTypes;
274
275 static AIMODULE_API UEnvQueryManager* GetCurrent(UWorld* World);
276 static AIMODULE_API UEnvQueryManager* GetCurrent(const UObject* WorldContextObject);
277
278 UFUNCTION(BlueprintCallable, Category = "AI|EQS", meta = (WorldContext = "WorldContextObject", AdvancedDisplay = "WrapperClass"))
280
281 AIMODULE_API void RegisterActiveWrapper(UEnvQueryInstanceBlueprintWrapper& Wrapper);
282 AIMODULE_API void UnregisterActiveWrapper(UEnvQueryInstanceBlueprintWrapper& Wrapper);
283
284 static AIMODULE_API void SetAllowTimeSlicing(bool bAllowTimeSlicing);
285
287 AIMODULE_API void Configure(const FEnvQueryManagerConfig& NewConfig);
288
289protected:
290 //~ Begin FExec Interface
291 AIMODULE_API virtual bool Exec_Dev(UWorld* Inworld,const TCHAR* Cmd,FOutputDevice& Ar) override;
292 //~ End FExec Interface
293
295 AIMODULE_API TSharedPtr<FEnvQueryInstance> FindQueryInstance(const int32 QueryID);
296
297#if USE_EQS_DEBUGGER
298public:
301
303
304protected:
306#endif // USE_EQS_DEBUGGER
307
308protected:
309
312
315
318
322
326
327 UPROPERTY()
329
331 TMap<FName, UEnvQueryContext*> LocalContextMap;
332
334 int32 NextQueryID;
335
337 AIMODULE_API TSharedPtr<FEnvQueryInstance> CreateQueryInstance(const UEnvQuery* Template, EEnvQueryRunMode::Type RunMode);
338
340 UPROPERTY(config)
341 float MaxAllowedTestingTime;
342
346 UPROPERTY(config)
347 bool bTestQueriesUsingBreadth;
348
350 UPROPERTY(config)
351 int32 QueryCountWarningThreshold;
352
354 UPROPERTY(config)
355 double QueryCountWarningInterval;
356
358 UPROPERTY(config)
359 double ExecutionTimeWarningSeconds = 0.025f;
360
362 UPROPERTY(config)
363 double HandlingResultTimeWarningSeconds = 0.025f;
364
366 UPROPERTY(config)
367 double GenerationTimeWarningSeconds = 0.01f;
368private:
369
371 AIMODULE_API void CreateOptionInstance(UEnvQueryOption* OptionTemplate, int32 SourceOptionIndex, const TArray<UEnvQueryTest*>& SortedTests, FEnvQueryInstance& Instance);
372
373#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
374 static AIMODULE_API bool bAllowEQSTimeSlicing;
375#endif
376#if !(UE_BUILD_SHIPPING)
377 mutable double LastQueryCountWarningThresholdTime;
378
379 AIMODULE_API void CheckQueryCount() const;
380 AIMODULE_API void LogQueryInfo(bool bDisplayThresholdWarning) const;
381#endif
382
383#if WITH_EDITOR
385
386 // used to reset LocalContextMap in case we had BP contexts stored
388#endif // WITH_EDITOR
389};
#define NULL
Definition oodle2base.h:134
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
#define MAX_uint16
Definition NumericLimits.h:20
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition Archive.h:1208
Definition IDelegateInstance.h:14
Definition NameTypes.h:617
Definition OutputDevice.h:133
Definition CoreMisc.h:28
Definition Array.h:670
Definition EnumAsByte.h:22
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SubclassOf.h:30
Definition AISubsystem.h:16
Definition EnvQueryContext.h:15
Definition EnvQueryInstanceBlueprintWrapper.h:20
Definition EnvQueryManager.h:208
TArray< TSharedPtr< FEnvQueryInstance > > RunningQueries
Definition EnvQueryManager.h:311
int32 NumRunningQueriesAbortedSinceLastUpdate
Definition EnvQueryManager.h:314
friend UEnvQueryInstanceBlueprintWrapper
Definition EnvQueryManager.h:294
TMap< int32, TWeakPtr< FEnvQueryInstance > > ExternalQueries
Definition EnvQueryManager.h:317
Definition EnvQueryOption.h:15
Definition EnvQueryTest.h:62
Definition EnvQuery.h:20
Definition Object.h:95
Definition World.h:918
Definition EnvQueryTypes.h:187
Type
Definition EnvQueryTypes.h:189
@ false
Definition radaudio_common.h:23
Definition EnvQueryTypes.h:1337
Definition EnvQueryTypes.h:286
Definition EnvQueryTypes.h:698
Definition EnvQueryManager.h:131
Definition EnvQueryTypes.h:793
Definition EnvQueryManager.h:29
Definition EnvQueryManager.h:71
int32 Execute(EEnvQueryRunMode::Type Mode, UserClass *InObj, typename FQueryFinishedSignature::TConstMethodPtr< UserClass > InMethod)
Definition EnvQueryManager.h:102
FEnvQueryRequest & SetBoolParam(FName ParamName, bool Value)
Definition EnvQueryManager.h:89
FEnvQueryRequest(const UEnvQuery *Query, UObject *RequestOwner)
Definition EnvQueryManager.h:80
int32 Execute(EEnvQueryRunMode::Type Mode, UserClass *InObj, typename FQueryFinishedSignature::TMethodPtr< UserClass > InMethod)
Definition EnvQueryManager.h:97
FEnvQueryRequest & SetWorldOverride(UWorld *InWorld)
Definition EnvQueryManager.h:94
FEnvQueryRequest & SetNamedParam(const FEnvNamedValue &ParamData)
Definition EnvQueryManager.h:90
FEnvQueryRequest & SetFloatParam(FName ParamName, float Value)
Definition EnvQueryManager.h:87
FEnvQueryRequest & SetIntParam(FName ParamName, int32 Value)
Definition EnvQueryManager.h:88
FEnvQueryRequest(const UEnvQuery *Query)
Definition EnvQueryManager.h:77
Definition ObjectPtr.h:488
Definition LightweightStats.h:416