UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneBlenderSystemHelper.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
11
12namespace UE
13{
14namespace MovieScene
15{
16
20template<typename PropertyType>
26
32template<typename PropertyType>
34{
37 {
38 if (Buffer.Num() > 0)
39 {
41 }
42 }
43
50
53 {
54 return InResult.Value / InResult.NumContributors;
55 }
56};
57
58template<typename PropertyType, typename ResultTraits = TSimpleBlendResultTraits<PropertyType>>
60{
63
68
69 void ForEachEntity(FMovieSceneBlendChannelID BlendChannelInput, PropertyType Value) const
70 {
71 ensureMsgf(BlendChannelInput.SystemID == SystemID, TEXT("Overriding the standard blender system of standard types isn't supported."));
72 if (ensure(BlendChannelResults.IsValidIndex(BlendChannelInput.ChannelID)))
73 {
74 ResultTraits::AccumulateResult(BlendChannelResults[BlendChannelInput.ChannelID], Value);
75 }
76 }
77};
78
79template<typename PropertyType, typename ResultTraits = TSimpleBlendResultTraits<PropertyType>>
81{
84
89
90 void ForEachEntity(FMovieSceneBlendChannelID BlendChannelOutput, PropertyType& OutValue) const
91 {
92 ensureMsgf(BlendChannelOutput.SystemID == SystemID, TEXT("Overriding the standard blender system of standard types isn't supported."));
93 if (ensure(BlendChannelResults.IsValidIndex(BlendChannelOutput.ChannelID)))
94 {
95 OutValue = ResultTraits::BlendResult(BlendChannelResults[BlendChannelOutput.ChannelID]);
96 }
97 }
98};
99
106template<typename PropertyType, typename ResultTraits = TSimpleBlendResultTraits<PropertyType>>
108{
109public:
110
113
115 : BlenderSystem(nullptr)
116 {}
117
135
137 {
138 using namespace UE::MovieScene;
139
140 // If we have no blend channels, we're done.
141 const int32 MaximumNumBlends = AllocatedBlendChannels.Num();
142 if (MaximumNumBlends == 0)
143 {
144 return;
145 }
146
147 const FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
148
149 BlendChannelResults.Reset();
150
151 const bool bHasChannels = Linker->EntityManager.Contains(FEntityComponentFilter().All({
152 ResultComponentID,
153 BlenderSystem->GetBlenderTypeTag(),
154 BuiltInComponents->BlendChannelInput }));
155 if (bHasChannels)
156 {
157 BlendChannelResults.SetNum(MaximumNumBlends);
158 }
159
160 // Reset the result buffer to the default values, as defined by the value type's traits.
162 FTaskParams(TEXT("Reset Simple Blender Weights")),
164
165 // Accumulate all contributors into the result buffer.
167 .Read(BuiltInComponents->BlendChannelInput)
168 .Read(ResultComponentID)
169 .FilterAll({ BlenderSystem->GetBlenderTypeTag() })
170 .FilterNone({ BuiltInComponents->Tags.Ignored })
172 &Linker->EntityManager, TaskScheduler, BlenderSystem->GetBlenderSystemID(), BlendChannelResults);
173
175
176 // Compute the final blended values and assign them to the blend channel output entities.
178 .Read(BuiltInComponents->BlendChannelOutput)
179 .Write(ResultComponentID)
180 .FilterAll({ BlenderSystem->GetBlenderTypeTag() })
181 .FilterNone({ BuiltInComponents->Tags.Ignored })
183 &Linker->EntityManager, TaskScheduler, BlenderSystem->GetBlenderSystemID(), BlendChannelResults);
184
186 }
187
192 {
193 using namespace UE::MovieScene;
194
195 // If we have no blend channels, we're done.
196 const int32 MaximumNumBlends = AllocatedBlendChannels.Num();
197 if (MaximumNumBlends == 0)
198 {
199 return;
200 }
201
202 const FBuiltInComponentTypes* BuiltInComponents = FBuiltInComponentTypes::Get();
203
204 // If the entity manager structure has been modified, let's reallocate our result buffer.
205 if (ChannelRelevancyCache.Update(Linker->EntityManager) == ECachedEntityManagerState::Stale)
206 {
207 BlendChannelResults.Reset();
208
209 const bool bHasChannels = Linker->EntityManager.Contains(FEntityComponentFilter().All({
210 ResultComponentID,
211 BlenderSystem->GetBlenderTypeTag(),
212 BuiltInComponents->BlendChannelInput }));
213 if (bHasChannels)
214 {
215 BlendChannelResults.SetNum(MaximumNumBlends);
216 }
217 }
218
220
221 // Reset the result buffer to the default values, as defined by the value type's traits.
222 FResultTraits::ZeroAccumulationBuffer(MakeArrayView(BlendChannelResults));
223
224 // Accumulate all contributors into the result buffer.
226
228 .Read(BuiltInComponents->BlendChannelInput)
229 .Read(ResultComponentID)
230 .FilterAll({ BlenderSystem->GetBlenderTypeTag() })
231 .FilterNone({ BuiltInComponents->Tags.Ignored })
233 &Linker->EntityManager, InPrerequisites, nullptr, BlenderSystem->GetBlenderSystemID(), BlendChannelResults);
234 if (Task)
235 {
236 Prereqs.AddRootTask(Task);
237 }
238
239 // Compute the final blended values and assign them to the blend channel output entities.
241 .Read(BuiltInComponents->BlendChannelOutput)
242 .Write(ResultComponentID)
243 .FilterAll({ BlenderSystem->GetBlenderTypeTag() })
244 .FilterNone({ BuiltInComponents->Tags.Ignored })
246 &Linker->EntityManager, Prereqs, &Subsequents, BlenderSystem->GetBlenderSystemID(), BlendChannelResults);
247 }
248
250 {
252 FResultTraits::ZeroAccumulationBuffer(MakeArrayView(BlendChannelResults));
253 }
254
255private:
256 UMovieSceneBlenderSystem* BlenderSystem;
257 TComponentTypeID<PropertyType> ResultComponentID;
258
259 FCachedEntityManagerState ChannelRelevancyCache;
260
261 TArray<TSimpleBlendResult<PropertyType>> BlendChannelResults;
262};
263
264}
265}
constexpr auto MakeArrayView(OtherRangeType &&Other)
Definition ArrayView.h:873
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
#define TEXT(x)
Definition Platform.h:1272
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
@ RF_ClassDefaultObject
This object is used as the default template for all instances of a class. One object is created for e...
Definition ObjectMacros.h:563
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
Definition Array.h:670
UE_FORCEINLINE_HINT int32 Num() const
Definition BitArray.h:1466
Definition Class.h:3793
Definition IMovieSceneTaskScheduler.h:162
FTaskID AddMemberFunctionTask(const FTaskParams &InParams, TaskType *Instance, typename TMemberFunctionTaskWrapper< TaskType >::MemberFunctionPtr FunctionPtr)
Definition IMovieSceneTaskScheduler.h:186
MOVIESCENE_API void AddPrerequisite(FTaskID Prerequisite, FTaskID Subsequent)
Definition IMovieSceneTaskScheduler.cpp:24
Definition MovieSceneBlenderSystemHelper.h:108
void Setup(UMovieSceneBlenderSystem *InBlenderSystem, TComponentTypeID< PropertyType > InResultComponentID, UClass *ChannelEvaluatorSystem=nullptr)
Definition MovieSceneBlenderSystemHelper.h:125
TSimpleBlenderSystemImpl()
Definition MovieSceneBlenderSystemHelper.h:114
void Schedule(UMovieSceneEntitySystemLinker *Linker, TBitArray<> &AllocatedBlendChannels, IEntitySystemScheduler *TaskScheduler)
Definition MovieSceneBlenderSystemHelper.h:136
void Run(UMovieSceneEntitySystemLinker *Linker, TBitArray<> &AllocatedBlendChannels, FSystemTaskPrerequisites &InPrerequisites, FSystemSubsequentTasks &Subsequents)
Definition MovieSceneBlenderSystemHelper.h:191
void ZeroAccumulationBuffers()
Definition MovieSceneBlenderSystemHelper.h:249
Definition MovieSceneBlenderSystem.h:45
static FMovieSceneBlenderSystemID GetBlenderSystemID()
Definition MovieSceneBlenderSystem.h:62
UE::MovieScene::FComponentTypeID GetBlenderTypeTag() const
Definition MovieSceneBlenderSystem.h:96
Definition MovieSceneEntitySystemLinker.h:113
static MOVIESCENE_API void DefineImplicitPrerequisite(TSubclassOf< UMovieSceneEntitySystem > UpstreamSystemType, TSubclassOf< UMovieSceneEntitySystem > DownstreamSystemType)
Definition MovieSceneEntitySystem.cpp:528
bool HasAnyFlags(EObjectFlags FlagsToCheck) const
Definition UObjectBaseUtility.h:93
FORCEINLINE UClass * GetClass() const
Definition UObjectBase.h:217
Definition Linker.cpp:38
Definition ConstraintsManager.h:14
Definition AdvancedWidgetsModule.cpp:13
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition MovieSceneBlenderSystemTypes.h:51
FMovieSceneBlenderSystemID SystemID
Definition MovieSceneBlenderSystemTypes.h:87
uint16 ChannelID
Definition MovieSceneBlenderSystemTypes.h:90
Definition MovieSceneBlenderSystemTypes.h:20
TCallTraitsParamTypeHelper< T, PassByValue >::ParamType ParamType
Definition UnrealTypeTraits.h:275
Definition BuiltInComponentTypes.h:578
struct UE::MovieScene::FBuiltInComponentTypes::@1489 Tags
TComponentTypeID< FMovieSceneBlendChannelID > BlendChannelOutput
Definition BuiltInComponentTypes.h:618
FComponentTypeID Ignored
Definition BuiltInComponentTypes.h:810
static MOVIESCENE_API FBuiltInComponentTypes * Get()
Definition BuiltInComponentTypes.cpp:667
TComponentTypeID< FMovieSceneBlendChannelID > BlendChannelInput
Definition BuiltInComponentTypes.h:616
Definition MovieSceneCachedEntityFilterResult.h:34
MOVIESCENE_API ECachedEntityManagerState Update(const FEntityManager &InEntityManager)
Definition MovieSceneCachedEntityFilterResult.cpp:12
Definition MovieSceneEntitySystemTypes.h:295
Definition MovieSceneEntitySystemTask.h:1045
Definition MovieSceneSystemTaskDependencies.h:98
Definition MovieSceneSystemTaskDependencies.h:29
void AddRootTask(const FGraphEventRef &InNewTask)
Definition MovieSceneSystemTaskDependencies.h:69
Definition IMovieSceneTaskScheduler.h:21
Definition IMovieSceneTaskScheduler.h:44
Definition MovieSceneEntityIDs.h:283
TFilteredEntityTask< T... > FilterAll(const FComponentMask &InComponentMask)
Definition MovieSceneEntitySystemTask.h:188
Definition MovieSceneBlenderSystemHelper.h:34
static void AccumulateResult(TSimpleBlendResult< PropertyType > &InOutValue, typename TCallTraits< PropertyType >::ParamType Contributor)
Definition MovieSceneBlenderSystemHelper.h:45
static PropertyType BlendResult(const TSimpleBlendResult< PropertyType > &InResult)
Definition MovieSceneBlenderSystemHelper.h:52
static void ZeroAccumulationBuffer(TArrayView< TSimpleBlendResult< PropertyType > > Buffer)
Definition MovieSceneBlenderSystemHelper.h:36
Definition MovieSceneBlenderSystemHelper.h:22
PropertyType Value
Definition MovieSceneBlenderSystemHelper.h:23
uint32 NumContributors
Definition MovieSceneBlenderSystemHelper.h:24
Definition MovieSceneBlenderSystemHelper.h:81
TSimpleBlenderCombineResults(FMovieSceneBlenderSystemID InSystemID, TArray< TSimpleBlendResult< PropertyType > > &InBlendChannelResults)
Definition MovieSceneBlenderSystemHelper.h:85
FMovieSceneBlenderSystemID SystemID
Definition MovieSceneBlenderSystemHelper.h:82
TArray< TSimpleBlendResult< PropertyType > > & BlendChannelResults
Definition MovieSceneBlenderSystemHelper.h:83
void ForEachEntity(FMovieSceneBlendChannelID BlendChannelOutput, PropertyType &OutValue) const
Definition MovieSceneBlenderSystemHelper.h:90
Definition MovieSceneBlenderSystemHelper.h:60
TSimpleBlenderGatherResults(FMovieSceneBlenderSystemID InSystemID, TArray< TSimpleBlendResult< PropertyType > > &InBlendChannelResults)
Definition MovieSceneBlenderSystemHelper.h:64
TArray< TSimpleBlendResult< PropertyType > > & BlendChannelResults
Definition MovieSceneBlenderSystemHelper.h:62
void ForEachEntity(FMovieSceneBlendChannelID BlendChannelInput, PropertyType Value) const
Definition MovieSceneBlenderSystemHelper.h:69
FMovieSceneBlenderSystemID SystemID
Definition MovieSceneBlenderSystemHelper.h:61