UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneAccumulatedBlendState.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"
6#include "Containers/Map.h"
12#include "HAL/Platform.h"
14#include "Misc/InlineValue.h"
15#include "MovieSceneFwd.h"
16#include "Templates/TypeHash.h"
18#include "UObject/ObjectKey.h"
19
21class UObject;
23
28
30{
33
36
38 {
39 return GetTypeHash(InKey.ObjectPtr) ^ GetTypeHash(InKey.ActuatorType);
40 }
41
43 {
44 return A.ObjectPtr == B.ObjectPtr && A.ActuatorType == B.ActuatorType;
45 }
46};
47
52{
53public:
55
58
61
69 template<typename DataType>
74
83
90
94 void Reset()
95 {
96 TokensToBlend.Reset();
97 }
98
99private:
100
102 struct FTokenEntry
103 {
104 virtual ~FTokenEntry() {}
105
110 virtual void Consolidate(FActuatorTokenStackPtr& OutStack) = 0;
111
112 FMovieSceneBlendingActuatorID GetActuatorID() const
113 {
114 return ActuatorTypeID;
115 }
116
120 FMovieSceneAnimTypeID GetDataTypeID() const
121 {
122 return DataTypeID;
123 }
124
125 protected:
126
132 : ActuatorTypeID(InActuatorTypeID), DataTypeID(InDataTypeID)
133 {}
135 FMovieSceneBlendingActuatorID ActuatorTypeID;
137 FMovieSceneAnimTypeID DataTypeID;
138 };
139
141 template<typename DataType>
142 struct TTokenEntry : FTokenEntry
143 {
145 : FTokenEntry(InActuatorTypeID, GetBlendingDataType<DataType>())
146 , Token(MoveTemp(InToken))
147 {}
148
153 virtual void Consolidate(FActuatorTokenStackPtr& OutStack) override final
154 {
155 // Attempt to find an existing stack for this actuator
156 if (!OutStack.IsValid())
157 {
159 }
160
161 // Ensure that the stack is operating on the same data type.
162 // If this ensure fires, something has added a token with an actuator ID where that actuator doesn't operate the data type that was addded
163 // For example:
164 // // MyActuator knows how to apply a float
165 // struct FMyActuator : TMovieSceneBlendingActuator<float>
166 // {...};
167 //
168 // Accumulator.DefineActuator(FMyActuator::GetActuatorTypeID(), TUniquePtr<IMovieSceneBlendingActuator>(new FMyActuator));
169 // // OK - constructing a float token for a float actuator
170 // ExecutionTokens.BlendToken(FMyActuator::GetActuatorTypeID(), TBlendableToken<float>(1.f, ...));
171 // // OK - constructing a float token out of another type for a float actuator
172 // ExecutionTokens.BlendToken(FMyActuator::GetActuatorTypeID(), TBlendableToken<float>(FCompoundType(), ...));
173 // // Assert - data type mismatch - cannot associate a TBlendableToken<int32> with an actuator ID that operates on a float
174 // ExecutionTokens.BlendToken(FMyActuator::GetActuatorTypeID(), TBlendableToken<int32>(1.f, ...));
175
176 if (ensureMsgf(OutStack->DataTypeID == DataTypeID, TEXT("Data type mismatch between actuators of the same ID")))
177 {
178 // static_cast should be safe now that we've verified the data type matches
180
181 // Add a pointer to this token to the stack to blend
182 TypedStack.AddToken(&Token);
183 }
184 }
185
188 };
189
192};
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
FMovieSceneAnimTypeID GetBlendingDataType()
Definition BlendableTokenStack.h:25
#define TEXT(x)
Definition Platform.h:1272
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TInlineValue< IBlendableTokenStack, 64 > FActuatorTokenStackPtr
Definition MovieSceneAccumulatedBlendState.h:27
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 IMovieScenePlayer.h:90
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
UE_FORCEINLINE_HINT SizeType Emplace(ArgsType &&... Args)
Definition Array.h:2561
Definition InlineValue.h:22
Definition UnrealString.h.inl:34
Definition Object.h:95
Definition MovieSceneAccumulatedBlendState.h:52
FMovieSceneAccumulatedBlendState & operator=(FMovieSceneAccumulatedBlendState &&)=default
FMovieSceneAccumulatedBlendState(FMovieSceneAccumulatedBlendState &&)=default
FMovieSceneAccumulatedBlendState & operator=(const FMovieSceneAccumulatedBlendState &)=delete
void Add(FMovieSceneBlendingActuatorID InActuatorType, TBlendableToken< DataType > &&InToken)
Definition MovieSceneAccumulatedBlendState.h:70
FMovieSceneAccumulatedBlendState(const FMovieSceneAccumulatedBlendState &)=delete
void Reset()
Definition MovieSceneAccumulatedBlendState.h:94
MOVIESCENE_API void Consolidate(TMap< FMovieSceneBlendingKey, FActuatorTokenStackPtr > &InOutBlendState, FMovieSceneEvaluationOperand InOperand, IMovieScenePlayer &Player)
Definition MovieSceneAccumulatedBlendState.cpp:6
Definition MovieSceneAnimTypeID.h:20
Definition MovieSceneBlendingActuatorID.h:8
Definition MovieSceneAccumulatedBlendState.h:30
friend uint32 GetTypeHash(const FMovieSceneBlendingKey &InKey)
Definition MovieSceneAccumulatedBlendState.h:37
UObject * ObjectPtr
Definition MovieSceneAccumulatedBlendState.h:32
friend bool operator==(const FMovieSceneBlendingKey &A, const FMovieSceneBlendingKey &B)
Definition MovieSceneAccumulatedBlendState.h:42
FMovieSceneBlendingActuatorID ActuatorType
Definition MovieSceneAccumulatedBlendState.h:35
Definition MovieSceneEvaluationOperand.h:15
Definition BlendableTokenStack.h:83
void AddToken(const TBlendableToken< DataType > *TokenToAdd)
Definition BlendableTokenStack.h:97
Definition BlendableToken.h:100