UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MassObserverManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "MassEntityHandle.h"
7#include "MassEntityTypes.h"
9#include "Misc/Fork.h"
10#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
11// the following is a new header, but it contains some types moved over from other places, and including
12// said header ties everything together. Engine code has been updated to not require it
14#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_6
15#include "MassObserverManager.generated.h"
16
17
21class UMassProcessor;
23namespace UE::Mass
24{
25 struct FProcessingContext;
26 namespace ObserverManager
27 {
28 struct FDeprecationHelper;
29 struct FBufferedNotificationExecutioner;
30 struct FBufferedCreationNotificationExecutioner;
31
32 struct FBufferedNotification;
33 struct FCreationNotificationHandle;
34 struct FObserverLock;
35 struct FCreationContext;
36 }
37}
38
42USTRUCT()
44{
46
47 // a helper accessor simplifying access while still keeping Container private
49 {
50 return Container;
51 }
52
53 void DebugAddUniqueProcessors(TArray<const UMassProcessor*>& OutProcessors) const;
54
55private:
56 UPROPERTY()
58};
59
65USTRUCT()
67{
69
70
71 using FObserverLock = UE::Mass::ObserverManager::FObserverLock;
74 using FCreationContext = UE::Mass::ObserverManager::FCreationContext;
75
77
78 FMassEntityManager& GetEntityManager();
79
80 const FMassFragmentBitSet* GetObservedFragmentBitSets() const { return ObservedFragments; }
82 {
83 return ObservedFragments[(uint8)Operation];
84 }
85
86 const FMassTagBitSet* GetObservedTagBitSets() const { return ObservedTags; }
88 {
89 return ObservedTags[(uint8)Operation];
90 }
91
93 {
94 return ObservedFragments[(uint8)Operation].HasAny(InQueriedBitSet);
95 }
96
98 {
99 return ObservedTags[(uint8)Operation].HasAny(InQueriedBitSet);
100 }
101
103 {
104 return HasObserversForBitSet(Composition.GetFragments(), Operation) || HasObserversForBitSet(Composition.GetTags(), Operation);
105 }
106
108 MASSENTITY_API bool OnPostEntitiesCreated(const FMassArchetypeEntityCollection& EntityCollection);
109
111 MASSENTITY_API bool OnPostEntityCreated(const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor& Composition);
112
114 MASSENTITY_API bool OnPreEntitiesDestroyed(const FMassArchetypeEntityCollection& EntityCollection);
115
117 MASSENTITY_API bool OnPreEntitiesDestroyed(UE::Mass::FProcessingContext& ProcessingContext, const FMassArchetypeEntityCollection& EntityCollection);
118
121
132
133protected:
159 MASSENTITY_API bool OnCompositionChanged(FCollectionRefOrHandle&& EntityCollection, const FMassArchetypeCompositionDescriptor& Composition
160 , const EMassObservedOperation Operation, UE::Mass::FProcessingContext* ProcessingContext = nullptr);
161
162public:
164 , const EMassObservedOperation Operation, UE::Mass::FProcessingContext* ProcessingContext = nullptr)
165 {
167 return OnCompositionChanged(FCollectionRefOrHandle(EntityCollection), Composition, Operation, ProcessingContext);
168 }
169
171 , const EMassObservedOperation Operation, UE::Mass::FProcessingContext* ProcessingContext = nullptr)
172 {
174 return OnCompositionChanged(FCollectionRefOrHandle(EntityHandle), Composition, Operation, ProcessingContext);
175 }
176
177 template<typename T, typename U = std::decay_t<T>> requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
178 bool OnCompositionChanged(const FMassArchetypeEntityCollection& EntityCollection, T&& BitSet
179 , const EMassObservedOperation Operation, UE::Mass::FProcessingContext* ProcessingContext = nullptr)
180 {
181 return OnCompositionChanged(EntityCollection, FMassArchetypeCompositionDescriptor(MoveTemp(BitSet)), Operation, ProcessingContext);
182 }
183
184 template<typename T, typename U = std::decay_t<T>> requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
185 bool OnCompositionChanged(const FMassEntityHandle Entity, T&& BitSet
186 , const EMassObservedOperation Operation, UE::Mass::FProcessingContext* ProcessingContext = nullptr)
187 {
188 return OnCompositionChanged(Entity, FMassArchetypeCompositionDescriptor(MoveTemp(BitSet)), Operation, ProcessingContext);
189 }
190
192 MASSENTITY_API void AddObserverInstance(const UScriptStruct& ElementType, EMassObservedOperation Operation, UMassProcessor& ObserverProcessor);
195 MASSENTITY_API void RemoveObserverInstance(const UScriptStruct& ElementType, EMassObservedOperation Operation, UMassProcessor& ObserverProcessor);
196
198
199 MASSENTITY_API void DebugGatherUniqueProcessors(TArray<const UMassProcessor*>& OutProcessors) const;
200
201protected:
204
206 MASSENTITY_API void DeInitialize();
207
210
213
216
217 MASSENTITY_API void OnPostFork(EForkProcessRole);
218
219 MASSENTITY_API void OnModulePackagesUnloaded(TConstArrayView<UPackage*> Packages);
220
221 //TSharedRef<FObserverLock> GetOrMakeObserverLock(TConstArrayView<FMassEntityHandle> ReservedEntities, FMassArchetypeEntityCollection&& EntityCollection);
222 MASSENTITY_API TSharedRef<FObserverLock> GetOrMakeObserverLock();
223 TSharedPtr<FObserverLock> GetObserverLock() const;
224 bool IsLocked() const { return ActiveObserverLock.IsValid(); }
225 MASSENTITY_API TSharedRef<FCreationContext> GetOrMakeCreationContext();
227 TSharedPtr<FCreationContext> GetCreationContext() const;
228
229 //-----------------------------------------------------------------------------
230 // Observers locking logic
231 //-----------------------------------------------------------------------------
233
243 MASSENTITY_API void ResumeExecution(FObserverLock& LockBeingReleased);
244
250 int32 LocksCount = 0;
252
255
256 UPROPERTY()
258
259 UPROPERTY()
261
262 FDelegateHandle ModulesUnloadedHandle;
263
268 FMassEntityManager& EntityManager;
269
270#if WITH_MASSENTITY_DEBUG
273#endif // WITH_MASSENTITY_DEBUG
274
275public:
276 UE_DEPRECATED(5.5, "This flavor of OnPostEntitiesCreated is deprecated. Please use the one taking a TConstArrayView<FMassArchetypeEntityCollection> parameter instead")
277 MASSENTITY_API bool OnPostEntitiesCreated(UE::Mass::FProcessingContext& InProcessingContext, const FMassArchetypeEntityCollection& EntityCollection);
278 UE_DEPRECATED(5.6, "*FragmentOrTag* functions have been deprecated. Use OnCompositionChanged instead.")
279 MASSENTITY_API void OnPostFragmentOrTagAdded(const UScriptStruct& FragmentOrTagType, const FMassArchetypeEntityCollection& EntityCollection);
280 UE_DEPRECATED(5.6, "*FragmentOrTag* functions have been deprecated. Use OnCompositionChanged instead.")
281 MASSENTITY_API void OnPreFragmentOrTagRemoved(const UScriptStruct& FragmentOrTagType, const FMassArchetypeEntityCollection& EntityCollection);
282 UE_DEPRECATED(5.6, "*FragmentOrTag* functions have been deprecated. Use OnCompositionChanged instead.")
283 MASSENTITY_API void OnFragmentOrTagOperation(const UScriptStruct& FragmentOrTagType, const FMassArchetypeEntityCollection& EntityCollection, const EMassObservedOperation Operation);
284 UE_DEPRECATED(5.6, "Use the other OnPostEntitiesCreated implementation.")
286 UE_DEPRECATED(5.6, "Use the other OnCompositionChanged implementation.")
287 MASSENTITY_API bool OnCompositionChanged(UE::Mass::FProcessingContext& InProcessingContext, const FMassArchetypeEntityCollection& EntityCollection
290 UE_DEPRECATED(5.6, "Use HandleElementsImpl instead.")
291 MASSENTITY_API void HandleSingleEntityImpl(const UScriptStruct& FragmentType, const FMassArchetypeEntityCollection& EntityCollection, FMassObserversMap& HandlersContainer);
292 UE_DEPRECATED(5.7, "Use the implementation with the FMassObserverExecutionContext parameter")
293 static void HandleElementsImpl(UE::Mass::FProcessingContext& ProcessingContext, TConstArrayView<FMassArchetypeEntityCollection> EntityCollections
295 UE_DEPRECATED(5.7, "Use the HandleElementsImpl implementation with the FMassObserverExecutionContext parameter")
296 static void HandleFragmentsImpl(UE::Mass::FProcessingContext& ProcessingContext, const FMassArchetypeEntityCollection& EntityCollection
298
299 UE_DEPRECATED(5.7, "Rvalue ref implementation is no longer available, it didn't do anything special. Please use the other OnCollectionsCreatedImpl implementation instead.")
300 MASSENTITY_API bool OnCollectionsCreatedImpl(UE::Mass::FProcessingContext& ProcessingContext, TArray<FMassArchetypeEntityCollection>&& EntityCollections);
301
302 friend UE::Mass::ObserverManager::FDeprecationHelper;
303};
304
305template<>
313
314//----------------------------------------------------------------------//
315// inlines
316//----------------------------------------------------------------------//
321
326
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
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 TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
EForkProcessRole
Definition Fork.h:22
@ Composition
Definition HairStrandsComposition.cpp:43
EMassObservedOperation
Definition MassEntityTypes.h:579
EMassObservedOperationFlags
Definition MassEntityTypes.h:597
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
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition IDelegateInstance.h:14
Definition UnrealType.h:3087
Definition ArrayView.h:139
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition SharedPointer.h:153
Definition SharedPointer.h:1295
Definition MassObserverProcessor.h:70
Definition MassProcessor.h:78
Definition Class.h:1720
Definition MassArchetypeData.h:21
Definition AdvancedWidgetsModule.cpp:13
Definition MassEntityTypes.h:74
Definition MassArchetypeTypes.h:93
Definition MassEntityHandle.h:13
Definition MassEntityManager.h:96
Definition MassObserverProcessor.h:22
Definition MassObserverManager.h:141
const FMassArchetypeEntityCollection & EntityCollection
Definition MassObserverManager.h:157
FCollectionRefOrHandle(const FMassArchetypeEntityCollection &InEntityCollection)
Definition MassObserverManager.h:151
FMassEntityHandle EntityHandle
Definition MassObserverManager.h:156
FCollectionRefOrHandle(FMassEntityHandle InEntityHandle)
Definition MassObserverManager.h:145
static FMassArchetypeEntityCollection DummyCollection
Definition MassObserverManager.h:144
Definition MassObserverManager.h:67
bool HasObserversForBitSet(const FMassFragmentBitSet &InQueriedBitSet, const EMassObservedOperation Operation) const
Definition MassObserverManager.h:92
const FMassTagBitSet & GetObservedTagsBitSet(const EMassObservedOperation Operation) const
Definition MassObserverManager.h:87
bool HasObserversForComposition(const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation) const
Definition MassObserverManager.h:102
bool HasObserversForBitSet(const FMassTagBitSet &InQueriedBitSet, const EMassObservedOperation Operation) const
Definition MassObserverManager.h:97
friend FObserverLock
Definition MassObserverManager.h:232
TSharedPtr< FCreationContext > GetCreationContext() const
Definition MassObserverManager.h:327
friend FMassEntityManager
Definition MassObserverManager.h:202
const FMassTagBitSet * GetObservedTagBitSets() const
Definition MassObserverManager.h:86
bool OnPostCompositionAdded(const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor &Composition)
Definition MassObserverManager.h:123
bool OnPreCompositionRemoved(const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor &Composition)
Definition MassObserverManager.h:128
FMassEntityManager & EntityManager
Definition MassObserverManager.h:268
FMassEntityManager & GetEntityManager()
Definition MassObserverManager.h:317
const FMassFragmentBitSet & GetObservedFragmentsBitSet(const EMassObservedOperation Operation) const
Definition MassObserverManager.h:81
bool OnCompositionChanged(const FMassArchetypeEntityCollection &EntityCollection, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
Definition MassObserverManager.h:163
bool OnCompositionChanged(const FMassEntityHandle Entity, T &&BitSet, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
Definition MassObserverManager.h:185
bool OnCompositionChanged(const FMassArchetypeEntityCollection &EntityCollection, T &&BitSet, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
Definition MassObserverManager.h:178
TWeakPtr< FCreationContext > ActiveCreationContext
Definition MassObserverManager.h:251
TSharedPtr< FObserverLock > GetObserverLock() const
Definition MassObserverManager.h:322
bool OnCompositionChanged(FMassEntityHandle EntityHandle, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
Definition MassObserverManager.h:170
bool IsLocked() const
Definition MassObserverManager.h:224
TWeakPtr< FObserverLock > ActiveObserverLock
Definition MassObserverManager.h:249
Definition MassObserverManager.h:44
Definition MassProcessingTypes.h:69
Definition ObjectPtr.h:488
Definition StructOpsTypeTraits.h:11
Definition StructOpsTypeTraits.h:46
Definition MassProcessingContext.h:14
Definition MassObserverNotificationTypes.h:39
Definition MassObserverNotificationTypes.h:404
Definition MassObserverNotificationTypes.h:183
Definition MassObserverNotificationTypes.h:221