UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FMassObserverManager Struct Reference

#include <MassObserverManager.h>

Classes

struct  FCollectionRefOrHandle
 

Public Types

using FObserverLock = UE::Mass::ObserverManager::FObserverLock
 
using FBufferedNotification = UE::Mass::ObserverManager::FBufferedNotification
 
using FCreationNotificationHandle = UE::Mass::ObserverManager::FCreationNotificationHandle
 
using FCreationContext = UE::Mass::ObserverManager::FCreationContext
 

Public Member Functions

MASSENTITY_API FMassObserverManager ()
 
FMassEntityManagerGetEntityManager ()
 
const FMassFragmentBitSetGetObservedFragmentBitSets () const
 
const FMassFragmentBitSetGetObservedFragmentsBitSet (const EMassObservedOperation Operation) const
 
const FMassTagBitSetGetObservedTagBitSets () const
 
const FMassTagBitSetGetObservedTagsBitSet (const EMassObservedOperation Operation) const
 
bool HasObserversForBitSet (const FMassFragmentBitSet &InQueriedBitSet, const EMassObservedOperation Operation) const
 
bool HasObserversForBitSet (const FMassTagBitSet &InQueriedBitSet, const EMassObservedOperation Operation) const
 
bool HasObserversForComposition (const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation) const
 
MASSENTITY_API bool OnPostEntitiesCreated (const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API bool OnPostEntityCreated (const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor &Composition)
 
MASSENTITY_API bool OnPreEntitiesDestroyed (const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API bool OnPreEntitiesDestroyed (UE::Mass::FProcessingContext &ProcessingContext, const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API bool OnPreEntityDestroyed (const FMassArchetypeCompositionDescriptor &ArchetypeComposition, const FMassEntityHandle Entity)
 
bool OnPostCompositionAdded (const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor &Composition)
 
bool OnPreCompositionRemoved (const FMassEntityHandle Entity, const FMassArchetypeCompositionDescriptor &Composition)
 
bool OnCompositionChanged (const FMassArchetypeEntityCollection &EntityCollection, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
 
bool OnCompositionChanged (FMassEntityHandle EntityHandle, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
 
template<typename T , typename U = std::decay_t<T>>
requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
bool OnCompositionChanged (const FMassArchetypeEntityCollection &EntityCollection, T &&BitSet, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
 
template<typename T , typename U = std::decay_t<T>>
requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
bool OnCompositionChanged (const FMassEntityHandle Entity, T &&BitSet, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
 
MASSENTITY_API void AddObserverInstance (TNotNull< const UScriptStruct * > ElementType, EMassObservedOperationFlags OperationFlags, TNotNull< UMassProcessor * > ObserverProcessor)
 
MASSENTITY_API void AddObserverInstance (const UScriptStruct &ElementType, EMassObservedOperation Operation, UMassProcessor &ObserverProcessor)
 
MASSENTITY_API void AddObserverInstance (TNotNull< UMassObserverProcessor * > ObserverProcessor)
 
MASSENTITY_API void RemoveObserverInstance (TNotNull< const UScriptStruct * > ElementType, EMassObservedOperationFlags OperationFlags, TNotNull< UMassProcessor * > ObserverProcessor)
 
MASSENTITY_API void RemoveObserverInstance (const UScriptStruct &ElementType, EMassObservedOperation Operation, UMassProcessor &ObserverProcessor)
 
MASSENTITY_API void ReleaseCreationHandle (UE::Mass::ObserverManager::FCreationNotificationHandle InCreationNotificationHandle)
 
MASSENTITY_API void DebugGatherUniqueProcessors (TArray< const UMassProcessor * > &OutProcessors) const
 
MASSENTITY_API bool OnPostEntitiesCreated (UE::Mass::FProcessingContext &InProcessingContext, const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API void OnPostFragmentOrTagAdded (const UScriptStruct &FragmentOrTagType, const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API void OnPreFragmentOrTagRemoved (const UScriptStruct &FragmentOrTagType, const FMassArchetypeEntityCollection &EntityCollection)
 
MASSENTITY_API void OnFragmentOrTagOperation (const UScriptStruct &FragmentOrTagType, const FMassArchetypeEntityCollection &EntityCollection, const EMassObservedOperation Operation)
 
MASSENTITY_API bool OnPostEntitiesCreated (UE::Mass::FProcessingContext &InProcessingContext, TConstArrayView< FMassArchetypeEntityCollection > EntityCollections)
 
MASSENTITY_API bool OnCompositionChanged (UE::Mass::FProcessingContext &InProcessingContext, const FMassArchetypeEntityCollection &EntityCollection, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation)
 

Protected Member Functions

MASSENTITY_API bool OnCompositionChanged (FCollectionRefOrHandle &&EntityCollection, const FMassArchetypeCompositionDescriptor &Composition, const EMassObservedOperation Operation, UE::Mass::FProcessingContext *ProcessingContext=nullptr)
 
MASSENTITY_API FMassObserverManager (FMassEntityManager &Owner)
 
MASSENTITY_API void Initialize ()
 
MASSENTITY_API void DeInitialize ()
 
MASSENTITY_API bool OnCollectionsCreatedImpl (UE::Mass::FProcessingContext &ProcessingContext, TConstArrayView< FMassArchetypeEntityCollection > EntityCollections)
 
MASSENTITY_API void OnPostFork (EForkProcessRole)
 
MASSENTITY_API void OnModulePackagesUnloaded (TConstArrayView< UPackage * > Packages)
 
MASSENTITY_API TSharedRef< FObserverLockGetOrMakeObserverLock ()
 
TSharedPtr< FObserverLockGetObserverLock () const
 
bool IsLocked () const
 
MASSENTITY_API TSharedRef< FCreationContextGetOrMakeCreationContext ()
 
MASSENTITY_API TSharedRef< FCreationContextGetOrMakeCreationContext (TConstArrayView< FMassEntityHandle > ReservedEntities, FMassArchetypeEntityCollection &&EntityCollection)
 
TSharedPtr< FCreationContextGetCreationContext () const
 
MASSENTITY_API void ResumeExecution (FObserverLock &LockBeingReleased)
 
MASSENTITY_API void HandleSingleEntityImpl (const UScriptStruct &FragmentType, const FMassArchetypeEntityCollection &EntityCollection, FMassObserversMap &HandlersContainer)
 
MASSENTITY_API bool OnCollectionsCreatedImpl (UE::Mass::FProcessingContext &ProcessingContext, TArray< FMassArchetypeEntityCollection > &&EntityCollections)
 

Static Protected Member Functions

static MASSENTITY_API void HandleElementsImpl (UE::Mass::FProcessingContext &ProcessingContext, TConstArrayView< FMassArchetypeEntityCollection > EntityCollections, FMassObserverExecutionContext &&ObserverContext, FMassObserversMap &HandlersContainer)
 
static void HandleElementsImpl (UE::Mass::FProcessingContext &ProcessingContext, TConstArrayView< FMassArchetypeEntityCollection > EntityCollections, TArrayView< const UScriptStruct * > ObservedTypes, FMassObserversMap &HandlersContainer)
 
static void HandleFragmentsImpl (UE::Mass::FProcessingContext &ProcessingContext, const FMassArchetypeEntityCollection &EntityCollection, TArrayView< const UScriptStruct * > ObservedTypes, FMassObserversMap &HandlersContainer)
 

Protected Attributes

friend FMassEntityManager
 
friend FObserverLock
 
TWeakPtr< FObserverLockActiveObserverLock
 
int32 LocksCount = 0
 
TWeakPtr< FCreationContextActiveCreationContext
 
FMassFragmentBitSet ObservedFragments [(uint8) EMassObservedOperation::MAX]
 
FMassTagBitSet ObservedTags [(uint8) EMassObservedOperation::MAX]
 
FMassObserversMap FragmentObservers [(uint8) EMassObservedOperation::MAX]
 
FMassObserversMap TagObservers [(uint8) EMassObservedOperation::MAX]
 
FDelegateHandle ModulesUnloadedHandle
 
FMassEntityManagerEntityManager
 

Detailed Description

A type that encapsulates logic related to notifying interested parties of entity composition changes. Upon creation it reads information from UMassObserverRegistry and instantiates processors interested in handling given fragment type addition or removal.

Member Typedef Documentation

◆ FBufferedNotification

◆ FCreationContext

◆ FCreationNotificationHandle

◆ FObserverLock

Constructor & Destructor Documentation

◆ FMassObserverManager() [1/2]

FMassObserverManager::FMassObserverManager ( )

◆ FMassObserverManager() [2/2]

FMassObserverManager::FMassObserverManager ( FMassEntityManager Owner)
explicitprotected

Member Function Documentation

◆ AddObserverInstance() [1/3]

void FMassObserverManager::AddObserverInstance ( const UScriptStruct ElementType,
EMassObservedOperation  Operation,
UMassProcessor ObserverProcessor 
)

◆ AddObserverInstance() [2/3]

void FMassObserverManager::AddObserverInstance ( TNotNull< const UScriptStruct * >  ElementType,
EMassObservedOperationFlags  OperationFlags,
TNotNull< UMassProcessor * >  ObserverProcessor 
)

◆ AddObserverInstance() [3/3]

void FMassObserverManager::AddObserverInstance ( TNotNull< UMassObserverProcessor * >  ObserverProcessor)

◆ DebugGatherUniqueProcessors()

void FMassObserverManager::DebugGatherUniqueProcessors ( TArray< const UMassProcessor * > &  OutProcessors) const

◆ DeInitialize()

void FMassObserverManager::DeInitialize ( )
protected

◆ GetCreationContext()

TSharedPtr< FMassObserverManager::FCreationContext > FMassObserverManager::GetCreationContext ( ) const
inlineprotected

◆ GetEntityManager()

FMassEntityManager & FMassObserverManager::GetEntityManager ( )
inline

◆ GetObservedFragmentBitSets()

const FMassFragmentBitSet * FMassObserverManager::GetObservedFragmentBitSets ( ) const
inline

◆ GetObservedFragmentsBitSet()

const FMassFragmentBitSet & FMassObserverManager::GetObservedFragmentsBitSet ( const EMassObservedOperation  Operation) const
inline

◆ GetObservedTagBitSets()

const FMassTagBitSet * FMassObserverManager::GetObservedTagBitSets ( ) const
inline

◆ GetObservedTagsBitSet()

const FMassTagBitSet & FMassObserverManager::GetObservedTagsBitSet ( const EMassObservedOperation  Operation) const
inline

◆ GetObserverLock()

TSharedPtr< FMassObserverManager::FObserverLock > FMassObserverManager::GetObserverLock ( ) const
inlineprotected

◆ GetOrMakeCreationContext() [1/2]

TSharedRef< FMassObserverManager::FCreationContext > FMassObserverManager::GetOrMakeCreationContext ( )
protected

◆ GetOrMakeCreationContext() [2/2]

TSharedRef< FMassObserverManager::FCreationContext > FMassObserverManager::GetOrMakeCreationContext ( TConstArrayView< FMassEntityHandle ReservedEntities,
FMassArchetypeEntityCollection &&  EntityCollection 
)
protected

◆ GetOrMakeObserverLock()

TSharedRef< FMassObserverManager::FObserverLock > FMassObserverManager::GetOrMakeObserverLock ( )
protected

◆ HandleElementsImpl() [1/2]

void FMassObserverManager::HandleElementsImpl ( UE::Mass::FProcessingContext ProcessingContext,
TConstArrayView< FMassArchetypeEntityCollection EntityCollections,
FMassObserverExecutionContext &&  ObserverContext,
FMassObserversMap HandlersContainer 
)
staticprotected

◆ HandleElementsImpl() [2/2]

void FMassObserverManager::HandleElementsImpl ( UE::Mass::FProcessingContext ProcessingContext,
TConstArrayView< FMassArchetypeEntityCollection EntityCollections,
TArrayView< const UScriptStruct * >  ObservedTypes,
FMassObserversMap HandlersContainer 
)
staticprotected

◆ HandleFragmentsImpl()

void FMassObserverManager::HandleFragmentsImpl ( UE::Mass::FProcessingContext ProcessingContext,
const FMassArchetypeEntityCollection EntityCollection,
TArrayView< const UScriptStruct * >  ObservedTypes,
FMassObserversMap HandlersContainer 
)
staticprotected

◆ HandleSingleEntityImpl()

void FMassObserverManager::HandleSingleEntityImpl ( const UScriptStruct FragmentType,
const FMassArchetypeEntityCollection EntityCollection,
FMassObserversMap HandlersContainer 
)
protected

◆ HasObserversForBitSet() [1/2]

bool FMassObserverManager::HasObserversForBitSet ( const FMassFragmentBitSet InQueriedBitSet,
const EMassObservedOperation  Operation 
) const
inline

◆ HasObserversForBitSet() [2/2]

bool FMassObserverManager::HasObserversForBitSet ( const FMassTagBitSet InQueriedBitSet,
const EMassObservedOperation  Operation 
) const
inline

◆ HasObserversForComposition()

bool FMassObserverManager::HasObserversForComposition ( const FMassArchetypeCompositionDescriptor Composition,
const EMassObservedOperation  Operation 
) const
inline

◆ Initialize()

void FMassObserverManager::Initialize ( )
protected

◆ IsLocked()

bool FMassObserverManager::IsLocked ( ) const
inlineprotected

◆ OnCollectionsCreatedImpl() [1/2]

bool FMassObserverManager::OnCollectionsCreatedImpl ( UE::Mass::FProcessingContext ProcessingContext,
TArray< FMassArchetypeEntityCollection > &&  EntityCollections 
)
protected

◆ OnCollectionsCreatedImpl() [2/2]

bool FMassObserverManager::OnCollectionsCreatedImpl ( UE::Mass::FProcessingContext ProcessingContext,
TConstArrayView< FMassArchetypeEntityCollection EntityCollections 
)
protected

Coalesces all the elements observed in all the collections and executes all the observers at once

◆ OnCompositionChanged() [1/6]

bool FMassObserverManager::OnCompositionChanged ( const FMassArchetypeEntityCollection EntityCollection,
const FMassArchetypeCompositionDescriptor Composition,
const EMassObservedOperation  Operation,
UE::Mass::FProcessingContext ProcessingContext = nullptr 
)
inline

◆ OnCompositionChanged() [2/6]

template<typename T , typename U = std::decay_t<T>>
requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
bool FMassObserverManager::OnCompositionChanged ( const FMassArchetypeEntityCollection EntityCollection,
T &&  BitSet,
const EMassObservedOperation  Operation,
UE::Mass::FProcessingContext ProcessingContext = nullptr 
)
inline

◆ OnCompositionChanged() [3/6]

template<typename T , typename U = std::decay_t<T>>
requires (std::is_same_v<U, FMassFragmentBitSet> || std::is_same_v<U, FMassTagBitSet>)
bool FMassObserverManager::OnCompositionChanged ( const FMassEntityHandle  Entity,
T &&  BitSet,
const EMassObservedOperation  Operation,
UE::Mass::FProcessingContext ProcessingContext = nullptr 
)
inline

◆ OnCompositionChanged() [4/6]

bool FMassObserverManager::OnCompositionChanged ( FCollectionRefOrHandle &&  EntityCollection,
const FMassArchetypeCompositionDescriptor Composition,
const EMassObservedOperation  Operation,
UE::Mass::FProcessingContext ProcessingContext = nullptr 
)
protected

◆ OnCompositionChanged() [5/6]

bool FMassObserverManager::OnCompositionChanged ( FMassEntityHandle  EntityHandle,
const FMassArchetypeCompositionDescriptor Composition,
const EMassObservedOperation  Operation,
UE::Mass::FProcessingContext ProcessingContext = nullptr 
)
inline

◆ OnCompositionChanged() [6/6]

bool FMassObserverManager::OnCompositionChanged ( UE::Mass::FProcessingContext InProcessingContext,
const FMassArchetypeEntityCollection EntityCollection,
const FMassArchetypeCompositionDescriptor Composition,
const EMassObservedOperation  Operation 
)

◆ OnFragmentOrTagOperation()

void FMassObserverManager::OnFragmentOrTagOperation ( const UScriptStruct FragmentOrTagType,
const FMassArchetypeEntityCollection EntityCollection,
const EMassObservedOperation  Operation 
)

◆ OnModulePackagesUnloaded()

void FMassObserverManager::OnModulePackagesUnloaded ( TConstArrayView< UPackage * >  Packages)
protected

◆ OnPostCompositionAdded()

bool FMassObserverManager::OnPostCompositionAdded ( const FMassEntityHandle  Entity,
const FMassArchetypeCompositionDescriptor Composition 
)
inline
Returns
whether there are observers watching affected elements

◆ OnPostEntitiesCreated() [1/3]

bool FMassObserverManager::OnPostEntitiesCreated ( const FMassArchetypeEntityCollection EntityCollection)
Returns
whether there are observers watching affected elements

◆ OnPostEntitiesCreated() [2/3]

bool FMassObserverManager::OnPostEntitiesCreated ( UE::Mass::FProcessingContext InProcessingContext,
const FMassArchetypeEntityCollection EntityCollection 
)

◆ OnPostEntitiesCreated() [3/3]

bool FMassObserverManager::OnPostEntitiesCreated ( UE::Mass::FProcessingContext InProcessingContext,
TConstArrayView< FMassArchetypeEntityCollection EntityCollections 
)

◆ OnPostEntityCreated()

bool FMassObserverManager::OnPostEntityCreated ( const FMassEntityHandle  Entity,
const FMassArchetypeCompositionDescriptor Composition 
)
Returns
whether there are observers watching affected elements

◆ OnPostFork()

void FMassObserverManager::OnPostFork ( EForkProcessRole  )
protected

◆ OnPostFragmentOrTagAdded()

void FMassObserverManager::OnPostFragmentOrTagAdded ( const UScriptStruct FragmentOrTagType,
const FMassArchetypeEntityCollection EntityCollection 
)

◆ OnPreCompositionRemoved()

bool FMassObserverManager::OnPreCompositionRemoved ( const FMassEntityHandle  Entity,
const FMassArchetypeCompositionDescriptor Composition 
)
inline
Returns
whether there are observers watching affected elements

◆ OnPreEntitiesDestroyed() [1/2]

bool FMassObserverManager::OnPreEntitiesDestroyed ( const FMassArchetypeEntityCollection EntityCollection)
Returns
whether there are observers watching affected elements

◆ OnPreEntitiesDestroyed() [2/2]

bool FMassObserverManager::OnPreEntitiesDestroyed ( UE::Mass::FProcessingContext ProcessingContext,
const FMassArchetypeEntityCollection EntityCollection 
)
Returns
whether there are observers watching affected elements

◆ OnPreEntityDestroyed()

bool FMassObserverManager::OnPreEntityDestroyed ( const FMassArchetypeCompositionDescriptor ArchetypeComposition,
const FMassEntityHandle  Entity 
)
Returns
whether there are observers watching affected elements

◆ OnPreFragmentOrTagRemoved()

void FMassObserverManager::OnPreFragmentOrTagRemoved ( const UScriptStruct FragmentOrTagType,
const FMassArchetypeEntityCollection EntityCollection 
)

◆ ReleaseCreationHandle()

void FMassObserverManager::ReleaseCreationHandle ( UE::Mass::ObserverManager::FCreationNotificationHandle  InCreationNotificationHandle)

◆ RemoveObserverInstance() [1/2]

void FMassObserverManager::RemoveObserverInstance ( const UScriptStruct ElementType,
EMassObservedOperation  Operation,
UMassProcessor ObserverProcessor 
)

◆ RemoveObserverInstance() [2/2]

void FMassObserverManager::RemoveObserverInstance ( TNotNull< const UScriptStruct * >  ElementType,
EMassObservedOperationFlags  OperationFlags,
TNotNull< UMassProcessor * >  ObserverProcessor 
)

◆ ResumeExecution()

void FMassObserverManager::ResumeExecution ( FObserverLock LockBeingReleased)
protected

Resumes observer triggering. All notifications collected in lock's BufferedNotifications will be processed at this point.

Note that due to all the notifications being sent our are being sent post-factum the "OnPreRemove" observers won't be able to access the data being removed, since the remove operation has already been performed. All the instances of removal-observers being triggered will be logged.

Intended to be called automatically by ~FObserverLock

Member Data Documentation

◆ ActiveCreationContext

TWeakPtr<FCreationContext> FMassObserverManager::ActiveCreationContext
protected

◆ ActiveObserverLock

TWeakPtr<FObserverLock> FMassObserverManager::ActiveObserverLock
protected

Never access directly, use GetOrMakeObserverLock or GetOrMakeCreationContext instead. Note: current lock is single-threaded. There's a path towards making it multithreaded, we'll work on it once we have a use-case

◆ EntityManager

FMassEntityManager& FMassObserverManager::EntityManager
protected

The owning EntityManager. No need for it to be a UPROPERTY since by design we don't support creation of FMassObserverManager outside a FMassEntityManager instance

◆ FMassEntityManager

friend FMassObserverManager::FMassEntityManager
protected

◆ FObserverLock

◆ FragmentObservers

FMassObserversMap FMassObserverManager::FragmentObservers[(uint8) EMassObservedOperation::MAX]
protected

◆ LocksCount

int32 FMassObserverManager::LocksCount = 0
protected

◆ ModulesUnloadedHandle

FDelegateHandle FMassObserverManager::ModulesUnloadedHandle
protected

◆ ObservedFragments

FMassFragmentBitSet FMassObserverManager::ObservedFragments[(uint8) EMassObservedOperation::MAX]
protected

◆ ObservedTags

FMassTagBitSet FMassObserverManager::ObservedTags[(uint8) EMassObservedOperation::MAX]
protected

◆ TagObservers

FMassObserversMap FMassObserverManager::TagObservers[(uint8) EMassObservedOperation::MAX]
protected

The documentation for this struct was generated from the following files: