UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneEntityFactoryTemplates.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
7#include "Containers/Map.h"
9
19
20#include <type_traits>
21
22
23namespace UE
24{
25namespace MovieScene
26{
27
28struct FInstanceRegistry;
30
31template<typename ParentComponentType, typename ChildComponentType>
58
59// Callback must be compatible with form void(const ParentComponentType, ChildComponentType&);
60template<typename ParentComponentType, typename ChildComponentType, typename InitializerType>
84
85template<typename ComponentType>
109
110/* Duplicates child components, but only if the parent entity passes the given component mask*/
111template<typename ComponentType>
126
143
145{
147
148 void Apply();
149
151
152 void PostTask();
153
154private:
155
156 struct FEntityMutationData
157 {
158 FMovieSceneEntityID EntityID;
159 FComponentTypeID ComponentTypeID;
160 bool bAddComponent;
161 };
162
165 TArray<FMovieSceneEntityID> EntitiesToDiscard;
166 TArray<FEntityMutationData> EntityMutations;
167
168protected:
169
171};
172
173
174template<typename ComponentType>
179
180template<typename ComponentType>
185
186template<typename ParentComponent, typename ChildComponent, typename InitializerCallback>
194
195template<typename T>
196FComponentTypeInfo FComponentRegistry::MakeComponentTypeInfoWithoutComponentOps(const TCHAR* const DebugName, const FNewComponentTypeParams& Params)
197{
198 static const uint32 ComponentTypeSize = sizeof(T);
199 static_assert(ComponentTypeSize < TNumericLimits<decltype(FComponentTypeInfo::Sizeof)>::Max(), "Type too large to be used as component data");
200
201 static const uint32 Alignment = alignof(T);
202 static_assert(Alignment < TNumericLimits<decltype(FComponentTypeInfo::Alignment)>::Max(), "Type alignment too large to be used as component data");
203
205
207 NewTypeInfo.Alignment = Alignment;
208 NewTypeInfo.bIsZeroConstructType = TIsZeroConstructType<T>::Value;
209 NewTypeInfo.bIsTriviallyDestructable = std::is_trivially_destructible_v<T>;
210 NewTypeInfo.bIsTriviallyCopyAssignable = TIsTriviallyCopyAssignable<T>::Value;
211 NewTypeInfo.bIsPreserved = EnumHasAnyFlags(Params.Flags, EComponentTypeFlags::Preserved);
212 NewTypeInfo.bIsCopiedToOutput = EnumHasAnyFlags(Params.Flags, EComponentTypeFlags::CopyToOutput);
213 NewTypeInfo.bIsMigratedToOutput = EnumHasAnyFlags(Params.Flags, EComponentTypeFlags::MigrateToOutput);
214 NewTypeInfo.bHasReferencedObjects = false;
215
216#if UE_MOVIESCENE_ENTITY_DEBUG
218 NewTypeInfo.DebugInfo->DebugName = DebugName;
219 NewTypeInfo.DebugInfo->DebugTypeName = GetGeneratedTypeName<T>();
220#endif
221
222 return NewTypeInfo;
223}
224
225template<typename T>
227{
228 FComponentTypeInfo NewTypeInfo = FComponentRegistry::MakeComponentTypeInfoWithoutComponentOps<T>(DebugName, Params);
229
230 NewTypeInfo.bHasReferencedObjects = Params.ReferenceCollectionCallback != nullptr || THasAddReferencedObjectForComponent<T>::Value;
231
232 if (Params.ReferenceCollectionCallback)
233 {
234 NewTypeInfo.MakeComplexComponentOps<T>(Params.ReferenceCollectionCallback);
235 }
236 else if (!NewTypeInfo.bIsZeroConstructType || !NewTypeInfo.bIsTriviallyDestructable || !NewTypeInfo.bIsTriviallyCopyAssignable || NewTypeInfo.bHasReferencedObjects)
237 {
238 NewTypeInfo.MakeComplexComponentOps<T>();
239 }
240
241 FComponentTypeID NewTypeID = NewComponentTypeInternal(MoveTemp(NewTypeInfo));
243
245 {
247 }
248
249 return TypedTypeID;
250}
251
252template<typename T>
254{
255 FComponentTypeInfo NewTypeInfo = FComponentRegistry::MakeComponentTypeInfoWithoutComponentOps<T>(DebugName, Params);
256
257 NewTypeInfo.bHasReferencedObjects = false;
258 if (!NewTypeInfo.bIsZeroConstructType || !NewTypeInfo.bIsTriviallyDestructable || !NewTypeInfo.bIsTriviallyCopyAssignable)
259 {
260 NewTypeInfo.MakeComplexComponentOpsNoAddReferencedObjects<T>();
261 }
262
263 FComponentTypeID NewTypeID = NewComponentTypeInternal(MoveTemp(NewTypeInfo));
265
267 {
269 }
270
271 return TypedTypeID;
272}
273
274} // using namespace MovieScene
275} // using namespace UE
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
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
constexpr bool EnumHasAnyFlags(Enum Flags, Enum Contains)
Definition EnumClassFlags.h:35
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
constexpr TArrayView Slice(SizeType Index, SizeType InNum) const
Definition ArrayView.h:426
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SortedMap.h:20
Definition MovieSceneEntitySystemLinker.h:113
Definition Object.h:95
Definition Linker.cpp:38
UObject *(*)(UObject *) FBoundObjectResolver
Definition BuiltInComponentTypes.h:361
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition IsTriviallyCopyAssignable.h:13
Definition UnrealTypeTraits.h:172
Definition NumericLimits.h:41
Definition MovieSceneEntityFactoryTemplates.h:145
void Apply()
Definition MovieSceneEntityFactory.cpp:157
void ForEachAllocation(FEntityAllocationProxy AllocationProxy, FReadEntityIDs EntityIDs, TRead< FInstanceHandle > Instances, TRead< FGuid > ObjectBindings, TReadOptional< FBoundObjectResolver > Resolvers)
Definition MovieSceneEntityFactory.cpp:169
UMovieSceneEntitySystemLinker * Linker
Definition MovieSceneEntityFactoryTemplates.h:170
void PostTask()
Definition MovieSceneEntityFactory.cpp:269
Definition MovieSceneEntityFactoryTypes.h:22
Definition MovieSceneEntityFactoryTypes.h:53
virtual bool IsRelevant(const FComponentMask &InParentType, const FComponentMask &InChildType) const
Definition MovieSceneEntityFactoryTypes.h:56
FComponentTypeID ChildComponent
Definition MovieSceneEntityFactoryTypes.h:79
FComponentTypeID ParentComponent
Definition MovieSceneEntityFactoryTypes.h:79
Definition MovieSceneEntityIDs.h:40
TComponentTypeID< T > NewComponentType(const TCHAR *const DebugName, const FNewComponentTypeParams &Params=FNewComponentTypeParams())
Definition MovieSceneEntityFactoryTemplates.h:226
FEntityFactories Factories
Definition MovieSceneComponentRegistry.h:48
TComponentTypeID< T > NewComponentTypeNoAddReferencedObjects(const TCHAR *const DebugName, const FNewComponentTypeParams &Params=FNewComponentTypeParams())
Definition MovieSceneEntityFactoryTemplates.h:253
Definition MovieSceneEntityIDs.h:174
TComponentTypeID< T > ReinterpretCast() const
Definition MovieSceneEntityIDs.h:501
Definition MovieSceneComponentTypeInfo.h:91
uint8 Sizeof
Definition MovieSceneComponentTypeInfo.h:111
uint8 Alignment
Definition MovieSceneComponentTypeInfo.h:113
Definition MovieSceneEntitySystemTypes.h:977
static FEntityAllocationWriteContext NewAllocation()
Definition MovieSceneEntitySystemTypes.h:428
Definition MovieSceneEntitySystemTypes.h:624
TComponentLock< TRead< T > > ReadComponents(TComponentTypeID< T > ComponentType) const
Definition MovieSceneEntitySystemTypes.h:877
TComponentLock< TWrite< T > > WriteComponents(TComponentTypeID< T > ComponentType, FEntityAllocationWriteContext InWriteContext) const
Definition MovieSceneEntitySystemTypes.h:900
void DefineChildComponent(FComponentTypeID InChildComponent)
Definition MovieSceneEntityFactory.h:44
void DuplicateChildComponent(TComponentTypeID< ComponentType > InComponent)
Definition MovieSceneEntityFactoryTemplates.h:175
void ConditionallyDuplicateChildComponent(TComponentTypeID< ComponentType > InComponent, FComponentMask InParentComponentMask)
Definition MovieSceneEntityFactoryTemplates.h:181
Definition MovieSceneEntitySystemTypes.h:1046
Definition MovieSceneEntityIDs.h:302
Definition MovieSceneComponentRegistry.h:24
Definition MovieSceneEntityFactoryTemplates.h:128
virtual void GenerateDerivedType(FComponentMask &OutNewEntityType) override
Definition MovieSceneEntityFactory.cpp:102
virtual void PostInitialize(UMovieSceneEntitySystemLinker *InLinker) override
Definition MovieSceneEntityFactory.cpp:143
virtual void InitializeAllocation(UMovieSceneEntitySystemLinker *Linker, const FComponentMask &ParentType, const FComponentMask &ChildType, const FEntityAllocation *ParentAllocation, TArrayView< const int32 > ParentAllocationOffsets, const FEntityRange &InChildEntityRange) override
Definition MovieSceneEntityFactory.cpp:107
TMap< TTuple< UObject *, FMovieSceneEntityID >, FMovieSceneEntityID > * StaleEntitiesToPreserve
Definition MovieSceneEntityFactoryTemplates.h:137
Definition MovieSceneEntityFactoryTemplates.h:33
TComponentTypeID< ChildComponentType > GetChildComponent() const
Definition MovieSceneEntityFactoryTemplates.h:43
TComponentLock< TWrite< ChildComponentType > > GetChildComponents(const FEntityAllocation *Allocation) const
Definition MovieSceneEntityFactoryTemplates.h:53
TComponentLock< TRead< ParentComponentType > > GetParentComponents(const FEntityAllocation *Allocation) const
Definition MovieSceneEntityFactoryTemplates.h:48
TComponentTypeID< ParentComponentType > GetParentComponent() const
Definition MovieSceneEntityFactoryTemplates.h:38
TChildEntityInitializer(TComponentTypeID< ParentComponentType > InParentComponent, TComponentTypeID< ChildComponentType > InChildComponent)
Definition MovieSceneEntityFactoryTemplates.h:34
Definition MovieSceneComponentPtr.h:109
Definition MovieSceneEntityIDs.h:283
Definition MovieSceneEntityFactoryTemplates.h:113
TConditionalDuplicateChildEntityInitializer(TComponentTypeID< ComponentType > InComponent, FComponentMask InParentComponentMask)
Definition MovieSceneEntityFactoryTemplates.h:114
FComponentMask ParentComponentMask
Definition MovieSceneEntityFactoryTemplates.h:124
virtual bool IsRelevant(const FComponentMask &InParentType, const FComponentMask &InChildType) const override
Definition MovieSceneEntityFactoryTemplates.h:119
Definition MovieSceneEntityFactoryTemplates.h:87
virtual void Run(const FEntityRange &ChildRange, const FEntityAllocation *ParentAllocation, TArrayView< const int32 > ParentAllocationOffsets)
Definition MovieSceneEntityFactoryTemplates.h:97
TDuplicateChildEntityInitializer(TComponentTypeID< ComponentType > InComponent)
Definition MovieSceneEntityFactoryTemplates.h:88
TComponentTypeID< ComponentType > GetComponent() const
Definition MovieSceneEntityFactoryTemplates.h:92
Definition MovieSceneComponentTypeInfo.h:67
Definition MovieSceneComponentPtr.h:208
Definition MovieSceneComponentPtr.h:195
Definition MovieSceneEntityFactoryTemplates.h:62
InitializerType Callback
Definition MovieSceneEntityFactoryTemplates.h:63
TStaticChildEntityInitializer(TComponentTypeID< ParentComponentType > InParentComponent, TComponentTypeID< ChildComponentType > InChildComponent, InitializerType InCallback)
Definition MovieSceneEntityFactoryTemplates.h:65
virtual void Run(const FEntityRange &ChildRange, const FEntityAllocation *ParentAllocation, TArrayView< const int32 > ParentAllocationOffsets)
Definition MovieSceneEntityFactoryTemplates.h:70