UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassEntityQuery.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "UObject/Class.h"
6#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
9#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
10#include "MassEntityTypes.h"
11#include "MassArchetypeTypes.h"
12#include "MassArchetypeGroup.h"
13#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
15#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
16#include "MassRequirements.h"
17
18#define UE_API MASSENTITY_API
19
20#ifndef WITH_ARCHETYPE_MATCH_OVERRIDE
21#define WITH_ARCHETYPE_MATCH_OVERRIDE (WITH_EDITOR)
22#endif // WITH_ARCHETYPE_MATCH_OVERRIDE
23
24#ifndef MASS_ACHETYPE_OVERRIDE_MAX_SIZE
25#define MASS_ACHETYPE_OVERRIDE_MAX_SIZE 16
26#endif
27
28#ifndef MASS_ACHETYPE_OVERRIDE_MAX_ALIGNMENT
29#define MASS_ACHETYPE_OVERRIDE_MAX_ALIGNMENT 8
30#endif
31
32#if WITH_ARCHETYPE_MATCH_OVERRIDE
33template<typename T>
35{
36 { static_cast<const T*>(nullptr)->Match(Descriptor) } -> std::convertible_to<bool>;
37};
38#endif
39
41
51{
54
55 friend struct FMassDebugger;
56
57private:
58 struct FArchetypeMatchOverride
59 {
60 using MatchFunction = bool (*)(const void* /*Context*/, const FMassArchetypeCompositionDescriptor&);
61
62 MatchFunction Match = nullptr;
64 };
65
66public:
68 {
69 // Use whatever the whole system has been configured for.
70 Default = 0,
71 // Force parallel execution of a processor for each chunk even when parallel execution has been disabled.
72 Force = 1 << 0,
73 // The default behavior for parallel execution assigns each chunk to a thread before execution. This implicitly assumes all chunks
74 // take roughly the same amount of time to process. If chunks vary in the time it takes to process this flag can be used to queue
75 // chunks so threads can pick them up as soon as possible. This makes starting the processing of a chunk more expensive but can
76 // result in better overall utilization of threads.
77 AutoBalance = 1 << 1
78 };
79
80 FMassEntityQuery() = default;
83 UE_API FMassEntityQuery(const TSharedRef<FMassEntityManager>& EntityManager, std::initializer_list<UScriptStruct*> InitList);
85
87
89 UE_API void ForEachEntityChunk(FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
90
99
101 UE_API void ForEachEntityChunk(const FMassArchetypeEntityCollection& EntityCollection
102 , FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
103
109
111 , FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
112
114 , FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction
116
120 UE_API void CacheArchetypes();
121
129
130 inline void DirtyCachedData()
131 {
132 EntitySubsystemHash = 0;
133 LastUpdatedArchetypeDataVersion = 0;
134 }
135
137
143
150
151 void RequireMutatingWorldAccess() { bRequiresMutatingWorldAccess = true; }
152
154
156 {
157 return ValidArchetypes;
158 }
159
166
173
180
186
191
198
199 void ClearChunkFilter() { ChunkCondition.Reset(); }
200
201 bool HasChunkFilter() const { return bool(ChunkCondition); }
202
205 UE_API void ResetGrouping();
206
211 bool IsGrouping() const;
212
213#if WITH_ARCHETYPE_MATCH_OVERRIDE
214 template<typename T> requires TArchetypeMatchOverrideConcept<T>
215 void SetArchetypeMatchOverride(const T& Override);
216#endif
217
219
225
227
233
239
240private:
245 void SortArchetypes(const int32 FirstNewArchetypeIndex = 0);
250 void BuildOrderedArchetypeIndices(const int32 FirstNewArchetypeIndex = 0);
251
257 FMassChunkConditionFunction ChunkCondition;
258
259 uint32 EntitySubsystemHash = 0;
260 uint32 LastUpdatedArchetypeDataVersion = 0;
261
262 TArray<FMassArchetypeHandle> ValidArchetypes;
263 TArray<int32> OrderedArchetypeIndices;
264 TArray<FMassQueryRequirementIndicesMapping> ArchetypeFragmentMapping;
265
266 struct FArchetypeGroupingStep
267 {
268 FArchetypeGroupingStep() = default;
270 : GroupType(InGroupType), Predicate(InPredicate)
271 {
272 }
275 };
276 TArray<FArchetypeGroupingStep> GroupSortingSteps;
278
287 uint8 bAllowParallelCommands : 1 = true;
288 uint8 bRequiresMutatingWorldAccess : 1 = false;
289#if WITH_ARCHETYPE_MATCH_OVERRIDE
291#endif
292
294
295#if WITH_MASSENTITY_DEBUG
296 uint8 bRegistered : 1 = false;
297#endif // WITH_MASSENTITY_DEBUG
298
299#if WITH_ARCHETYPE_MATCH_OVERRIDE
300 FArchetypeMatchOverride ArchetypeMatchOverride;
301#endif
302
303public:
304 //-----------------------------------------------------------------------------
305 // DEPRECATED
306 //-----------------------------------------------------------------------------
307 UE_DEPRECATED(5.6, "This type of FMassEntityQuery is no longer supported. Use one of the other constructors instead.")
309
310 UE_DEPRECATED(5.6, "This type of FMassEntityQuery is no longer supported. Use one of the other constructors instead.")
312
318
319 UE_DEPRECATED(5.6, "ForEachEntityChunk is deprecated. New version doesn't require the FMassEntityManager parameter")
320 UE_API void ForEachEntityChunk(FMassEntityManager& EntityManager, FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
321
322 UE_DEPRECATED(5.6, "ForEachEntityChunk is deprecated. New version doesn't require the FMassEntityManager parameter")
323 UE_API void ForEachEntityChunk(const FMassArchetypeEntityCollection& EntityCollection, FMassEntityManager& EntityManager
324 , FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
325
326 UE_DEPRECATED(5.6, "ParallelForEachEntityChunk is deprecated. New version doesn't require the FMassEntityManager parameter. Also ParallelMode parameter changed type, usee EParallelExecutionFlags instead.")
328 , const FMassExecuteFunction& ExecuteFunction, const EParallelForMode ParallelMode = Default);
329
330 UE_DEPRECATED(5.6, "ForEachEntityChunkInCollections is deprecated. New version doesn't require the FMassEntityManager parameter")
332 , FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction);
333
334 UE_DEPRECATED(5.6, "ParallelForEachEntityChunkInCollection is deprecated. New version doesn't require the FMassEntityManager parameter. Also ParallelMode parameter changed type, usee EParallelExecutionFlags instead.")
336 , FMassEntityManager& EntityManager, FMassExecutionContext& ExecutionContext, const FMassExecuteFunction& ExecuteFunction
338
339 UE_DEPRECATED(5.6, "This flavor of CacheArchetypes is deprecated. EntityQueries are not tied to a specific EntityManager instance and there's no need to pass it in as a parameter")
341
342 UE_DEPRECATED(5.6, "This flavor of GetNumMatchingEntities is deprecated. EntityQueries are not tied to a specific EntityManager instance and there's no need to pass it in as a parameter")
344
345 UE_DEPRECATED(5.6, "This flavor of HasMatchingEntities is deprecated. EntityQueries are not tied to a specific EntityManager instance and there's no need to pass it in as a parameter")
347};
348
350
351//-----------------------------------------------------------------------------
352// INLINES
353//-----------------------------------------------------------------------------
354#if WITH_ARCHETYPE_MATCH_OVERRIDE
355template <typename T> requires TArchetypeMatchOverrideConcept<T>
356void FMassEntityQuery::SetArchetypeMatchOverride(const T& Context)
357{
358 static_assert(sizeof(T) <= sizeof(FArchetypeMatchOverride));
359 static_assert(alignof(T) <= alignof(FArchetypeMatchOverride));
360 static_assert(std::is_trivially_copyable_v<T>);
361 static_assert(std::is_trivially_destructible_v<T>);
362
365
366 ArchetypeMatchOverride.Match = [](const void* TypeErasedContext, const FMassArchetypeCompositionDescriptor& Descriptor)->bool
367 {
368 const T* Context = static_cast<const T*>(TypeErasedContext);
369 return Context->Match(Descriptor);
370 };
372}
373#endif
374
376{
377 checkf(!HasChunkFilter(), TEXT("Chunk filter needs to be cleared before setting a new one."));
378 ChunkCondition = InFunction;
379}
380
382{
383 return !GroupSortingSteps.IsEmpty();
384}
385
390
391#undef MASS_ACHETYPE_OVERRIDE_MAX_SIZE
392#undef MASS_ACHETYPE_OVERRIDE_MAX_ALIGNMENT
393
394#undef UE_API
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
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
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
#define MASS_ACHETYPE_OVERRIDE_MAX_SIZE
Definition MassEntityQuery.h:25
#define UE_API
Definition MassEntityQuery.h:18
#define MASS_ACHETYPE_OVERRIDE_MAX_ALIGNMENT
Definition MassEntityQuery.h:29
EMassExecutionContextType
Definition MassEntityTypes.h:612
EMassFragmentAccess
Definition MassRequirements.h:18
T * New(FMemStackBase &Mem, int32 Count=1, int32 Align=DEFAULT_ALIGNMENT)
Definition MemStack.h:259
const bool
Definition NetworkReplayStreaming.h:178
TConstArrayView< const UScriptStruct * > TConstArrayView< const UScriptStruct * >
Definition TypedElementQueryCapabilities.inl:16
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition UnrealType.h:3087
Definition Array.h:670
UE_REWRITE bool IsEmpty() const
Definition Array.h:1133
Definition SharedPointer.h:692
TSharedRef< ObjectType, Mode > ToSharedRef() const &
Definition SharedPointer.h:1028
Definition SharedPointer.h:153
Definition SubclassOf.h:30
Definition MassProcessor.h:78
Definition Class.h:1720
Definition MassEntityTypes.h:74
Definition MassArchetypeTypes.h:93
Definition MassArchetypeTypes.h:39
Definition MassDebugger.h:441
Definition MassEntityManager.h:96
Definition MassEntityQuery.h:51
EParallelExecutionFlags
Definition MassEntityQuery.h:68
UE_API TArray< FMassEntityHandle > GetMatchingEntityHandles()
Definition MassEntityQuery.cpp:647
void SetParallelCommandBufferEnabled(const bool bInAllowParallelCommands)
Definition MassEntityQuery.h:232
EParallelForMode
Definition MassEntityQuery.h:314
@ Default
Definition MassEntityQuery.h:315
@ ForceParallelExecution
Definition MassEntityQuery.h:316
UE_API void RegisterWithProcessor(UMassProcessor &Owner)
Definition MassEntityQuery.cpp:105
static constexpr int32 ArchetypeMatchOverrideSize
Definition MassEntityQuery.h:52
void RequireMutatingWorldAccess()
Definition MassEntityQuery.h:151
UE_API void CacheArchetypes()
Definition MassEntityQuery.cpp:116
FMassSubsystemRequirements & AddSubsystemRequirement(const TSubclassOf< USubsystem > SubsystemClass, const EMassFragmentAccess AccessMode)
Definition MassEntityQuery.h:138
void SetChunkFilter(const FMassChunkConditionFunction &InFunction)
Definition MassEntityQuery.h:375
bool DoesRequireGameThreadExecution() const
Definition MassEntityQuery.h:144
FMassEntityQuery()=default
void ClearChunkFilter()
Definition MassEntityQuery.h:199
UE_API void DebugEnableEntityOwnerLogging()
Definition MassEntityQuery.cpp:785
UE_API void ForEachEntityChunkInCollections(TConstArrayView< FMassArchetypeEntityCollection > EntityCollections, FMassExecutionContext &ExecutionContext, const FMassExecuteFunction &ExecuteFunction)
Definition MassEntityQuery.cpp:211
UE_API void ForEachEntityChunk(FMassExecutionContext &ExecutionContext, const FMassExecuteFunction &ExecuteFunction)
Definition MassEntityQuery.cpp:229
UE_API void GroupBy(UE::Mass::FArchetypeGroupType GroupType)
Definition MassEntityQuery.cpp:661
bool IsEmpty() const
Definition MassEntityQuery.h:153
UE_API void ParallelForEachEntityChunkInCollection(TConstArrayView< FMassArchetypeEntityCollection > EntityCollections, FMassExecutionContext &ExecutionContext, const FMassExecuteFunction &ExecuteFunction, const EParallelExecutionFlags Flags=EParallelExecutionFlags::Default)
Definition MassEntityQuery.cpp:411
UE_API const FMassQueryRequirementIndicesMapping & GetRequirementsMappingForArchetype(const FMassArchetypeHandle ArchetypeHandle) const
Definition MassEntityQuery.cpp:771
void Clear()
Definition MassEntityQuery.h:122
bool HasChunkFilter() const
Definition MassEntityQuery.h:201
UE_API void ResetGrouping()
Definition MassEntityQuery.cpp:675
UE_API bool HasMatchingEntities()
Definition MassEntityQuery.cpp:618
UE_API TArray< FMassArchetypeEntityCollection > CreateMatchingEntitiesCollection()
Definition MassEntityQuery.cpp:633
UE_API void ParallelForEachEntityChunk(FMassExecutionContext &ExecutionContext, const FMassExecuteFunction &ExecuteFunction, const EParallelExecutionFlags Flags=EParallelExecutionFlags::Default)
Definition MassEntityQuery.cpp:429
UE_API void ExportRequirements(FMassExecutionRequirements &OutRequirements) const
Definition MassEntityQuery.cpp:779
static constexpr uint32 ArchetypeMatchOverrideAlignment
Definition MassEntityQuery.h:53
void DirtyCachedData()
Definition MassEntityQuery.h:130
const TArray< FMassArchetypeHandle > & GetArchetypes() const
Definition MassEntityQuery.h:155
UE_API int32 GetNumMatchingEntities()
Definition MassEntityQuery.cpp:588
bool IsGrouping() const
Definition MassEntityQuery.h:381
const TSharedPtr< FMassEntityManager > & GetEntityManager() const
Definition MassEntityQuery.h:386
Definition MassExecutionContext.h:29
Definition MassProcessorDependencySolver.h:68
Definition MassRequirements.h:160
TSharedPtr< FMassEntityManager > CachedEntityManager
Definition MassRequirements.h:578
bool DoesRequireGameThreadExecution() const
Definition MassRequirements.h:822
MASSENTITY_API void Reset()
Definition MassRequirements.cpp:293
MASSENTITY_API bool IsEmpty() const
Definition MassRequirements.cpp:219
Definition MassArchetypeTypes.h:326
Definition MassRequirements.h:72
bool DoesRequireGameThreadExecution() const
Definition MassRequirements.h:651
bool IsEmpty() const
Definition MassRequirements.h:646
MASSENTITY_API void Reset()
Definition MassRequirements.cpp:65
FMassSubsystemRequirements & AddSubsystemRequirement(const EMassFragmentAccess AccessMode)
Definition MassRequirements.h:78
static UE_FORCEINLINE_HINT void * Memcpy(void *Dest, const void *Src, SIZE_T Count)
Definition UnrealMemory.h:160
Definition TypeCompatibleBytes.h:17
Definition MassArchetypeGroup.h:56
Definition MassArchetypeGroup.h:15
Definition MassEntityTypes.h:47