UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassProcessor.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
6#include "CoreMinimal.h"
7#include "MassEntityManager.h"
8#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
11#include "MassCommandBuffer.h"
12#include "MassRequirements.h"
13#include "MassProcessor.generated.h"
14
15
16#define UE_API MASSENTITY_API
17
20struct FMassDebugger;
21struct FMassEntityQuery;
26namespace UE::Mass
27{
28 struct FQueryExecutor;
29}
30
32{
33 Invalid,
36 Done
37};
38
39USTRUCT()
41{
43
44
45 UPROPERTY(EditAnywhere, Category = Processor, config)
46 FName ExecuteInGroup = FName();
47
48 UPROPERTY(EditAnywhere, Category = Processor, config)
49 TArray<FName> ExecuteBefore;
50
51 UPROPERTY(EditAnywhere, Category = Processor, config)
52 TArray<FName> ExecuteAfter;
53};
54
55UENUM()
57{
59 Active,
60 OneShot, // one-shot processor will auto-disable itself after the next CallExecute call
61};
62
68UENUM()
70{
71 Prune, // pruning will always be applied at runtime
72 Never, // pruning will never be applied at runtime
74};
75
76UCLASS(abstract, EditInlineNew, CollapseCategories, config = Mass, defaultconfig, ConfigDoNotCheckDefaults, MinimalAPI)
78{
80
81public:
82
85
86 bool IsInitialized() const;
87
89 UE_API void CallInitialize(const TNotNull<UObject*> Owner, const TSharedRef<FMassEntityManager>& EntityManager);
90
91 UE_API virtual FGraphEventRef DispatchProcessorTasks(const TSharedPtr<FMassEntityManager>& EntityManager, FMassExecutionContext& ExecutionContext, const FGraphEventArray& Prerequisites = FGraphEventArray());
92
93 EProcessorExecutionFlags GetExecutionFlags() const;
94
96 bool ShouldExecute(const EProcessorExecutionFlags CurrentExecutionFlags) const;
97 UE_API void CallExecute(FMassEntityManager& EntityManager, FMassExecutionContext& Context);
98
103 bool ShouldAllowMultipleInstances() const;
104
105 void DebugOutputDescription(FOutputDevice& Ar) const;
106 UE_API virtual void DebugOutputDescription(FOutputDevice& Ar, int32 Indent) const;
107 UE_API virtual FString GetProcessorName() const;
108
109 //----------------------------------------------------------------------//
110 // Ordering functions
111 //----------------------------------------------------------------------//
120 UE_API virtual bool ShouldAllowQueryBasedPruning(const bool bRuntimeMode = true) const;
121
122 UE_API virtual EMassProcessingPhase GetProcessingPhase() const;
123 UE_API virtual void SetProcessingPhase(EMassProcessingPhase Phase);
124 bool DoesRequireGameThreadExecution() const;
125
126 const FMassProcessorExecutionOrder& GetExecutionOrder() const;
127
130 UE_API virtual void ExportRequirements(FMassExecutionRequirements& OutRequirements) const;
131
132 const FMassSubsystemRequirements& GetProcessorRequirements() const;
133
139 int16 GetExecutionPriority() const;
140
147 void SetExecutionPriority(const int16 NewExecutionPriority);
148
151 UE_API void RegisterQuery(FMassEntityQuery& Query);
152
153 void MarkAsDynamic();
154 bool IsDynamic() const;
155
160 void MakeActive();
165 void MakeOneShot();
169 void MakeInactive();
170
171 bool IsActive() const;
172
173 bool ShouldAutoAddToGlobalList() const;
174#if WITH_EDITOR
175 bool ShouldShowUpInSettings() const;
176#endif // WITH_EDITOR
177
182 UE_API void SetShouldAutoRegisterWithGlobalList(const bool bAutoRegister);
183
184 UE_API void GetArchetypesMatchingOwnedQueries(const FMassEntityManager& EntityManager, TArray<FMassArchetypeHandle>& OutArchetype);
185 UE_API bool DoesAnyArchetypeMatchOwnedQueries(const FMassEntityManager& EntityManager);
186 int32 GetOwnedQueriesNum() const;
187
188#if CPUPROFILERTRACE_ENABLED
189 FString StatId;
190#endif
191
192protected:
194 UE_API virtual void InitializeInternal(UObject& Owner, const TSharedRef<FMassEntityManager>& EntityManager);
195
201 UE_API virtual void ConfigureQueries(const TSharedRef<FMassEntityManager>& EntityManager);
202
203 UE_API virtual void PostInitProperties() override;
204
209 UE_API virtual void Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context);
210
211protected:
213 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
215
219 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
221
223 UPROPERTY(EditAnywhere, Category = "Pipeline", meta = (Bitmask, BitmaskEnum = "/Script/MassEntity.EProcessorExecutionFlags"), config)
224 uint8 ExecutionFlags;
225
227 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
228 uint8 bAutoRegisterWithProcessingPhases : 1 = true;
229
232 uint8 bAllowMultipleInstances : 1 = false;
233
234 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
235 uint8 bRequiresGameThreadExecution : 1 = false;
236
237#if WITH_EDITORONLY_DATA
240 UPROPERTY(config)
241 uint8 bCanShowUpInSettings : 1 = true;
242#endif // WITH_EDITORONLY_DATA
243
244private:
254 uint8 bIsDynamic : 1 = false;
255
257 uint8 bInitialized : 1 = false;
258
268 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
270
271protected:
279 UPROPERTY(EditDefaultsOnly, Category = Processor, config)
280 int16 ExecutionPriority = 0;
281
288
291
293 FMassSubsystemRequirements ProcessorRequirements;
294
296 TSharedPtr<UE::Mass::FQueryExecutor> AutoExecuteQuery;
297
298private:
302 TArray<FMassEntityQuery*> OwnedQueries;
303
304#if WITH_MASSENTITY_DEBUG
305 FString DebugDescription;
306#endif
307
308 //-----------------------------------------------------------------------------
309 // DEPRECATED
310 //-----------------------------------------------------------------------------
311public:
312 UE_DEPRECATED(5.6, "Initialize is deprecated. Override InitializeInternal(UObject&, const TSharedRef<FMassEntityManager>&) instead. If you want to call the function, use CallInitialize.")
314 UE_DEPRECATED(5.6, "This flavor of ConfigureQueries is deprecated. Override ConfigureQueries(const TSharedRef<FMassEntityManager>&) instead.")
315 virtual void ConfigureQueries() final {};
316};
317
318
319UCLASS(MinimalAPI)
321{
323
324 friend FMassDebugger;
325public:
327 {
331#if WITH_MASSENTITY_DEBUG
332 int32 SequenceIndex = INDEX_NONE;
333#endif // WITH_MASSENTITY_DEBUG
334 };
335
336public:
338
339 UE_API void SetChildProcessors(TArrayView<UMassProcessor*> InProcessors);
340 UE_API void SetChildProcessors(TArray<TObjectPtr<UMassProcessor>>&& InProcessors);
341
342 UE_API virtual void InitializeInternal(UObject& Owner, const TSharedRef<FMassEntityManager>& InEntityManager) override;
343 UE_API virtual void DebugOutputDescription(FOutputDevice& Ar, int32 Indent = 0) const override;
344 UE_API virtual void SetProcessingPhase(EMassProcessingPhase Phase) override;
345
346 UE_API void SetGroupName(FName NewName);
347 FName GetGroupName() const;
348
349 UE_API virtual void SetProcessors(TArrayView<UMassProcessor*> InProcessorInstances, const TSharedPtr<FMassEntityManager>& EntityManager = nullptr);
350
354 UE_API virtual void BuildFlatProcessingGraph(TConstArrayView<FMassProcessorOrderInfo> SortedProcessors);
355
364
368 UE_API void AddGroupedProcessor(FName RequestedGroupName, UMassProcessor& SubProcessor);
369
370 UE_API virtual FGraphEventRef DispatchProcessorTasks(const TSharedPtr<FMassEntityManager>& EntityManager, FMassExecutionContext& ExecutionContext, const FGraphEventArray& Prerequisites = FGraphEventArray()) override;
371
372 bool IsEmpty() const;
373
374 UE_API virtual FString GetProcessorName() const override;
375
376 TConstArrayView<UMassProcessor*> GetChildProcessorsView() const;
377
378protected:
379 UE_API virtual void ConfigureQueries(const TSharedRef<FMassEntityManager>& EntityManager) override;
380 UE_API virtual void Execute(FMassEntityManager& EntityManager, FMassExecutionContext& Context) override;
381
388 UE_API UMassCompositeProcessor* FindOrAddGroupProcessor(FName RequestedGroupName, FString* OutRemainingGroupName = nullptr);
389
390protected:
391 UPROPERTY(VisibleAnywhere, Category=Mass)
392 FMassRuntimePipeline ChildPipeline;
393
395 UPROPERTY()
396 FName GroupName;
397
398#if WITH_MASSENTITY_DEBUG
399 bool bDebugLogNewProcessingGraph = false;
400#endif // WITH_MASSENTITY_DEBUG
401
403
405 {
408
409 bool IsDone() const
410 {
411 return Status == EProcessorCompletionStatus::Done || (CompletionEvent.IsValid() && CompletionEvent->IsComplete());
412 }
413
414 void Wait()
415 {
416 if (CompletionEvent.IsValid())
417 {
418 CompletionEvent->Wait();
419 }
420 }
421 };
423
424 //-----------------------------------------------------------------------------
425 // DEPRECATED
426 //-----------------------------------------------------------------------------
427public:
428
429 /*UE_DEPRECATED(5.6, "This flavor of Initialize is deprecated. Please use the one requiring a FMassEntityManager parameter")
430 virtual void Initialize(UObject& Owner) final;*/
431
432 UE_DEPRECATED(5.6, "This flavor of SetChildProcessors is deprecated. Please use one of the others.")
433 UE_API void SetChildProcessors(TArray<UMassProcessor*>&& InProcessors);
434};
435
436
437//-----------------------------------------------------------------------------
438// UMassProcessor inlines
439//-----------------------------------------------------------------------------
441{
442 return bInitialized;
443}
444
449
454
459
461{
462 return OwnedQueries.Num();
463}
464
469
474
479
484
489
494
496{
497 bIsDynamic = true;
498}
499
500inline bool UMassProcessor::IsDynamic() const
501{
502 return bIsDynamic != 0;
503}
504
506{
507 ActivationState = EActivationState::Active;
508}
509
511{
512 ActivationState = EActivationState::OneShot;
513}
514
516{
517 ActivationState = EActivationState::Inactive;
518}
519
520inline bool UMassProcessor::IsActive() const
521{
522 return ActivationState != EActivationState::Inactive;
523}
524
529
530#if WITH_EDITOR
531inline bool UMassProcessor::ShouldShowUpInSettings() const
532{
534}
535#endif // WITH_EDITOR
536
537//-----------------------------------------------------------------------------
538// UMassCompositeProcessor inlines
539//-----------------------------------------------------------------------------
541{
542 return GroupName;
543}
544
546{
547 return ChildPipeline.IsEmpty();
548}
549
554
555#undef UE_API
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
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
return true
Definition ExternalRpcRegistry.cpp:601
EMassProcessingPhase
Definition MassProcessingTypes.h:171
EProcessorExecutionFlags
Definition MassProcessingTypes.h:24
EActivationState
Definition MassProcessor.h:57
EProcessorCompletionStatus
Definition MassProcessor.h:32
EMassQueryBasedPruning
Definition MassProcessor.h:70
#define UE_API
Definition MassProcessor.h:16
T TNotNull
Definition NotNull.h:307
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
TArray< FGraphEventRef, TInlineAllocator< 4 > > FGraphEventArray
Definition TaskGraphInterfaces.h:258
uint8_t uint8
Definition binka_ue_file_header.h:8
void Wait(ENamedThreads::Type CurrentThreadIfKnown=ENamedThreads::AnyThread)
Definition TaskGraphInterfaces.h:577
bool IsComplete() const
Definition TaskGraphInterfaces.h:529
Definition NameTypes.h:617
Definition UObjectGlobals.h:1292
Definition UnrealType.h:3087
Definition OutputDevice.h:133
Definition MassEntity.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_FORCEINLINE_HINT bool IsValid() const
Definition RefCounting.h:594
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition MassProcessor.h:321
TArray< FProcessorCompletion > CompletionStatus
Definition MassProcessor.h:422
TArray< FDependencyNode > FlatProcessingGraph
Definition MassProcessor.h:402
FName GroupName
Definition MassProcessor.h:396
TConstArrayView< UMassProcessor * > GetChildProcessorsView() const
Definition MassProcessor.h:550
bool IsEmpty() const
Definition MassProcessor.h:545
FName GetGroupName() const
Definition MassProcessor.h:540
FMassRuntimePipeline ChildPipeline
Definition MassProcessor.h:392
Definition MassProcessor.h:78
uint8 ExecutionFlags
Definition MassProcessor.h:224
bool IsDynamic() const
Definition MassProcessor.h:500
EProcessorExecutionFlags GetExecutionFlags() const
Definition MassProcessor.h:445
void MarkAsDynamic()
Definition MassProcessor.h:495
void SetExecutionPriority(const int16 NewExecutionPriority)
Definition MassProcessor.h:490
uint8 bRequiresGameThreadExecution
Definition MassProcessor.h:235
FMassSubsystemRequirements ProcessorRequirements
Definition MassProcessor.h:293
int32 GetOwnedQueriesNum() const
Definition MassProcessor.h:460
FMassProcessorExecutionOrder ExecutionOrder
Definition MassProcessor.h:214
const FMassSubsystemRequirements & GetProcessorRequirements() const
Definition MassProcessor.h:480
uint8 bAutoRegisterWithProcessingPhases
Definition MassProcessor.h:228
int16 ExecutionPriority
Definition MassProcessor.h:280
int16 GetExecutionPriority() const
Definition MassProcessor.h:485
const FMassProcessorExecutionOrder & GetExecutionOrder() const
Definition MassProcessor.h:475
void MakeActive()
Definition MassProcessor.h:505
void MakeInactive()
Definition MassProcessor.h:515
bool ShouldAllowMultipleInstances() const
Definition MassProcessor.h:455
void MakeOneShot()
Definition MassProcessor.h:510
uint8 bAllowMultipleInstances
Definition MassProcessor.h:232
void DebugOutputDescription(FOutputDevice &Ar) const
Definition MassProcessor.h:465
bool ShouldAutoAddToGlobalList() const
Definition MassProcessor.h:525
bool ShouldExecute(const EProcessorExecutionFlags CurrentExecutionFlags) const
Definition MassProcessor.h:450
bool DoesRequireGameThreadExecution() const
Definition MassProcessor.h:470
bool IsActive() const
Definition MassProcessor.h:520
Definition Object.h:95
Definition MassArchetypeData.h:21
Definition AdvancedWidgetsModule.cpp:13
@ false
Definition radaudio_common.h:23
Definition MassDebugger.h:441
Definition MassEntityManager.h:96
Definition MassEntityQuery.h:51
Definition MassExecutionContext.h:29
Definition MassProcessorDependencySolver.h:68
Definition MassProcessingPhaseManager.h:29
Definition MassProcessor.h:41
Definition MassProcessingTypes.h:69
TConstArrayView< TObjectPtr< UMassProcessor > > GetProcessors() const
Definition MassProcessingTypes.h:217
bool IsEmpty() const
Definition MassProcessingTypes.h:207
Definition MassRequirements.h:72
Definition ObjectPtr.h:488
Definition MassProcessor.h:327
TArray< int32 > Dependencies
Definition MassProcessor.h:330
FName Name
Definition MassProcessor.h:328
Definition MassProcessor.h:405
bool IsDone() const
Definition MassProcessor.h:409
FGraphEventRef CompletionEvent
Definition MassProcessor.h:406
void Wait()
Definition MassProcessor.h:414