UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneChannelTraits.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Misc/FrameNumber.h"
7#include "Misc/FrameTime.h"
8#include "Misc/FrameRate.h"
9#include "Misc/Optional.h"
11#include "MovieSceneSection.h"
12
13
15
33
37template<typename ChannelType>
39{
40 enum { SupportsDefaults = true };
41
42#if WITH_EDITOR
43
45 typedef void ExtendedEditorDataType;
46
47#endif
48};
49
50template<typename ValueType>
52{
53 ValueType Offset = {};
54 ValueType Scale = {};
55 ValueType Pivot = {};
56};
57
61template<typename ChannelType>
65
66template<typename ChannelType>
68
69namespace UE
70{
71namespace MovieScene
72{
81 template<typename ChannelType, typename ValueType>
82 bool EvaluateChannel(const ChannelType* InChannel, FFrameTime InTime, ValueType& OutValue)
83 {
84 return InChannel->Evaluate(InTime, OutValue);
85 }
86
96 template<typename ChannelType, typename ValueType>
97 bool EvaluateChannel(const UMovieSceneSection* InSection, const ChannelType* InChannel, FFrameTime InTime, ValueType& OutValue)
98 {
100 }
101
110 template<typename ChannelType, typename ValueType>
111 bool AssignValue(ChannelType* InChannel, FKeyHandle InKeyHandle, ValueType&& InValue)
112 {
113 auto ChannelData = InChannel->GetData();
114 int32 ValueIndex = ChannelData.GetIndex(InKeyHandle);
115
116 if (ValueIndex != INDEX_NONE)
117 {
118 ChannelData.GetValues()[ValueIndex] = Forward<ValueType>(InValue);
119 return true;
120 }
121
122 // The key handle doesn't belong to this channel if it can't be found in the channel data, so report failure.
123 return false;
124 }
125
126 template<typename ChannelType, typename ValueType>
127 bool GetKeyValue(ChannelType* InChannel, FKeyHandle InKeyHandle, ValueType& OutValue)
128 {
129 auto ChannelData = InChannel->GetData();
130 int32 ValueIndex = ChannelData.GetIndex(InKeyHandle);
131
132 if (ValueIndex != INDEX_NONE)
133 {
134 OutValue = ChannelData.GetValues()[ValueIndex];
135 return true;
136 }
137
138 // The key handle doesn't belong to this channel if it can't be found in the channel data, so report failure.
139 return false;
140 }
141
142 template<typename ChannelType>
147
156 template<typename ChannelType, typename ValueType>
158 {
159 auto ChannelInterface = InChannel->GetData();
161
163
165 {
168 }
169 else
170 {
173 }
174
175 return Handle;
176 }
177
186 template<typename ChannelType, typename ValueType>
187 bool ValueExistsAtTime(const ChannelType* InChannel, FFrameNumber InTime, const ValueType& InValue)
188 {
189 ValueType ExistingValue{};
191 }
192
199 template<typename ChannelType, typename ValueType>
200 typename TEnableIf<TGetMovieSceneChannelTraits<ChannelType>::SupportsDefaults>::Type SetChannelDefault(ChannelType* Channel, ValueType&& DefaultValue)
201 {
202 Channel->SetDefault(DefaultValue);
203 }
204 template<typename ChannelType, typename ValueType>
205 typename TEnableIf<!TGetMovieSceneChannelTraits<ChannelType>::SupportsDefaults>::Type SetChannelDefault(ChannelType* Channel, ValueType&& DefaultValue)
206 {}
207
213 template<typename ChannelType>
215 {
216 Channel->RemoveDefault();
217 }
218 template<typename ChannelType>
221
228 template<typename ChannelType, typename ValueType>
230 {
231 if (Channel->GetDefault().IsSet())
232 {
233 OutDefaultValue = Channel->GetDefault().GetValue();
234 return true;
235 }
236 return false;
237 }
238
239 template<typename ChannelType, typename ValueType>
241 {
242 return false;
243 }
244
251 template<typename ChannelType>
252 void Optimize(ChannelType* InChannel, const FKeyDataOptimizationParams& Params)
253 {
254 using namespace UE::MovieScene;
255
256 auto ChannelInterface = InChannel->GetData();
257 if (ChannelInterface.GetTimes().Num() > 1)
258 {
259 int32 StartIndex = 0;
260 int32 EndIndex = 0;
261
262 {
264 StartIndex = Params.Range.GetLowerBound().IsClosed() ? Algo::LowerBound(Times, Params.Range.GetLowerBoundValue()) : 0;
265 EndIndex = Params.Range.GetUpperBound().IsClosed() ? Algo::UpperBound(Times, Params.Range.GetUpperBoundValue()) : Times.Num();
266 }
267
268 for (int32 Index = StartIndex; Index < EndIndex && Index < ChannelInterface.GetTimes().Num(); ++Index)
269 {
270 // Reget times and values as they may be reallocated
272 auto OriginalValue = ChannelInterface.GetValues()[Index];
273
274 // If the channel evaluates the same with this key removed, we can leave it out
275 ChannelInterface.RemoveKey(Index);
276 if (ValueExistsAtTime(InChannel, Time, OriginalValue))
277 {
278 Index--;
279 }
280 else
281 {
282 ChannelInterface.AddKey(Time, MoveTemp(OriginalValue));
283 }
284 }
285 }
286 }
287
288 template<typename ValueType>
289 void InvertValue(ValueType& InOutValue){}
290
291 template<typename ValueType>
292 void ReciprocalValue(ValueType& InOutValue) {}
293
294 template<typename ValueType>
296
297} // namespace MovieScene
298} // namespace UE
@ INDEX_NONE
Definition CoreMiscDefines.h:150
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
EMovieSceneKeyInterpolation
Definition KeyParams.h:12
@ Num
Definition MetalRHIPrivate.h:234
#define KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:67
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition MovieScene.Build.cs:6
Definition ArrayView.h:139
UE_FORCEINLINE_HINT constexpr SizeType Num() const
Definition ArrayView.h:380
Definition EnableIf.h:20
Definition Range.h:50
static UE_FORCEINLINE_HINT TRange All()
Definition Range.h:636
Definition MovieSceneSection.h:243
UE_REWRITE auto LowerBound(const RangeType &Range, const ValueType &Value, SortPredicateType SortPredicate) -> decltype(GetNum(Range))
Definition BinarySearch.h:92
UE_REWRITE auto UpperBound(const RangeType &Range, const ValueType &Value, SortPredicateType SortPredicate) -> decltype(GetNum(Range))
Definition BinarySearch.h:133
Definition ConstraintsManager.h:14
bool EvaluateChannel(const ChannelType *InChannel, FFrameTime InTime, ValueType &OutValue)
Definition MovieSceneChannelTraits.h:82
void InvertValue(ValueType &InOutValue)
Definition MovieSceneChannelTraits.h:289
void ReciprocalValue(ValueType &InOutValue)
Definition MovieSceneChannelTraits.h:292
FKeyHandle AddKeyToChannel(ChannelType *InChannel, FFrameNumber InTime, ValueType &&Value, EMovieSceneKeyInterpolation Interpolation)
Definition MovieSceneChannelTraits.h:157
EMovieSceneKeyInterpolation GetInterpolationMode(ChannelType *InChannel, const FFrameNumber &InTime, EMovieSceneKeyInterpolation DefaultInterpolationMode)
Definition MovieSceneChannelTraits.h:143
TEnableIf< TGetMovieSceneChannelTraits< ChannelType >::SupportsDefaults >::Type RemoveChannelDefault(ChannelType *Channel)
Definition MovieSceneChannelTraits.h:214
void Optimize(ChannelType *InChannel, const FKeyDataOptimizationParams &Params)
Definition MovieSceneChannelTraits.h:252
bool ValueExistsAtTime(const ChannelType *InChannel, FFrameNumber InTime, const ValueType &InValue)
Definition MovieSceneChannelTraits.h:187
TEnableIf< TGetMovieSceneChannelTraits< ChannelType >::SupportsDefaults, bool >::Type GetChannelDefault(ChannelType *Channel, ValueType &OutDefaultValue)
Definition MovieSceneChannelTraits.h:229
bool GetKeyValue(ChannelType *InChannel, FKeyHandle InKeyHandle, ValueType &OutValue)
Definition MovieSceneChannelTraits.h:127
bool AssignValue(ChannelType *InChannel, FKeyHandle InKeyHandle, ValueType &&InValue)
Definition MovieSceneChannelTraits.h:111
TEnableIf< TGetMovieSceneChannelTraits< ChannelType >::SupportsDefaults >::Type SetChannelDefault(ChannelType *Channel, ValueType &&DefaultValue)
Definition MovieSceneChannelTraits.h:200
void TransformValue(ValueType &InOutValue, const FMovieSceneChannelTraitsTransform< ValueType > &Transform)
Definition MovieSceneChannelTraits.h:295
Definition AdvancedWidgetsModule.cpp:13
U16 Index
Definition radfft.cpp:71
Definition FrameNumber.h:18
Definition FrameRate.h:21
Definition FrameTime.h:16
Definition MovieSceneChannelTraits.h:20
TRange< FFrameNumber > Range
Definition MovieSceneChannelTraits.h:28
float Tolerance
Definition MovieSceneChannelTraits.h:22
bool bAutoSetInterpolation
Definition MovieSceneChannelTraits.h:25
FFrameRate DisplayRate
Definition MovieSceneChannelTraits.h:31
Definition KeyHandle.h:15
static ENGINE_API FKeyHandle Invalid()
Definition KeyHandle.cpp:37
Definition MovieSceneChannelTraits.h:52
ValueType Pivot
Definition MovieSceneChannelTraits.h:55
ValueType Offset
Definition MovieSceneChannelTraits.h:53
ValueType Scale
Definition MovieSceneChannelTraits.h:54
Definition MovieSceneChannelTraits.h:39
@ SupportsDefaults
Definition MovieSceneChannelTraits.h:40
Definition MovieSceneChannelTraits.h:63