UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieScenePropertyComponentHandler.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
16
19
21
22namespace UE
23{
24namespace MovieScene
25{
26
27
28template<typename PropertyTraits, typename MetaDataType, typename MetaDataIndices, typename CompositeIndices, typename ...CompositeTypes>
30
31template<typename PropertyTraits, typename ...CompositeTypes>
33 : TPropertyComponentHandlerImpl<PropertyTraits, typename PropertyTraits::MetaDataType, TMakeIntegerSequence<int, PropertyTraits::MetaDataType::Num>, TMakeIntegerSequence<int, sizeof...(CompositeTypes)>, CompositeTypes...>
34{
35};
36
37template<typename, typename, typename>
39
40template<typename PropertyTraits, typename ...MetaDataTypes, int ...MetaDataIndices>
42{
43 using StorageType = typename PropertyTraits::StorageType;
44
46
48
53
54 // Transient properties reset on each usage.
56 const PropertyTraits* Traits;
58
60
62 const PropertyTraits* InTraits,
66 )
67 : BuiltInComponents(FBuiltInComponentTypes::Get())
68 , CustomPropertyRegistration(InCustomPropertyRegistration)
69 , InitialValueType(InInitialValueType)
70 , MetaDataComponents(InMetaDataComponents[MetaDataIndices].ReinterpretCast<MetaDataTypes>()...)
71 , WriteContext(FEntityAllocationWriteContext::NewAllocation())
72 {
73 Traits = InTraits;
74 Interrogation = nullptr;
75 CacheStorage = nullptr;
76 }
77
78 virtual void Initialize(UMovieSceneEntitySystemLinker* Linker, FInitialValueCache* InitialValueCache) override
79 {
81 WriteContext = FEntityAllocationWriteContext(Linker->EntityManager);
82
83 if (CustomPropertyRegistration)
84 {
85 CustomAccessors = CustomPropertyRegistration->GetAccessors();
86 }
87
88 if (InitialValueCache)
89 {
90 CacheStorage = InitialValueCache->GetStorage<PropertyTraits>(InitialValueType);
91 }
92 }
93
94 virtual void PopulateFilter(FEntityComponentFilter& OutFilter) const override
95 {
96 // These initializers must have bound objects or an interrogation key
97 OutFilter.Any({ BuiltInComponents->BoundObject, BuiltInComponents->Interrogation.OutputKey });
98 }
99
100 virtual void Process(const FEntityAllocation* Allocation, const FComponentMask& AllocationType) override
101 {
102 if (Interrogation && AllocationType.Contains(BuiltInComponents->Interrogation.OutputKey))
103 {
104 VisitInterrogationAllocation(Allocation);
105 }
106 else if (CacheStorage)
107 {
108 VisitAllocationCached(Allocation);
109 }
110 else
111 {
112 VisitAllocation(Allocation);
113 }
114 }
115
116 virtual void Finalize() override
117 {
118 ValuesByChannel.Empty();
119 Interrogation = nullptr;
120 CacheStorage = nullptr;
121 }
122
123 void VisitAllocation(const FEntityAllocation* Allocation)
124 {
125 const int32 Num = Allocation->Num();
126
127 TComponentWriter<StorageType> InitialValues = Allocation->WriteComponents(InitialValueType, WriteContext);
128 TComponentReader<UObject*> BoundObjects = Allocation->ReadComponents(BuiltInComponents->BoundObject);
129
131 Allocation->ReadComponents(MetaDataComponents.template Get<MetaDataIndices>())...
132 );
133
135 {
137 for (int32 Index = 0; Index < Num; ++Index)
138 {
139 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., CustomAccessors[RawIndices[Index].Value], InitialValues[Index]);
140 }
141 }
142
143 else if (TOptionalComponentReader<uint16> FastOffsets = Allocation->TryReadComponents(BuiltInComponents->FastPropertyOffset))
144 {
145 const uint16* RawOffsets = FastOffsets.AsPtr();
146 for (int32 Index = 0; Index < Num; ++Index)
147 {
148 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., RawOffsets[Index], InitialValues[Index]);
149 }
150 }
151
153 {
155 for (int32 Index = 0; Index < Num; ++Index)
156 {
157 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., RawProperties[Index].Get(), InitialValues[Index]);
158 }
159 }
160 }
161
163 {
164 const int32 Num = Allocation->Num();
165
167 TComponentWriter<StorageType> InitialValues = Allocation->WriteComponents(InitialValueType, WriteContext);
168 TComponentReader<UObject*> BoundObjects = Allocation->ReadComponents(BuiltInComponents->BoundObject);
169
171 Allocation->ReadComponents(MetaDataComponents.template Get<MetaDataIndices>())...
172 );
173
175 {
177 for (int32 Index = 0; Index < Num; ++Index)
178 {
180 if (ExistingIndex)
181 {
182 InitialValues[Index] = CacheStorage->GetCachedValue(ExistingIndex.GetValue());
183 }
184 else
185 {
187 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., CustomAccessors[RawIndices[Index].Value], Value);
188
189 InitialValues[Index] = Value;
190 InitialValueIndices[Index] = CacheStorage->AddInitialValue(BoundObjects[Index], Value, RawIndices[Index]);
191 }
192 }
193 }
194
195 else if (TOptionalComponentReader<uint16> FastOffsets = Allocation->TryReadComponents(BuiltInComponents->FastPropertyOffset))
196 {
197 const uint16* RawOffsets = FastOffsets.AsPtr();
198 for (int32 Index = 0; Index < Num; ++Index)
199 {
201 if (ExistingIndex)
202 {
203 InitialValues[Index] = CacheStorage->GetCachedValue(ExistingIndex.GetValue());
204 }
205 else
206 {
208 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., RawOffsets[Index], Value);
209
210 InitialValues[Index] = Value;
211 InitialValueIndices[Index] = CacheStorage->AddInitialValue(BoundObjects[Index], Value, RawOffsets[Index]);
212 }
213 }
214 }
215
217 {
219 for (int32 Index = 0; Index < Num; ++Index)
220 {
221 TOptional<FInitialValueIndex> ExistingIndex = CacheStorage->FindPropertyIndex(BoundObjects[Index], *RawProperties[Index]->GetPropertyPath());
222 if (ExistingIndex)
223 {
224 InitialValues[Index] = CacheStorage->GetCachedValue(ExistingIndex.GetValue());
225 }
226 else
227 {
229 Traits->GetObjectPropertyValue(BoundObjects[Index], MetaData.template Get<MetaDataIndices>()[Index]..., RawProperties[Index].Get(), Value);
230
231 InitialValues[Index] = Value;
232 InitialValueIndices[Index] = CacheStorage->AddInitialValue(BoundObjects[Index], Value, RawProperties[Index].Get());
233 }
234 }
235 }
236 }
237
239 {
240 const int32 Num = Allocation->Num();
241
242 TComponentWriter<StorageType> InitialValues = Allocation->WriteComponents(InitialValueType, WriteContext);
244
246 Allocation->ReadComponents(MetaDataComponents.template Get<MetaDataIndices>())...
247 );
248
249 const FSparseInterrogationChannelInfo& SparseChannelInfo = Interrogation->GetSparseChannelInfo();
250
251 for (int32 Index = 0; Index < Num; ++Index)
252 {
253 FInterrogationChannel Channel = OutputKeys[Index].Channel;
254
255 // Did we already cache this value?
256 if (const StorageType* CachedValue = ValuesByChannel.Find(Channel))
257 {
258 InitialValues[Index] = *CachedValue;
259 continue;
260 }
261
262 const FInterrogationChannelInfo* ChannelInfo = SparseChannelInfo.Find(Channel);
263 UObject* Object = ChannelInfo ? ChannelInfo->WeakObject.Get() : nullptr;
264 if (!ChannelInfo || !Object || ChannelInfo->PropertyBinding.PropertyName.IsNone())
265 {
266 continue;
267 }
268
270
271 // Retrieve a cached value if possible
272 if (CacheStorage)
273 {
274 const StorageType* CachedValue = nullptr;
275 if (!Property.IsSet())
276 {
277 CachedValue = CacheStorage->FindCachedValue(Object, ChannelInfo->PropertyBinding.PropertyPath);
278 }
279 else if (const FCustomPropertyIndex* CustomIndex = Property->TryGet<FCustomPropertyIndex>())
280 {
281 CachedValue = CacheStorage->FindCachedValue(Object, *CustomIndex);
282 }
283 else
284 {
285 CachedValue = CacheStorage->FindCachedValue(Object, Property->Get<uint16>());
286 }
287 if (CachedValue)
288 {
289 InitialValues[Index] = *CachedValue;
290 ValuesByChannel.Add(Channel, *CachedValue);
291 continue;
292 }
293 }
294
295 // No cached value available, must retrieve it now
296 TOptional<StorageType> CurrentValue;
297
298 if (!Property.IsSet())
299 {
301 Traits->GetObjectPropertyValue(Object, MetaData.template Get<MetaDataIndices>()[Index]..., &Bindings, CurrentValue.Emplace());
302 }
303 else if (const FCustomPropertyIndex* Custom = Property->TryGet<FCustomPropertyIndex>())
304 {
305 Traits->GetObjectPropertyValue(Object, MetaData.template Get<MetaDataIndices>()[Index]..., CustomAccessors[Custom->Value], CurrentValue.Emplace());
306 }
307 else
308 {
309 const uint16 FastPtrOffset = Property->Get<uint16>();
310 Traits->GetObjectPropertyValue(Object, MetaData.template Get<MetaDataIndices>()[Index]..., FastPtrOffset, CurrentValue.Emplace());
311 }
312
313 InitialValues[Index] = CurrentValue.GetValue();
314 ValuesByChannel.Add(Channel, CurrentValue.GetValue());
315 };
316 }
317};
318
319template<typename PropertyTraits>
334
335template<typename T, typename U = decltype(T::bIsComposite)>
337{
338 return T::bIsComposite;
339}
340constexpr bool IsCompositePropertyTraits(...)
341{
342 return true;
343}
344
345template<typename PropertyTraits, typename ...MetaDataTypes, int ...MetaDataIndices, typename ...CompositeTypes, int ...CompositeIndices>
348{
349 static constexpr bool bIsComposite = IsCompositePropertyTraits((PropertyTraits*)nullptr);
350
351 using StorageType = typename PropertyTraits::StorageType;
352 using CompleteSetterTask = std::conditional_t<bIsComposite, TSetCompositePropertyValues<PropertyTraits, CompositeTypes...>, TSetPropertyValues<PropertyTraits>>;
353
355
357
361
362 virtual bool SupportsProperty(const FPropertyDefinition& Definition, const FProperty& InProperty) const override
363 {
364 return static_cast<const PropertyTraits*>(Definition.TraitsInstance)->SupportsProperty(InProperty);
365 }
367 {
368 return static_cast<const PropertyTraits*>(Definition.TraitsInstance)->CoercePropertyValue(InProperty, InPropertyValue);
369 }
371 {
372 const PropertyTraits* Traits = static_cast<const PropertyTraits*>(Definition.TraitsInstance);
373 return Traits->UnpackChannels(*Value.Cast<StorageType>(), Property, OutUnpackedValues);
374 }
375
377 {
378 TSharedPtr<PreAnimatedStorageType> Existing = Container->FindStorage(StorageID);
379 if (!Existing)
380 {
382 Existing->Initialize(StorageID, Container);
383 Container->AddStorage(StorageID, Existing);
384 }
385
386 return Existing;
387 }
388
390 {
391 ScheduleSetterTasksImpl(Definition, Composites, Stats, TaskScheduler, Linker, FEntityComponentFilter());
392 }
393
395 {
397
398 const PropertyTraits* TraitsInstance = static_cast<const PropertyTraits*>(Definition.TraitsInstance);
399
401 .Read(BuiltInComponents->BoundObject)
402 .ReadOneOf(BuiltInComponents->CustomPropertyIndex, BuiltInComponents->FastPropertyOffset, BuiltInComponents->SlowProperty)
403 .ReadAllOf(Definition.GetMetaDataComponent<MetaDataTypes>(MetaDataIndices)...)
404 .ReadAllOf(Composites[CompositeIndices].ComponentTypeID.ReinterpretCast<CompositeTypes>()...)
405 .FilterAll({ Definition.PropertyType })
406 .FilterNone({ BuiltInComponents->Tags.Ignored })
407 .CombineFilter(AdditionalFilter)
408 .SetStat(Definition.StatID)
409 .SetDesiredThread(Linker->EntityManager.GetGatherThread())
410 .template Fork_PerAllocation<CompleteSetterTask>(&Linker->EntityManager, TaskScheduler, TraitsInstance, Definition.CustomPropertyRegistration);
411
412 if constexpr (bIsComposite)
413 {
414 if (Stats.NumPartialProperties > 0)
415 {
417
419 for (const FPropertyCompositeDefinition& Composite : Composites)
420 {
421 CompletePropertyMask.Set(Composite.ComponentTypeID);
422 }
423
425 .Read(BuiltInComponents->BoundObject)
426 .ReadOneOf(BuiltInComponents->CustomPropertyIndex, BuiltInComponents->FastPropertyOffset, BuiltInComponents->SlowProperty)
427 .ReadAllOf(Definition.GetMetaDataComponent<MetaDataTypes>(MetaDataIndices)...)
428 .ReadAnyOf(Composites[CompositeIndices].ComponentTypeID.ReinterpretCast<CompositeTypes>()...)
430 .FilterAll({ Definition.PropertyType })
431 .FilterNone({ BuiltInComponents->Tags.Ignored })
432 .CombineFilter(AdditionalFilter)
433 .FilterOut(CompletePropertyMask)
434 .SetStat(Definition.StatID)
435 .SetDesiredThread(Linker->EntityManager.GetGatherThread())
436 .template Fork_PerAllocation<PartialSetterTask>(&Linker->EntityManager, TaskScheduler, TraitsInstance, Definition.CustomPropertyRegistration, Composites);
437 }
438 }
439 }
440
442 {
444
445 const PropertyTraits* TraitsInstance = static_cast<const PropertyTraits*>(Definition.TraitsInstance);
446
448 .Read(BuiltInComponents->BoundObject)
449 .ReadOneOf(BuiltInComponents->CustomPropertyIndex, BuiltInComponents->FastPropertyOffset, BuiltInComponents->SlowProperty)
450 .ReadAllOf(Definition.GetMetaDataComponent<MetaDataTypes>(MetaDataIndices)...)
451 .ReadAllOf(Composites[CompositeIndices].ComponentTypeID.ReinterpretCast<CompositeTypes>()...)
452 .FilterAll({ Definition.PropertyType })
453 .FilterNone({ BuiltInComponents->Tags.Ignored })
454 .SetStat(Definition.StatID)
455 .SetDesiredThread(Linker->EntityManager.GetGatherThread())
456 .template Dispatch_PerAllocation<CompleteSetterTask>(&Linker->EntityManager, InPrerequisites, &Subsequents, TraitsInstance, Definition.CustomPropertyRegistration);
457
458 if constexpr (bIsComposite)
459 {
460 if (Stats.NumPartialProperties > 0)
461 {
463
465 for (const FPropertyCompositeDefinition& Composite : Composites)
466 {
467 CompletePropertyMask.Set(Composite.ComponentTypeID);
468 }
469
471 .Read(BuiltInComponents->BoundObject)
472 .ReadOneOf(BuiltInComponents->CustomPropertyIndex, BuiltInComponents->FastPropertyOffset, BuiltInComponents->SlowProperty)
473 .ReadAllOf(Definition.GetMetaDataComponent<MetaDataTypes>(MetaDataIndices)...)
474 .ReadAnyOf(Composites[CompositeIndices].ComponentTypeID.ReinterpretCast<CompositeTypes>()...)
476 .FilterAll({ Definition.PropertyType })
477 .FilterOut(CompletePropertyMask)
478 .FilterNone({ BuiltInComponents->Tags.Ignored })
479 .SetStat(Definition.StatID)
480 .SetDesiredThread(Linker->EntityManager.GetGatherThread())
481 .template Dispatch_PerAllocation<PartialSetterTask>(&Linker->EntityManager, InPrerequisites, &Subsequents, TraitsInstance, Definition.CustomPropertyRegistration, Composites);
482 }
483 }
484 }
485
487 {
489 static_cast<const PropertyTraits*>(Definition.TraitsInstance),
490 Definition.InitialValueType.ReinterpretCast<StorageType>(),
491 Definition.MetaDataTypes,
492 Definition.CustomPropertyRegistration
493 );
494 }
495
497 {
498 RecomposeBlendImpl(PropertyDefinition, Composites, InParams, Blender, *InCurrentValue.Cast<StorageType>(), OutResult);
499 }
500
502 {
503 check(OutResults.Num() == InParams.Query.Entities.Num());
504
506 if (!ValueDecomposer)
507 {
508 return;
509 }
510
511 FEntityManager& EntityManager = Blender->GetLinker()->EntityManager;
512 EntityManager.LockDown();
513
514 constexpr int32 NumComposites = sizeof...(CompositeTypes);
515 check(Composites.Num() == NumComposites);
516
518
520
522 for (int32 Index = 0; Index < NumComposites; ++Index)
523 {
524 if ((PropertyDefinition.DoubleCompositeMask & (1 << Index)) == 0)
525 {
526 continue;
527 }
528
529 LocalParams.ResultComponentType = Composites[Index].ComponentTypeID;
531 if (Task)
532 {
533 Tasks.Add(Task);
534 }
535 }
536
537 if (Tasks.Num() != 0)
538 {
540 }
541
542 // Get the initial value in case we have a value without a full-weighted absolute channel.
544 if (InParams.PropertyEntityID)
545 {
546 TComponentTypeID<StorageType> InitialValueType = PropertyDefinition.InitialValueType.ReinterpretCast<StorageType>();
547 InitialValueComponent = EntityManager.ReadComponent(InParams.PropertyEntityID, InitialValueType);
548 }
549
550 for (int32 Index = 0; Index < LocalParams.Query.Entities.Num(); ++Index)
551 {
552 FMovieSceneEntityID EntityID = LocalParams.Query.Entities[Index];
553
554 uint8* Result = reinterpret_cast<uint8*>(OutResults[Index].Cast<StorageType>());
555
557 {
558 if ((PropertyDefinition.DoubleCompositeMask & ( 1 << CompositeIndex)) != 0)
559 {
560 const double* InitialValueComposite = nullptr;
563 {
565 InitialValueComposite = reinterpret_cast<const double*>(reinterpret_cast<const uint8*>(InitialValuePtr) + Composites[CompositeIndex].CompositeOffset);
566 }
567
568 const double NewComposite = *reinterpret_cast<const double*>(reinterpret_cast<const uint8*>(&InCurrentValue) + Composites[CompositeIndex].CompositeOffset);
569
570 double* RecomposedComposite = reinterpret_cast<double*>(Result + Composites[CompositeIndex].CompositeOffset);
572 }
573 }
574 }
575
576 EntityManager.ReleaseLockDown();
577 }
578
580 {
581 check(OutResults.Num() == InParams.Query.Entities.Num());
582
583 constexpr int32 NumComposites = sizeof...(CompositeTypes);
584 check(Composites.Num() == NumComposites);
586
588 if (!ValueDecomposer)
589 {
590 return;
591 }
592
593 FEntityManager& EntityManager = Blender->GetLinker()->EntityManager;
594 EntityManager.LockDown();
595
597
599
600 LocalParams.ResultComponentType = Composite.ComponentTypeID;
601 FGraphEventRef Task = ValueDecomposer->DispatchDecomposeTask(LocalParams, &AlignedOutput);
602 if (Task)
603 {
605 }
606
607 // Get the initial value in case we have a value without a full-weighted absolute channel.
609 if (InParams.PropertyEntityID)
610 {
611 TComponentTypeID<StorageType> InitialValueType = PropertyDefinition.InitialValueType.ReinterpretCast<StorageType>();
612 InitialValueComponent = EntityManager.ReadComponent(InParams.PropertyEntityID, InitialValueType);
613 }
614
615 for (int32 Index = 0; Index < LocalParams.Query.Entities.Num(); ++Index)
616 {
617 FMovieSceneEntityID EntityID = LocalParams.Query.Entities[Index];
618
619 if ((PropertyDefinition.DoubleCompositeMask & (1 << CompositeIndex)) != 0)
620 {
621 const double* InitialValueComposite = nullptr;
623 {
625 InitialValueComposite = reinterpret_cast<const double*>(reinterpret_cast<const uint8*>(InitialValuePtr) + Composite.CompositeOffset);
626 }
627
628 const double RecomposedComposite = AlignedOutput.Value.Recompose(EntityID, InCurrentValue, InitialValueComposite);
630 }
631 }
632
633 EntityManager.ReleaseLockDown();
634 }
635
637 {
639
640 constexpr int32 NumComposites = sizeof...(CompositeTypes);
641 check(Composites.Num() == NumComposites);
642
643 check(TypedResults.Num() == EntityIDs.Num());
644
645 FEntityManager& EntityManager = Linker->EntityManager;
646
647 for (int32 Index = 0; Index < EntityIDs.Num(); ++Index)
648 {
649 FMovieSceneEntityID EntityID = EntityIDs[Index];
650 if (!EntityID)
651 {
652 continue;
653 }
654
655 FEntityDataLocation Location = EntityManager.GetEntity(EntityIDs[Index]).Data;
656
658 Location.Allocation->TryReadComponents(Composites[CompositeIndices].ComponentTypeID.ReinterpretCast<CompositeTypes>()).ComponentAtIndex(Location.ComponentOffset)...
659 );
660 }
661 }
662};
663
664
665
667{
668 template<typename T, typename ...Composites>
669 auto Requires() -> decltype(T::MakeHandler());
670};
671
672
673template<typename PropertyTraits>
675{
677 {
678 checkf(Definition == &Registry->GetProperties().Last(), TEXT("Cannot re-define a property type after another has been added."));
679 checkf(Definition->CompositeSize == 0, TEXT("Property already has a composite."));
680
682 Registry->CompositeDefinitions.Add(NewChannel);
683
685
686 static_assert(!std::is_same_v<typename PropertyTraits::StorageType, float>, "Please use double-precision composites");
687
688 if constexpr (std::is_same_v<typename PropertyTraits::StorageType, double>)
689 {
691 }
692
693 return *this;
694 }
695
696 template<int InlineSize>
702
708
709 template<typename BlenderSystemType>
711 {
712 Definition->BlenderSystemClass = BlenderSystemType::StaticClass();
713 return *this;
714 }
715
717 {
718 Definition->BlenderSystemClass = BlenderSystemClass;
719 return *this;
720 }
721
727
740
741 template<typename HandlerType>
747
748protected:
749
751
755
758};
759
760
761template<typename PropertyTraits, typename... Composites>
763{
764 using StorageType = typename PropertyTraits::StorageType;
765
766 static_assert(sizeof...(Composites) <= 32, "More than 32 composites is not supported");
767
771
772 template<typename T>
774 {
775 checkf(Definition == &Registry->GetProperties().Last(), TEXT("Cannot re-define a property type after another has been added."));
776
777 const PTRINT CompositeOffset = (PTRINT)&(((StorageType*)0)->*DataPtr);
778
779 FPropertyCompositeDefinition NewChannel = { InComponent, static_cast<uint16>(CompositeOffset) };
780 Registry->CompositeDefinitions.Add(NewChannel);
781
782 static_assert(!std::is_same_v<T, float>, "Please use double-precision composites");
783
784 if constexpr (std::is_same_v<T, double>)
785 {
786 Definition->DoubleCompositeMask |= 1 << Definition->CompositeSize;
787 }
788
789 ++Definition->CompositeSize;
790 return TCompositePropertyDefinitionBuilder<PropertyTraits, Composites..., T>(Definition, Registry);
791 }
792
794 {
795 checkf(Definition == &Registry->GetProperties().Last(), TEXT("Cannot re-define a property type after another has been added."));
796
797 const PTRINT CompositeOffset = (PTRINT)&(((StorageType*)0)->*DataPtr);
798
799 FPropertyCompositeDefinition NewChannel = { InComponent, static_cast<uint16>(CompositeOffset) };
800 Registry->CompositeDefinitions.Add(NewChannel);
801
802 Definition->DoubleCompositeMask |= 1 << Definition->CompositeSize;
803
804 ++Definition->CompositeSize;
805 return TCompositePropertyDefinitionBuilder<PropertyTraits, Composites..., double>(Definition, Registry);
806 }
807
808 template<int InlineSize>
814
815 template<typename BlenderSystemType>
817 {
818 Definition->BlenderSystemClass = BlenderSystemType::StaticClass();
819 return *this;
820 }
821
822 TCompositePropertyDefinitionBuilder<PropertyTraits, Composites...>& SetBlenderSystem(UClass* BlenderSystemClass)
823 {
824 Definition->BlenderSystemClass = BlenderSystemClass;
825 return *this;
826 }
827
833
834 void Commit()
835 {
836 if constexpr (TModels_V<CPropertyTraitsDefineHandler, PropertyTraits, Composites...>)
837 {
838 Definition->Handler = PropertyTraits::template MakeHandler<Composites...>();
839 }
840 else
841 {
842 Definition->Handler = TPropertyComponentHandler<PropertyTraits, Composites...>();
843 }
844 Definition->SetupInitialValueProcessor();
845 }
846
847 template<typename HandlerType>
849 {
851 Definition->SetupInitialValueProcessor();
852 }
853
854private:
855
856 FPropertyDefinition* Definition;
857 FPropertyRegistry* Registry;
858};
859
860
874
876
886
887template<typename PropertyTraits>
889{
890 using namespace UE::MovieScene;
891
892 const FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
893 const FPropertyDefinition& PropertyDefinition = BuiltInComponents->PropertyRegistry.GetDefinition(Components.CompositeID);
894
896
897 if (InQuery.Entities.Num() == 0)
898 {
899 return Result;
900 }
901
902 const FPropertyRecomposerPropertyInfo Property = OnGetPropertyInfo.Execute(InQuery.Entities[0], InQuery.Object);
903
905 {
906 return Result;
907 }
908
909 UMovieSceneBlenderSystem* Blender = Property.BlenderSystem;
910 if (!Blender)
911 {
912 return Result;
913 }
914
916 Params.Query = InQuery;
917 Params.PropertyEntityID = Property.PropertyEntityID;
918 Params.DecomposeBlendChannel = Property.BlendChannel;
919 Params.PropertyTag = PropertyDefinition.PropertyType;
920
921 TArrayView<const FPropertyCompositeDefinition> Composites = BuiltInComponents->PropertyRegistry.GetComposites(PropertyDefinition);
922
923 // Make an array of type-erased values that reference each element of Result.Values.
924 // These will be written to inside RecomposeBlendOperational on success
926 ErasedValues.Reserve(Result.Values.Num());
927 for (int32 Index = 0; Index < Result.Values.Num(); ++Index)
928 {
930 }
931
933 PropertyDefinition.Handler->RecomposeBlendOperational(PropertyDefinition, Composites, Params, Blender, CurrentValueErased, ErasedValues);
934 return Result;
935}
936
937
938} // namespace MovieScene
939} // namespace UE
940
941
#define check(expr)
Definition AssertionMacros.h:314
#define checkf(expr, format,...)
Definition AssertionMacros.h:315
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::PTRINT PTRINT
A signed integer the same size as a pointer.
Definition Platform.h:1148
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 DECLARE_DELEGATE_RetVal_TwoParams(ReturnValueType, DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:63
@ Num
Definition MetalRHIPrivate.h:234
constexpr bool TModels_V
Definition Models.h:57
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
CORE_API FString ToString() const
Definition UnrealNames.cpp:3537
FORCEINLINE bool IsNone() const
Definition NameTypes.h:827
Definition UnrealType.h:174
static CORE_API FTaskGraphInterface & Get()
Definition TaskGraph.cpp:1794
void WaitUntilTaskCompletes(const FGraphEventRef &Task, ENamedThreads::Type CurrentThreadIfKnown=ENamedThreads::AnyThread)
Definition TaskGraphInterfaces.h:416
virtual void WaitUntilTasksComplete(const FGraphEventArray &Tasks, ENamedThreads::Type CurrentThreadIfKnown=ENamedThreads::AnyThread)=0
Definition TrackInstancePropertyBindings.h:143
Definition MovieSceneDecompositionQuery.h:217
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition SharedPointer.h:692
Definition SortedMap.h:20
UE_FORCEINLINE_HINT ValueType & Add(const KeyType &InKey, const ValueType &InValue)
Definition SortedMap.h:194
ValueType * Find(KeyConstPointerType Key)
Definition SortedMap.h:285
UE_FORCEINLINE_HINT void Empty(int32 ExpectedNumElements=0)
Definition SortedMap.h:124
Definition SubclassOf.h:30
Definition Class.h:3793
Definition MovieSceneEntityManager.h:81
Definition MovieScenePropertyRegistry.h:165
TArrayView< const FPropertyDefinition > GetProperties() const
Definition MovieScenePropertyRegistry.h:234
TArrayView< const FPropertyCompositeDefinition > GetComposites(const FPropertyDefinition &Property) const
Definition MovieScenePropertyRegistry.h:247
static MOVIESCENE_API TOptional< FResolvedFastProperty > ResolveFastProperty(UObject *Object, const FMovieScenePropertyBinding &PropertyBinding, FCustomAccessorView CustomAccessors)
Definition MovieScenePropertyRegistry.cpp:171
const FPropertyDefinition & GetDefinition(FCompositePropertyTypeID PropertyID) const
Definition MovieScenePropertyRegistry.h:226
Definition IMovieSceneTaskScheduler.h:162
Definition MovieSceneBlenderSystem.h:45
Definition MovieSceneEntitySystemLinker.h:113
FEntityManager EntityManager
Definition MovieSceneEntitySystemLinker.h:125
UMovieSceneEntitySystemLinker * GetLinker() const
Definition MovieSceneEntitySystem.h:161
Definition MovieSceneTrack.h:206
Definition Object.h:95
@ GameThread
Definition TaskGraphInterfaces.h:61
Definition Linker.cpp:38
TVariant< bool, uint64, int64, double, FString > MetaDataType
Definition TypedElementMetaData.h:23
Definition ConstraintsManager.h:14
void PatchCompositeValue(TArrayView< const FPropertyCompositeDefinition > CompositeDefinitions, void *OutValueAddress, const CompositeTypes *... Composites)
Definition MovieScenePartialProperties.h:39
constexpr bool IsCompositePropertyTraits(T *)
Definition MovieScenePropertyComponentHandler.h:336
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
FName PropertyPath
Definition MovieScenePropertyBinding.h:48
FName PropertyName
Definition MovieScenePropertyBinding.h:44
Definition IntegerSequence.h:9
Definition Optional.h:131
constexpr OptionalType & GetValue()
Definition Optional.h:443
OptionalType & Emplace(ArgsType &&... Args)
Definition Optional.h:323
Definition LightweightStats.h:416
Definition Tuple.h:652
FORCEINLINE T * Get(bool bEvenIfPendingKill) const
Definition WeakObjectPtrTemplates.h:132
Definition MovieScenePropertyComponentHandler.h:667
auto Requires() -> decltype(T::MakeHandler())
Definition BuiltInComponentTypes.h:578
struct UE::MovieScene::FBuiltInComponentTypes::@1489 Tags
TComponentTypeID< FCustomPropertyIndex > CustomPropertyIndex
Definition BuiltInComponentTypes.h:754
TComponentTypeID< uint16 > FastPropertyOffset
Definition BuiltInComponentTypes.h:757
FComponentTypeID Ignored
Definition BuiltInComponentTypes.h:810
struct UE::MovieScene::FBuiltInComponentTypes::@1490 Interrogation
TComponentTypeID< FInitialValueIndex > InitialValueIndex
Definition BuiltInComponentTypes.h:622
static MOVIESCENE_API FBuiltInComponentTypes * Get()
Definition BuiltInComponentTypes.cpp:667
FPropertyRegistry PropertyRegistry
Definition BuiltInComponentTypes.h:583
TComponentTypeID< FInterrogationKey > OutputKey
Definition BuiltInComponentTypes.h:829
TComponentTypeID< UObject * > BoundObject
Definition BuiltInComponentTypes.h:599
TComponentTypeID< TSharedPtr< FTrackInstancePropertyBindings > > SlowProperty
Definition BuiltInComponentTypes.h:760
Definition MovieSceneEntityIDs.h:40
bool Contains(FComponentTypeID InComponentType) const
Definition MovieSceneEntityIDs.h:429
void Set(FComponentTypeID InComponentType)
Definition MovieSceneEntityIDs.h:444
TComponentTypeID< T > ReinterpretCast() const
Definition MovieSceneEntityIDs.h:501
Definition MovieScenePropertySystemTypes.h:164
Definition MovieScenePropertySystemTypes.h:23
Definition MovieSceneDecompositionQuery.h:33
Definition MovieSceneEntitySystemTypes.h:425
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
TComponentLock< TReadOptional< T > > TryReadComponents(TComponentTypeID< T > ComponentType) const
Definition MovieSceneEntitySystemTypes.h:887
int32 Num() const
Definition MovieSceneEntitySystemTypes.h:813
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneEntitySystemTypes.h:1053
Definition MovieSceneEntitySystemTask.h:1045
Definition MovieSceneInitialValueCache.h:56
TPropertyValueStorage< PropertyTraits > * GetStorage(FComponentTypeID InitialValueType)
Definition MovieSceneInitialValueCache.h:95
Definition MovieSceneIntermediatePropertyValue.h:228
Definition MovieSceneIntermediatePropertyValue.h:312
static FIntermediatePropertyValue FromAddress(T *Ptr)
Definition MovieSceneIntermediatePropertyValue.h:350
Definition MovieSceneInterrogation.h:20
TWeakObjectPtr< UObject > WeakObject
Definition MovieSceneInterrogation.h:22
FMovieScenePropertyBinding PropertyBinding
Definition MovieSceneInterrogation.h:25
Definition MovieSceneEntitySystemTypes.h:123
Definition MovieSceneEntityIDs.h:302
static FMovieSceneEntityID Invalid()
Definition MovieSceneEntityIDs.h:343
Definition MovieScenePreAnimatedStateExtension.h:73
Definition IMovieScenePropertyComponentHandler.h:91
Definition MovieScenePropertyRegistry.h:141
Definition MovieScenePropertyRegistry.h:66
FComponentTypeID InitialValueType
Definition MovieScenePropertyRegistry.h:127
TStatId StatID
Definition MovieScenePropertyRegistry.h:112
TSubclassOf< UMovieSceneTrack > DefaultTrackType
Definition MovieScenePropertyRegistry.h:109
MOVIESCENE_API void SetupInitialValueProcessor() const
Definition MovieScenePropertyRegistry.cpp:230
uint16 CompositeSize
Definition MovieScenePropertyRegistry.h:121
UClass * BlenderSystemClass
Definition MovieScenePropertyRegistry.h:133
uint32 DoubleCompositeMask
Definition MovieScenePropertyRegistry.h:115
TInlineValue< IPropertyComponentHandler, 32 > Handler
Definition MovieScenePropertyRegistry.h:136
ICustomPropertyRegistration * CustomPropertyRegistration
Definition MovieScenePropertyRegistry.h:103
FComponentTypeID PropertyType
Definition MovieScenePropertyRegistry.h:124
Definition MovieScenePropertyComponentHandler.h:878
TRecompositionResult< typename PropertyTraits::StorageType > RecomposeBlendOperational(const TPropertyComponents< PropertyTraits > &InComponents, const FDecompositionQuery &InQuery, const typename PropertyTraits::StorageType &InCurrentValue)
Definition MovieScenePropertyComponentHandler.h:888
FOnGetPropertyRecomposerPropertyInfo OnGetPropertyInfo
Definition MovieScenePropertyComponentHandler.h:884
Definition MovieScenePropertyComponentHandler.h:862
static constexpr uint16 INVALID_BLEND_CHANNEL
Definition MovieScenePropertyComponentHandler.h:863
FMovieSceneEntityID PropertyEntityID
Definition MovieScenePropertyComponentHandler.h:867
static FPropertyRecomposerPropertyInfo Invalid()
Definition MovieScenePropertyComponentHandler.h:869
uint16 BlendChannel
Definition MovieScenePropertyComponentHandler.h:865
UMovieSceneBlenderSystem * BlenderSystem
Definition MovieScenePropertyComponentHandler.h:866
Definition MovieScenePropertyRegistry.h:53
int32 NumPartialProperties
Definition MovieScenePropertyRegistry.h:58
Definition MovieSceneDecompositionQuery.h:201
Definition MovieSceneIntermediatePropertyValue.h:131
Definition MovieSceneInterrogation.h:40
FInterrogationChannelInfo * Find(FInterrogationChannel Channel)
Definition MovieSceneInterrogation.h:44
Definition MovieSceneSystemTaskDependencies.h:98
Definition MovieSceneSystemTaskDependencies.h:29
Definition MovieSceneUnpackedChannelValues.h:159
Definition MovieSceneDecompositionQuery.h:178
FComponentTypeID ResultComponentType
Definition MovieSceneDecompositionQuery.h:182
Definition MovieScenePropertySystemTypes.h:216
virtual FCustomAccessorView GetAccessors() const =0
Definition IMovieScenePropertyComponentHandler.h:142
Definition MovieSceneInterrogation.h:68
Definition IMovieScenePropertyComponentHandler.h:157
Definition MovieScenePreAnimatedStorageID.h:56
Definition MovieSceneComponentPtr.h:390
Definition MovieSceneComponentPtr.h:381
Definition MovieSceneComponentPtr.h:403
Definition MovieSceneEntityIDs.h:283
Definition MovieScenePropertyComponentHandler.h:763
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites..., double > AddComposite(TComponentTypeID< double > InComponent, double StorageType::*DataPtr)
Definition MovieScenePropertyComponentHandler.h:793
void Commit()
Definition MovieScenePropertyComponentHandler.h:834
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites... > & SetBlenderSystem()
Definition MovieScenePropertyComponentHandler.h:816
TCompositePropertyDefinitionBuilder(FPropertyDefinition *InDefinition, FPropertyRegistry *InRegistry)
Definition MovieScenePropertyComponentHandler.h:768
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites... > & SetBlenderSystem(UClass *BlenderSystemClass)
Definition MovieScenePropertyComponentHandler.h:822
void Commit(HandlerType &&InHandler)
Definition MovieScenePropertyComponentHandler.h:848
typename PropertyTraits::StorageType StorageType
Definition MovieScenePropertyComponentHandler.h:764
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites... > & SetDefaultTrackType(TSubclassOf< UMovieSceneTrack > InDefaultTrackType)
Definition MovieScenePropertyComponentHandler.h:828
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites..., T > AddComposite(TComponentTypeID< T > InComponent, T StorageType::*DataPtr)
Definition MovieScenePropertyComponentHandler.h:773
TCompositePropertyDefinitionBuilder< PropertyTraits, Composites... > & SetCustomAccessors(TCustomPropertyRegistration< PropertyTraits, InlineSize > *InCustomAccessors)
Definition MovieScenePropertyComponentHandler.h:809
Definition MovieScenePropertySystemTypes.h:232
TFilteredEntityTask< T... > FilterAny(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:228
TFilteredEntityTask< T... > FilterAll(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:188
TTuple< TComponentTypeID< MetaDataTypes >... > MetaDataComponents
Definition MovieScenePropertyComponentHandler.h:51
TSortedMap< FInterrogationChannel, StorageType > ValuesByChannel
Definition MovieScenePropertyComponentHandler.h:45
virtual void PopulateFilter(FEntityComponentFilter &OutFilter) const override
Definition MovieScenePropertyComponentHandler.h:94
void VisitInterrogationAllocation(const FEntityAllocation *Allocation)
Definition MovieScenePropertyComponentHandler.h:238
void VisitAllocationCached(const FEntityAllocation *Allocation)
Definition MovieScenePropertyComponentHandler.h:162
virtual void Process(const FEntityAllocation *Allocation, const FComponentMask &AllocationType) override
Definition MovieScenePropertyComponentHandler.h:100
void VisitAllocation(const FEntityAllocation *Allocation)
Definition MovieScenePropertyComponentHandler.h:123
TInitialValueProcessorImpl(const PropertyTraits *InTraits, TComponentTypeID< StorageType > InInitialValueType, TArrayView< const FComponentTypeID > InMetaDataComponents, ICustomPropertyRegistration *InCustomPropertyRegistration)
Definition MovieScenePropertyComponentHandler.h:61
virtual void Initialize(UMovieSceneEntitySystemLinker *Linker, FInitialValueCache *InitialValueCache) override
Definition MovieScenePropertyComponentHandler.h:78
Definition MovieScenePropertyComponentHandler.h:38
Definition MovieScenePropertyComponentHandler.h:321
TInitialValueProcessor(const PropertyTraits *InTraits, TComponentTypeID< typename PropertyTraits::StorageType > InInitialValueType, TArrayView< const FComponentTypeID > InMetaDataComponents, ICustomPropertyRegistration *InCustomPropertyRegistration)
Definition MovieScenePropertyComponentHandler.h:326
Definition MovieScenePreAnimatedPropertyStorage.h:140
void RecomposeBlendImpl(const FPropertyDefinition &PropertyDefinition, TArrayView< const FPropertyCompositeDefinition > Composites, const FValueDecompositionParams &InParams, UMovieSceneBlenderSystem *Blender, const StorageType &InCurrentValue, TArrayView< FIntermediatePropertyValue > OutResults)
Definition MovieScenePropertyComponentHandler.h:501
virtual void RebuildOperational(const FPropertyDefinition &PropertyDefinition, TArrayView< const FPropertyCompositeDefinition > Composites, const TArrayView< FMovieSceneEntityID > &EntityIDs, UMovieSceneEntitySystemLinker *Linker, FPropertyComponentArrayView OutResult) override
Definition MovieScenePropertyComponentHandler.h:636
virtual void ScheduleSetterTasks(const FPropertyDefinition &Definition, TArrayView< const FPropertyCompositeDefinition > Composites, const FPropertyStats &Stats, IEntitySystemScheduler *TaskScheduler, UMovieSceneEntitySystemLinker *Linker)
Definition MovieScenePropertyComponentHandler.h:389
virtual FIntermediatePropertyValue CoercePropertyValue(const FPropertyDefinition &Definition, const FProperty &InProperty, const FSourcePropertyValue &InPropertyValue) const override
Definition MovieScenePropertyComponentHandler.h:366
std::conditional_t< bIsComposite, TSetCompositePropertyValues< PropertyTraits, CompositeTypes... >, TSetPropertyValues< PropertyTraits > > CompleteSetterTask
Definition MovieScenePropertyComponentHandler.h:352
virtual bool SupportsProperty(const FPropertyDefinition &Definition, const FProperty &InProperty) const override
Definition MovieScenePropertyComponentHandler.h:362
virtual void UnpackChannels(const FPropertyDefinition &Definition, const FProperty &Property, const FIntermediatePropertyValueConstRef &Value, FUnpackedChannelValues &OutUnpackedValues) const override
Definition MovieScenePropertyComponentHandler.h:370
virtual TSharedPtr< IInitialValueProcessor > MakeInitialValueProcessor(const FPropertyDefinition &Definition) override
Definition MovieScenePropertyComponentHandler.h:486
virtual void RecomposeBlendChannel(const FPropertyDefinition &PropertyDefinition, TArrayView< const FPropertyCompositeDefinition > Composites, int32 CompositeIndex, const FValueDecompositionParams &InParams, UMovieSceneBlenderSystem *Blender, double InCurrentValue, TArrayView< double > OutResults) override
Definition MovieScenePropertyComponentHandler.h:579
virtual void DispatchSetterTasks(const FPropertyDefinition &Definition, TArrayView< const FPropertyCompositeDefinition > Composites, const FPropertyStats &Stats, FSystemTaskPrerequisites &InPrerequisites, FSystemSubsequentTasks &Subsequents, UMovieSceneEntitySystemLinker *Linker)
Definition MovieScenePropertyComponentHandler.h:441
void ScheduleSetterTasksImpl(const FPropertyDefinition &Definition, TArrayView< const FPropertyCompositeDefinition > Composites, const FPropertyStats &Stats, IEntitySystemScheduler *TaskScheduler, UMovieSceneEntitySystemLinker *Linker, const FEntityComponentFilter &AdditionalFilter)
Definition MovieScenePropertyComponentHandler.h:394
virtual TSharedPtr< IPreAnimatedStorage > GetPreAnimatedStateStorage(const FPropertyDefinition &Definition, FPreAnimatedStateExtension *Container) override
Definition MovieScenePropertyComponentHandler.h:376
virtual void RecomposeBlendOperational(const FPropertyDefinition &PropertyDefinition, TArrayView< const FPropertyCompositeDefinition > Composites, const FValueDecompositionParams &InParams, UMovieSceneBlenderSystem *Blender, const FIntermediatePropertyValueConstRef &InCurrentValue, TArrayView< FIntermediatePropertyValue > OutResult) override
Definition MovieScenePropertyComponentHandler.h:496
Definition MovieScenePropertyComponentHandler.h:29
Definition MovieScenePropertyComponentHandler.h:34
Definition MovieScenePropertySystemTypes.h:299
TCompositePropertyTypeID< InPropertyTraits > CompositeID
Definition MovieScenePropertySystemTypes.h:307
Definition MovieScenePropertyComponentHandler.h:675
TPropertyDefinitionBuilder< PropertyTraits > & SetDefaultTrackType(TSubclassOf< UMovieSceneTrack > InDefaultTrackType)
Definition MovieScenePropertyComponentHandler.h:722
TPropertyDefinitionBuilder< PropertyTraits > & SetStat(TStatId InStatID)
Definition MovieScenePropertyComponentHandler.h:703
TPropertyDefinitionBuilder< PropertyTraits > & AddSoleChannel(TComponentTypeID< typename PropertyTraits::StorageType > InComponent)
Definition MovieScenePropertyComponentHandler.h:676
TPropertyDefinitionBuilder< PropertyTraits > & SetBlenderSystem()
Definition MovieScenePropertyComponentHandler.h:710
void Commit(HandlerType &&InHandler)
Definition MovieScenePropertyComponentHandler.h:742
TPropertyDefinitionBuilder< PropertyTraits > & SetCustomAccessors(TCustomPropertyRegistration< PropertyTraits, InlineSize > *InCustomAccessors)
Definition MovieScenePropertyComponentHandler.h:697
void Commit()
Definition MovieScenePropertyComponentHandler.h:728
friend FPropertyRegistry
Definition MovieScenePropertyComponentHandler.h:750
TPropertyDefinitionBuilder(FPropertyDefinition *InDefinition, FPropertyRegistry *InRegistry)
Definition MovieScenePropertyComponentHandler.h:752
TPropertyDefinitionBuilder< PropertyTraits > & SetBlenderSystem(UClass *BlenderSystemClass)
Definition MovieScenePropertyComponentHandler.h:716
FPropertyDefinition * Definition
Definition MovieScenePropertyComponentHandler.h:756
FPropertyRegistry * Registry
Definition MovieScenePropertyComponentHandler.h:757
Definition MovieScenePropertyMetaData.h:19
Definition MovieSceneInitialValueCache.h:166
const StorageType & GetCachedValue(FInitialValueIndex Index)
Definition MovieSceneInitialValueCache.h:320
FInitialValueIndex AddInitialValue(UObject *BoundObject, const StorageType &InValue, uint16 ResolvedPropertyOffset)
Definition MovieSceneInitialValueCache.h:196
TOptional< FInitialValueIndex > FindPropertyIndex(UObject *BoundObject, uint16 ResolvedPropertyOffset)
Definition MovieSceneInitialValueCache.h:258
const StorageType * FindCachedValue(UObject *BoundObject, uint16 ResolvedPropertyOffset)
Definition MovieSceneInitialValueCache.h:289
Definition MovieSceneDecompositionQuery.h:188
Definition MovieScenePropertySystemTypes.h:587
Definition MovieScenePartialProperties.h:47
Definition MovieScenePropertySystemTypes.h:436