UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassProcessingPhaseManager.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"
8#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
9#include "UObject/Object.h"
10#include "UObject/GCObject.h"
13#include "MassProcessingTypes.h"
14#include "MassProcessor.h"
16#include "MassProcessingPhaseManager.generated.h"
17
18
20class UMassProcessor;
25
26
27USTRUCT()
29{
31
32 UPROPERTY(EditAnywhere, Category = Mass, config)
34
35 UPROPERTY(EditAnywhere, Category = Mass, config, NoClear)
37
40
41#if WITH_EDITORONLY_DATA
42 // this processor is available only in editor since it's used to present the user the order in which processors
43 // will be executed when given processing phase gets triggered
45 TObjectPtr<UMassCompositeProcessor> PhaseProcessor = nullptr;
46
47 UPROPERTY(VisibleAnywhere, Category = Mass, Transient)
48 FText Description;
49#endif //WITH_EDITORONLY_DATA
50};
51
52
54{
55 DECLARE_MULTICAST_DELEGATE_OneParam(FOnPhaseEvent, const float /*DeltaSeconds*/);
56
60
61protected:
62 // FTickFunction interface
63 MASSENTITY_API virtual void ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef& MyCompletionGraphEvent) override;
64 MASSENTITY_API virtual FString DiagnosticMessage() override;
65 MASSENTITY_API virtual FName DiagnosticContext(bool bDetailed) override;
66 // End of FTickFunction interface
67
68 MASSENTITY_API void OnParallelExecutionDone(const float DeltaTime);
69
70 bool IsConfiguredForParallelMode() const { return bRunInParallelMode; }
71 void ConfigureForParallelMode() { bRunInParallelMode = true; }
72 void ConfigureForSingleThreadMode() { bRunInParallelMode = false; }
73
74 bool ShouldTick(const ELevelTick TickType) const { return SupportedTickTypes & (1 << TickType); }
75
76public:
78 void AddSupportedTickType(const ELevelTick TickType) { SupportedTickTypes |= (1 << TickType); }
79 void RemoveSupportedTickType(const ELevelTick TickType) { SupportedTickTypes &= ~(1 << TickType); }
80
81#if WITH_MASSENTITY_DEBUG
83#endif // WITH_MASSENTITY_DEBUG
84
85protected:
87
88 // composite processor representing work to be performed. GC-referenced via AddReferencedObjects
90
94
95private:
96 FMassProcessingPhaseManager* PhaseManager = nullptr;
97 std::atomic<bool> bIsDuringMassProcessing = false;
98 bool bRunInParallelMode = true;
99 uint8 SupportedTickTypes = 0;
100};
101
102
104{
109
116
122 bool bIsGameRuntime = true;
123
124 //-----------------------------------------------------------------------------
125 // DEPRECATED
126 //-----------------------------------------------------------------------------
127 UE_DEPRECATED(5.6, "This flavor of Configure is deprecated. Please use the one using a TSharedRef<FMassEntityManager> parameter instead")
131};
132
142{
143public:
147
148 const TSharedPtr<FMassEntityManager>& GetEntityManager() const { return EntityManager; }
149 FMassEntityManager& GetEntityManagerRef() { check(EntityManager); return *EntityManager.Get(); }
150
152 FMassProcessingPhase::FOnPhaseEvent& GetOnPhaseStart(const EMassProcessingPhase Phase) { return ProcessingPhases[uint8(Phase)].OnPhaseStart; } //-V557
154 FMassProcessingPhase::FOnPhaseEvent& GetOnPhaseEnd(const EMassProcessingPhase Phase) { return ProcessingPhases[uint8(Phase)].OnPhaseEnd; }
155
160 MASSENTITY_API void Initialize(UObject& InOwner, TConstArrayView<FMassProcessingPhaseConfig> ProcessingPhasesConfig, const FString& DependencyGraphFileName = TEXT(""));
161
163 MASSENTITY_API void Deinitialize();
164
165 MASSENTITY_API const FGraphEventRef& TriggerPhase(const EMassProcessingPhase Phase, const float DeltaTime, const FGraphEventRef& MyCompletionGraphEvent
167
171 MASSENTITY_API void Start(UWorld& World);
172
177 MASSENTITY_API void Stop();
178 bool IsRunning() const { return EntityManager.IsValid(); }
179
188 bool IsPaused() const;
189
194 MASSENTITY_API void Pause();
195
199 MASSENTITY_API void Resume();
200
201 MASSENTITY_API FString GetName() const;
202
204 MASSENTITY_API void RegisterDynamicProcessor(UMassProcessor& Processor);
206 MASSENTITY_API void UnregisterDynamicProcessor(UMassProcessor& Processor);
207
209 {
211 bool bNewArchetypes = true;
212 bool bProcessorsNeedRebuild = true;
213 bool bInitialized = false;
214
215 void Reset();
216 };
217
218#if WITH_MASSENTITY_DEBUG
221#endif // WITH_MASSENTITY_DEBUG
222
223protected:
224 // FGCObject interface
225 MASSENTITY_API virtual void AddReferencedObjects(FReferenceCollector& Collector) override;
226 virtual FString GetReferencerName() const override
227 {
228 return TEXT("FMassProcessingPhaseManager");
229 }
230 // End of FGCObject interface
231
232 MASSENTITY_API void RegisterDynamicProcessorInternal(TNotNull<UMassProcessor*> Processor);
233 MASSENTITY_API void UnregisterDynamicProcessorInternal(TNotNull<UMassProcessor*> Processor);
234 MASSENTITY_API void HandlePendingDynamicProcessorOperations(const int32 PhaseIndex);
235
237 MASSENTITY_API virtual void EnableTickFunctions(const UWorld& World);
238
241
243
248 MASSENTITY_API void OnPhaseStart(FMassProcessingPhase& Phase);
249
254 MASSENTITY_API void OnPhaseEnd(FMassProcessingPhase& Phase);
255
256 MASSENTITY_API void OnNewArchetype(const FMassArchetypeHandle& NewArchetype);
257
258protected:
265 {
266 Add,
267 Remove
268 };
272
274
276
278
280
282 bool bIsAllowedToTick = false;
283
284 bool bIsPaused = false;
285 bool bIsPauseTogglePending = false;
286
287#if WITH_MASSENTITY_DEBUG
290
293#endif // WITH_MASSENTITY_DEBUG
294
295public:
296 UE_DEPRECATED(5.6, "This flavor of Start is deprecated. Please use the one using a TSharedRef<FMassEntityManager> parameter instead")
298};
299
300//----------------------------------------------------------------------//
301// inlines
302//----------------------------------------------------------------------//
303#if WITH_MASSENTITY_DEBUG
304inline const UMassCompositeProcessor* FMassProcessingPhase::DebugGetPhaseProcessor() const
305{
306 return PhaseProcessor;
307}
308
309inline TConstArrayView<FMassProcessingPhase> FMassProcessingPhaseManager::DebugGetProcessingPhases() const
310{
311 return MakeArrayView(ProcessingPhases, static_cast<uint8>(EMassProcessingPhase::MAX));
312}
313
314inline TConstArrayView<FMassProcessingPhaseManager::FPhaseGraphBuildState> FMassProcessingPhaseManager::DebugGetProcessingGraphBuildStates() const
315{
316 return MakeArrayView(ProcessingGraphBuildStates, static_cast<uint8>(EMassProcessingPhase::MAX));
317}
318#endif // WITH_MASSENTITY_DEBUG
319
321{
322 return bIsPaused;
323}
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define check(expr)
Definition AssertionMacros.h:314
#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
ETickingGroup
Definition EngineBaseTypes.h:84
ELevelTick
Definition EngineBaseTypes.h:70
EMassProcessingPhase
Definition MassProcessingTypes.h:171
EProcessorExecutionFlags
Definition MassProcessingTypes.h:24
T TNotNull
Definition NotNull.h:307
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
UClass * StaticClass()
Definition ReflectedTypeAccessors.h:13
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition IDelegateInstance.h:14
Definition GCObject.h:128
Definition NameTypes.h:617
Definition UObjectGlobals.h:2492
Definition Text.h:385
Definition ArrayView.h:139
Definition Array.h:670
Definition MpscQueue.h:18
Definition SharedPointer.h:1640
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SubclassOf.h:30
Definition MassProcessor.h:321
Definition MassProcessor.h:78
Definition Object.h:95
Definition World.h:918
Type
Definition TaskGraphInterfaces.h:57
@ GameThread
Definition TaskGraphInterfaces.h:61
Definition MassArchetypeTypes.h:39
Definition MassCommandBuffer.h:99
Definition MassEntityManager.h:96
Definition MassProcessingPhaseManager.h:104
MASSENTITY_API void Configure(TArrayView< UMassProcessor *const > DynamicProcessors, TArray< TWeakObjectPtr< UMassProcessor > > &InOutRemovedDynamicProcessors, EProcessorExecutionFlags InWorldExecutionFlags, const TSharedRef< FMassEntityManager > &EntityManager, FMassProcessorDependencySolver::FResult &InOutOptionalResult)
Definition MassProcessingPhaseManager.cpp:159
const FMassProcessingPhaseConfig & PhaseConfig
Definition MassProcessingPhaseManager.h:118
EMassProcessingPhase Phase
Definition MassProcessingPhaseManager.h:120
bool bIsGameRuntime
Definition MassProcessingPhaseManager.h:122
UObject & ProcessorOuter
Definition MassProcessingPhaseManager.h:119
UMassCompositeProcessor & PhaseProcessor
Definition MassProcessingPhaseManager.h:117
FMassPhaseProcessorConfigurationHelper(UMassCompositeProcessor &InOutPhaseProcessor, const FMassProcessingPhaseConfig &InPhaseConfig, UObject &InProcessorOuter, EMassProcessingPhase InPhase)
Definition MassProcessingPhaseManager.h:105
bool bInitializeCreatedProcessors
Definition MassProcessingPhaseManager.h:121
Definition MassProcessingPhaseManager.h:29
FName PhaseName
Definition MassProcessingPhaseManager.h:33
TArray< TObjectPtr< UMassProcessor > > ProcessorCDOs
Definition MassProcessingPhaseManager.h:39
TSubclassOf< UMassCompositeProcessor > PhaseGroupClass
Definition MassProcessingPhaseManager.h:36
Definition MassProcessingPhaseManager.h:209
FMassProcessorDependencySolver::FResult LastResult
Definition MassProcessingPhaseManager.h:210
Definition MassProcessingPhaseManager.h:142
FMassEntityManager & GetEntityManagerRef()
Definition MassProcessingPhaseManager.h:149
const TSharedPtr< FMassEntityManager > & GetEntityManager() const
Definition MassProcessingPhaseManager.h:148
FMassProcessingPhaseManager(const FMassProcessingPhaseManager &Other)=delete
bool IsPaused() const
Definition MassProcessingPhaseManager.h:320
TArray< FMassProcessingPhaseConfig > ProcessingPhasesConfig
Definition MassProcessingPhaseManager.h:261
MASSENTITY_API void CreatePhases()
TSharedPtr< FMassEntityManager > EntityManager
Definition MassProcessingPhaseManager.h:273
TArray< TWeakObjectPtr< UMassProcessor > > RemovedDynamicProcessors
Definition MassProcessingPhaseManager.h:263
FMassProcessingPhaseManager & operator=(const FMassProcessingPhaseManager &Other)=delete
EDynamicProcessorOperationType
Definition MassProcessingPhaseManager.h:265
bool IsRunning() const
Definition MassProcessingPhaseManager.h:178
virtual FString GetReferencerName() const override
Definition MassProcessingPhaseManager.h:226
FDelegateHandle OnNewArchetypeHandle
Definition MassProcessingPhaseManager.h:279
FMassProcessingPhase::FOnPhaseEvent & GetOnPhaseStart(const EMassProcessingPhase Phase)
Definition MassProcessingPhaseManager.h:152
friend FMassProcessingPhase
Definition MassProcessingPhaseManager.h:242
FMassProcessingPhase::FOnPhaseEvent & GetOnPhaseEnd(const EMassProcessingPhase Phase)
Definition MassProcessingPhaseManager.h:154
TWeakObjectPtr< UObject > Owner
Definition MassProcessingPhaseManager.h:277
TArray< TObjectPtr< UMassProcessor > > DynamicProcessors
Definition MassProcessingPhaseManager.h:262
Definition MassProcessingPhaseManager.h:54
TObjectPtr< UMassCompositeProcessor > PhaseProcessor
Definition MassProcessingPhaseManager.h:89
EMassProcessingPhase Phase
Definition MassProcessingPhaseManager.h:91
MASSENTITY_API FMassProcessingPhase()
Definition MassProcessingPhaseManager.cpp:51
virtual MASSENTITY_API FName DiagnosticContext(bool bDetailed) override
Definition MassProcessingPhaseManager.cpp:143
virtual MASSENTITY_API void ExecuteTick(float DeltaTime, ELevelTick TickType, ENamedThreads::Type CurrentThread, const FGraphEventRef &MyCompletionGraphEvent) override
Definition MassProcessingPhaseManager.cpp:58
void RemoveSupportedTickType(const ELevelTick TickType)
Definition MassProcessingPhaseManager.h:79
virtual MASSENTITY_API FString DiagnosticMessage() override
Definition MassProcessingPhaseManager.cpp:138
FOnPhaseEvent OnPhaseStart
Definition MassProcessingPhaseManager.h:92
void AddSupportedTickType(const ELevelTick TickType)
Definition MassProcessingPhaseManager.h:78
friend FMassProcessingPhaseManager
Definition MassProcessingPhaseManager.h:86
FOnPhaseEvent OnPhaseEnd
Definition MassProcessingPhaseManager.h:93
FMassProcessingPhase & operator=(const FMassProcessingPhase &Other)=delete
void ConfigureForSingleThreadMode()
Definition MassProcessingPhaseManager.h:72
void ConfigureForParallelMode()
Definition MassProcessingPhaseManager.h:71
bool ShouldTick(const ELevelTick TickType) const
Definition MassProcessingPhaseManager.h:74
bool IsConfiguredForParallelMode() const
Definition MassProcessingPhaseManager.h:70
FMassProcessingPhase(const FMassProcessingPhase &Other)=delete
DECLARE_MULTICAST_DELEGATE_OneParam(FOnPhaseEvent, const float)
MASSENTITY_API void OnParallelExecutionDone(const float DeltaTime)
Definition MassProcessingPhaseManager.cpp:127
Definition MassProcessorDependencySolver.h:179
Definition MassProcessorDependencySolver.h:87
Definition EngineBaseTypes.h:173
Definition ObjectPtr.h:488
Definition Tuple.h:652
Definition WeakObjectPtrTemplates.h:25