8#include "Containers/Array.h"
11#include "Containers/Map.h"
12#include "Containers/Set.h"
33#include <initializer_list>
46struct FChildEntityInitializer;
47struct FComponentRegistry;
48struct FEntityAllocationIteratorProxy;
49struct FFreeEntityOperation;
51struct IComponentTypeHandler;
52struct IMovieSceneEntityMutation;
53template <
typename T>
struct TReadOptional;
54template <
typename T>
struct TWriteOptional;
55struct IMovieSceneConditionalEntityMutation;
96 return ComponentRegistry;
233 template<
typename T,
typename ValueType>
397 InstancedChildInitializers.RemoveAt(
Index);
426 if (!ComponentTypeID)
431 FEntityLocation Location = EntityLocations[Entity.AsIndex()];
432 if (!Location.IsValid() || !EntityAllocationMasks[Location.GetAllocationIndex()].Contains(ComponentTypeID))
437 FEntityAllocation* Allocation = EntityAllocations[Location.GetAllocationIndex()];
438 const int32 ComponentOffset = Location.GetEntryIndexWithinAllocation();
446 if (
Header.ComponentType == ComponentTypeID)
486 if (!ComponentTypeID)
491 FEntityLocation Location = EntityLocations[Entity.AsIndex()];
492 if (!Location.IsValid() || !EntityAllocationMasks[Location.GetAllocationIndex()].Contains(ComponentTypeID))
497 FEntityAllocation* Allocation = EntityAllocations[Location.GetAllocationIndex()];
498 const int32 ComponentOffset = Location.GetEntryIndexWithinAllocation();
506 if (
Header.ComponentType == ComponentTypeID)
524 template<
typename T,
typename ValueType>
551 return DispatchThread;
626 template<
typename IteratorType>
642 template<
typename IteratorType>
766 checkf(IterationCount.
Load(ThreadingModel) == 0,
TEXT(
"Mutation of entities is not permissible while entities are being iterated"));
767 checkf(LockdownState == ELockdownState::Unlocked,
TEXT(
"Structural changes to the entity manager are not permitted while it is locked down"));
772 return LockdownState == ELockdownState::Locked;
777 LockdownState = ELockdownState::Locked;
782 LockdownState = ELockdownState::Unlocked;
790 return GlobalIterationFilter;
801 ensureMsgf(!
IsLockedDown() && IterationCount.
Load(ThreadingModel) == 0,
TEXT(
"Manipulating the global iteration filter while locked down or iterating is not recommended"));
802 return GlobalIterationFilter;
819 return SystemSerialNumber;
835 OnStructureChanged();
865 if (bHandleGenerationStale)
867 ++CurrentHandleGeneration;
869 bHandleGenerationStale =
false;
870 return CurrentHandleGeneration;
876 enum class EMemoryType
901 return EntityAllocations[AllocationIndex];
915 virtual SIZE_T GetAllocatedSize()
const override
926 struct FEntityLocation
929 : AllocationIndex(INVALID)
930 , EntryIndexWithinAllocation(0)
935 AllocationIndex = INVALID;
936 EntryIndexWithinAllocation = 0;
946 int32 GetAllocationIndex()
const
948 return AllocationIndex;
951 int32 GetEntryIndexWithinAllocation()
const
953 return EntryIndexWithinAllocation;
958 return AllocationIndex !=
INVALID;
961 void SetParentID(FMovieSceneEntityID
InParentID)
966 FMovieSceneEntityID GetParentID()
const
975 uint16 EntryIndexWithinAllocation;
977 FMovieSceneEntityID ParentID;
1000 FComponentMask AccumulatedMask;
1001 FEntityComponentFilter GlobalIterationFilter;
1003 FComponentRegistry* ComponentRegistry;
1006 FString ManagerDebugName;
1009 uint64 SystemSerialNumber;
1012 uint64 StructureMutationSystemSerialNumber;
1015#if UE_MOVIESCENE_ENTITY_DEBUG
1023 mutable uint32 CurrentHandleGeneration;
1024 mutable bool bHandleGenerationStale;
1025 mutable bool bAccumulatedMaskStale;
1028 mutable FEntitySystemMaybeAtomicInt32 IterationCount;
1034 enum class ELockdownState
1039 ELockdownState LockdownState;
1055 struct FAllocationMask
1058 bool bDestroyAllocation =
false;
1070 FCommitData Commit()
const;
1072 friend FEntityManager;
1080 FEntityManager* EntityManager;
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
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
UE_FORCEINLINE_HINT bool IsValid(const UObject *Test)
Definition Object.h:1875
void * GetAllocation(void *Target, uint32 Size, uint32 Offset, uint32 Alignment=16)
Definition OpenGLBuffer.cpp:57
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition Archive.h:1208
Definition UObjectGlobals.h:2492
Definition UObjectArray.h:984
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
Definition InlineValue.h:22
Definition UnrealString.h.inl:34
bool IsValidIndex(int32 Index) const
Definition SparseArray.h:481
Definition SparseArray.h:524
Definition MovieSceneEntityManager.h:81
MOVIESCENE_API void RemoveComponent(FMovieSceneEntityID EntityID, FComponentTypeID ComponentTypeID)
Definition MovieSceneEntityManager.cpp:1331
FComponentRegistry * GetComponents() const
Definition MovieSceneEntityManager.h:94
MOVIESCENE_API void InitializeChildAllocation(const FComponentMask &ParentType, const FComponentMask &ChildType, const FEntityAllocation *ParentAllocation, TArrayView< const int32 > ParentAllocationOffsets, const FEntityRange &InChildEntityRange)
Definition MovieSceneEntityManager.cpp:1954
MOVIESCENE_API EEntityThreadingModel GetThreadingModel() const
Definition MovieSceneEntityManager.cpp:609
uint64 GetSystemSerial() const
Definition MovieSceneEntityManager.h:817
bool ContainsAllComponents(std::initializer_list< FComponentTypeID > ComponentTypeIDs) const
Definition MovieSceneEntityManager.h:733
MOVIESCENE_API void CombineComponents(FMovieSceneEntityID DestinationEntityID, FMovieSceneEntityID SourceEntityID, const FComponentMask *OptionalMask=nullptr)
Definition MovieSceneEntityManager.cpp:1623
MOVIESCENE_API bool HasComponent(FMovieSceneEntityID EntityID, FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntityManager.cpp:1271
MOVIESCENE_API void UpdateThreadingModel()
Definition MovieSceneEntityManager.cpp:614
MOVIESCENE_API void ExitIteration() const
Definition MovieSceneEntityManager.cpp:1055
T ReadComponentChecked(FMovieSceneEntityID Entity, TComponentTypeID< T > ComponentTypeID) const
Definition MovieSceneEntityManager.h:465
MOVIESCENE_API FEntityHandle GetEntityHandle(FMovieSceneEntityID EntityID)
Definition MovieSceneEntityManager.cpp:566
MOVIESCENE_API int32 MutateAll(const FEntityComponentFilter &Filter, const IMovieSceneEntityMutation &Mutation, EMutuallyInclusiveComponentType MutualTypes=EMutuallyInclusiveComponentType::Mandatory)
Definition MovieSceneEntityManager.cpp:1675
uint32 GetHandleGeneration() const
Definition MovieSceneEntityManager.h:863
MOVIESCENE_API FEntityInfo GetEntity(FMovieSceneEntityID EntityID) const
Definition MovieSceneEntityManager.cpp:552
MOVIESCENE_API void CountMemory(FArchive &Ar, FMovieSceneEntityID EntityID)
void WriteComponentChecked(FMovieSceneEntityID Entity, TComponentTypeID< T > ComponentTypeID, ValueType &&Value)
Definition MovieSceneEntityManager.h:525
MOVIESCENE_API FEntityAllocationIteratorProxy Iterate(const FEntityComponentFilter *InFilter) const
Definition MovieSceneEntityManager.cpp:1027
static MOVIESCENE_API IComponentTypeHandler * FindComponentTypeHandler(const FGuid &ComponentGuid)
MOVIESCENE_API void TouchEntity(FMovieSceneEntityID EntityID)
Definition MovieSceneEntityManager.cpp:1905
MOVIESCENE_API void CopyComponents(FMovieSceneEntityID SrcEntityID, FMovieSceneEntityID DstEntityID, const FComponentMask &ComponentsToCopy)
Definition MovieSceneEntityManager.cpp:1526
MOVIESCENE_API void FreeEntity(FMovieSceneEntityID EntityID)
Definition MovieSceneEntityManager.cpp:636
MOVIESCENE_API int32 FreeEntities(const FEntityComponentFilter &Filter, TSet< FMovieSceneEntityID > *OutFreedEntities=nullptr)
Definition MovieSceneEntityManager.cpp:648
int32 DefineInstancedChildInitializer(TInlineValue< FChildEntityInitializer > &&InInitializer)
Definition MovieSceneEntityManager.h:381
bool HasStructureChangedSince(uint64 CachedSerial) const
Definition MovieSceneEntityManager.h:825
void ReleaseLockDown()
Definition MovieSceneEntityManager.h:780
ENamedThreads::Type GetDispatchThread() const
Definition MovieSceneEntityManager.h:549
bool ContainsComponent(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntityManager.h:696
MOVIESCENE_API FEntityDataLocation AllocateContiguousEntities(const FComponentMask &EntityComponentMask, int32 *InOutNum)
Definition MovieSceneEntityManager.cpp:516
MOVIESCENE_API void AddChild(FMovieSceneEntityID ParentID, FMovieSceneEntityID ChildID)
Definition MovieSceneEntityManager.cpp:1925
void SetComponentRegistry(FComponentRegistry *InComponents)
Definition MovieSceneEntityManager.h:99
void SetDispatchThread(ENamedThreads::Type InDispatchThread)
Definition MovieSceneEntityManager.h:544
FEntityManager(FEntityManager &&)=delete
TComponentLock< TWriteOptional< T > > WriteComponent(FMovieSceneEntityID Entity, TComponentTypeID< T > ComponentTypeID)
Definition MovieSceneEntityManager.h:482
void SetGatherThread(ENamedThreads::Type InGatherThread)
Definition MovieSceneEntityManager.h:534
TComponentLock< TReadOptional< T > > ReadComponent(FMovieSceneEntityID Entity, TComponentTypeID< T > ComponentTypeID) const
Definition MovieSceneEntityManager.h:422
MOVIESCENE_API int32 MutateConditional(const FEntityComponentFilter &Filter, const IMovieSceneConditionalEntityMutation &Mutation, EMutuallyInclusiveComponentType MutualTypes=EMutuallyInclusiveComponentType::Mandatory)
Definition MovieSceneEntityManager.cpp:1757
MOVIESCENE_API void AddComponents(FMovieSceneEntityID EntityID, const FComponentMask &EntityComponentMask)
Definition MovieSceneEntityManager.cpp:1198
void IncrementSystemSerial(uint64 IncAmount=1)
Definition MovieSceneEntityManager.h:808
const FEntityComponentFilter & GetGlobalIterationFilter() const
Definition MovieSceneEntityManager.h:788
void SetDebugName(FString &&InNewDebugName)
Definition MovieSceneEntityManager.h:843
bool IsAllocated(FMovieSceneEntityID EntityID) const
Definition MovieSceneEntityManager.h:192
MOVIESCENE_API FEntityManager()
Definition MovieSceneEntityManager.cpp:402
MOVIESCENE_API void ChangeEntityType(FMovieSceneEntityID InEntity, const FComponentMask &InNewMask)
Definition MovieSceneEntityManager.cpp:1283
MOVIESCENE_API void OverwriteEntityWithDuplicate(FMovieSceneEntityID &InOutEntity, FMovieSceneEntityID InEntityToDuplicate)
Definition MovieSceneEntityManager.cpp:1010
MOVIESCENE_API ~FEntityManager()
Definition MovieSceneEntityManager.cpp:427
MOVIESCENE_API FMovieSceneEntityID DuplicateEntity(FMovieSceneEntityID InOther)
Definition MovieSceneEntityManager.cpp:977
bool ContainsAnyComponent(std::initializer_list< FComponentTypeID > ComponentTypeIDs) const
Definition MovieSceneEntityManager.h:708
bool ContainsAnyComponent(const FComponentMask &ComponentTypeIDs) const
Definition MovieSceneEntityManager.h:720
MOVIESCENE_API bool Contains(const FEntityComponentFilter &InFilter) const
Definition MovieSceneEntityManager.cpp:1033
MOVIESCENE_API bool CopyComponent(FMovieSceneEntityID SrcEntityID, FMovieSceneEntityID DstEntityID, FComponentTypeID ComponentTypeID)
Definition MovieSceneEntityManager.cpp:1458
MOVIESCENE_API void GetImmediateChildren(FMovieSceneEntityID ParentID, TArray< FMovieSceneEntityID > &OutChildren) const
Definition MovieSceneEntityManager.cpp:1937
void operator=(FEntityManager &&)=delete
MOVIESCENE_API FMovieSceneEntityID AllocateEntity()
Definition MovieSceneEntityManager.cpp:477
void IterateChildren_ParentFirst(FMovieSceneEntityID ParentID, IteratorType &&Iterator) const
Definition MovieSceneEntityManager.h:643
bool IsLockedDown() const
Definition MovieSceneEntityManager.h:770
void operator=(const FEntityManager &)=delete
MOVIESCENE_API void AddReferencedObjects(FReferenceCollector &ReferenceCollector)
Definition MovieSceneEntityManager.cpp:2102
FEntityComponentFilter & ModifyGlobalIterationFilter()
Definition MovieSceneEntityManager.h:799
MOVIESCENE_API EEntityThreadingModel ComputeThreadingModel() const
Definition MovieSceneEntityManager.cpp:598
void AddComponent(FMovieSceneEntityID EntityID, TComponentTypeID< T > ComponentTypeID, ValueType &&InValue)
Definition MovieSceneEntityManager.h:234
void LockDown()
Definition MovieSceneEntityManager.h:775
MOVIESCENE_API void ReplaceEntityID(FMovieSceneEntityID &InOutEntity, FMovieSceneEntityID EntityToDiscard)
Definition MovieSceneEntityManager.cpp:927
void CheckCanChangeStructure() const
Definition MovieSceneEntityManager.h:764
MOVIESCENE_API void Destroy()
Definition MovieSceneEntityManager.cpp:457
MOVIESCENE_API void RemoveComponents(FMovieSceneEntityID EntityID, const FComponentMask &ComponentsToRemove)
Definition MovieSceneEntityManager.cpp:1378
MOVIESCENE_API void Compact()
Definition MovieSceneEntityManager.cpp:820
MOVIESCENE_API bool IsHandleValid(FEntityHandle EntityID) const
Definition MovieSceneEntityManager.cpp:587
MOVIESCENE_API const FComponentMask & GetAccumulatedMask() const
Definition MovieSceneEntityManager.cpp:619
MOVIESCENE_API void AddMutualComponents()
Definition MovieSceneEntityManager.cpp:1967
void DestroyInstancedChildInitializer(int32 Index)
Definition MovieSceneEntityManager.h:395
void MimicStructureChanged()
Definition MovieSceneEntityManager.h:833
MOVIESCENE_API const FComponentMask & GetEntityType(FMovieSceneEntityID InEntity) const
Definition MovieSceneEntityManager.cpp:1277
MOVIESCENE_API void GetChildren_ParentFirst(FMovieSceneEntityID ParentID, TArray< FMovieSceneEntityID > &OutChildren) const
Definition MovieSceneEntityManager.cpp:1945
MOVIESCENE_API void FilterComponents(FMovieSceneEntityID EntityID, const FComponentMask &EntitiesToKeep)
Definition MovieSceneEntityManager.cpp:1586
MOVIESCENE_API void AccumulateMask(const FEntityComponentFilter &InFilter, FComponentMask &OutMask) const
Definition MovieSceneEntityManager.cpp:1039
void IterateImmediateChildren(FMovieSceneEntityID ParentID, IteratorType &&Iterator) const
Definition MovieSceneEntityManager.h:627
ENamedThreads::Type GetGatherThread() const
Definition MovieSceneEntityManager.h:539
FEntityManager(const FEntityManager &)=delete
MOVIESCENE_API void EnterIteration() const
Definition MovieSceneEntityManager.cpp:1050
Definition UObjectBase.h:59
UE_REWRITE bool AnyOf(const RangeType &Range)
Definition AnyOf.h:20
bool AllOf(const RangeType &Range)
Definition AllOf.h:19
Type
Definition TaskGraphInterfaces.h:57
EComponentHeaderLockMode
Definition MovieSceneEntitySystemTypes.h:112
EMutuallyInclusiveComponentType
Definition MovieSceneEntitySystemTypes.h:100
FEntityManager * GEntityManagerForDebuggingVisualizers
Definition MovieSceneEntityManager.cpp:67
EEntityThreadingModel
Definition MovieSceneMaybeAtomic.h:17
EEntityRecursion
Definition MovieSceneEntityManager.h:60
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition MovieSceneEntityIDs.h:40
FComponentTypeID First() const
Definition MovieSceneEntityIDs.h:490
static FComponentMask BitwiseAND(const FComponentMask &A, const FComponentMask &B, EBitwiseOperatorFlags InFlags)
Definition MovieSceneEntityIDs.h:94
bool Contains(FComponentTypeID InComponentType) const
Definition MovieSceneEntityIDs.h:429
Definition MovieSceneComponentRegistry.h:46
Definition MovieSceneEntityIDs.h:174
static FComponentTypeID Invalid()
Definition MovieSceneEntityIDs.h:179
Definition EntityAllocationIterator.h:85
Definition EntityAllocationIterator.h:23
Definition MovieSceneEntitySystemTypes.h:977
Definition MovieSceneEntitySystemTypes.h:425
static FEntityAllocationWriteContext NewAllocation()
Definition MovieSceneEntitySystemTypes.h:428
Definition MovieSceneEntitySystemTypes.h:624
const FComponentHeader & GetComponentHeaderChecked(FComponentTypeID ComponentTypeID) const
Definition MovieSceneEntitySystemTypes.h:714
EComponentHeaderLockMode GetCurrentLockMode() const
Definition MovieSceneEntitySystemTypes.h:848
TArrayView< const FComponentHeader > GetComponentHeaders() const
Definition MovieSceneEntitySystemTypes.h:657
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneEntitySystemTypes.h:1053
FEntityAllocation * Allocation
Definition MovieSceneEntitySystemTypes.h:1054
int32 ComponentOffset
Definition MovieSceneEntitySystemTypes.h:1055
Definition MovieSceneEntityIDs.h:371
Definition MovieSceneEntitySystemTypes.h:1064
FEntityDataLocation Data
Definition MovieSceneEntitySystemTypes.h:1065
Definition MovieSceneEntityManager.cpp:75
Definition MovieSceneEntitySystemTypes.h:1046
int32 Load(EEntityThreadingModel ThreadingModel) const
Definition MovieSceneMaybeAtomic.h:35
Definition MovieSceneEntityManager.h:1044
void MarkEntityForFree(FMovieSceneEntityID EntityID)
Definition MovieSceneEntityManager.cpp:304
FFreeEntityOperation(FEntityManager *InEntityManager)
Definition MovieSceneEntityManager.h:1045
void MarkAllocationForFree(int32 AllocationIndex)
Definition MovieSceneEntityManager.cpp:299
Definition MovieSceneEntityIDs.h:302
int32 AsIndex() const
Definition MovieSceneEntityIDs.h:348
Definition MovieSceneComponentTypeHandler.h:21
Definition MovieSceneEntityMutations.h:35
Definition MovieSceneEntityMutations.h:19
Definition MovieSceneComponentPtr.h:109
Definition MovieSceneEntityIDs.h:283