UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneDoubleChannel.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "Containers/Array.h"
9#include "CoreTypes.h"
10#include "Curves/KeyHandle.h"
11#include "Curves/RealCurve.h"
12#include "Curves/RichCurve.h"
13#include "HAL/PlatformCrt.h"
14#include "KeyParams.h"
15#include "Math/Range.h"
16#include "Misc/FrameNumber.h"
17#include "Misc/FrameRate.h"
18#include "Misc/FrameTime.h"
19#include "Misc/Optional.h"
20#include "MovieSceneChannel.h"
24#include "Templates/Tuple.h"
26#include "UObject/Class.h"
28#include "Misc/EnumClassFlags.h"
29
30#include "MovieSceneDoubleChannel.generated.h"
31
32class FArchive;
33struct FPropertyTag;
35template<typename> struct TMovieSceneCurveChannelImpl;
36template <typename T> struct TIsPODType;
37
38namespace UE::MovieScene
39{
40 enum class EInverseEvaluateFlags : uint8;
41 struct FPiecewiseCurve;
42 MOVIESCENE_API void OnRemapChannelKeyTime(const FMovieSceneChannel* Channel, const IRetimingInterface& Retimer, FFrameNumber PreviousTime, FFrameNumber CurrentTime, FMovieSceneDoubleValue& InOutValue);
43}
45{
46 struct FCachedInterpolation;
47 struct FInterpolationExtents;
48}
49
50
51USTRUCT()
53{
55
57 : Value(0.f), InterpMode(RCIM_Cubic), TangentMode(RCTM_Auto), PaddingByte(0)
58 {}
59
61 : Value(InValue), InterpMode(RCIM_Cubic), TangentMode(RCTM_Auto), PaddingByte(0)
62 {}
63
64 bool Serialize(FArchive& Ar);
65 MOVIESCENE_API bool operator==(const FMovieSceneDoubleValue& Other) const;
68 {
69 P.Serialize(Ar);
70 return Ar;
71 }
72
73 UPROPERTY(EditAnywhere, Category = "Key")
75
76 UPROPERTY(EditAnywhere, Category = "Key")
78
79 UPROPERTY(EditAnywhere, Category = "Key")
81
82 UPROPERTY(EditAnywhere, Category = "Key")
84
91 UPROPERTY()
92 uint8 PaddingByte;
93
94 // This is required because TMovieSceneCurveChannelImpl<ChannelType>::Serialize dumps us as a byte array so we need padding to be initialized to avoid indeterminism in the cooked build
95 uint8 UnserializedPaddingBytes[1] = { 0 };
96};
97static_assert(
98 sizeof(FMovieSceneDoubleValue) ==
100 "Adjust padding size to avoid cooked build indeterminism with uninitialized padded data");
101
102template<>
104{
105 enum { Value = true };
106};
107
108
109template<>
121
122
123USTRUCT()
125{
127
130
132 : PreInfinityExtrap(RCCE_Constant)
133 , PostInfinityExtrap(RCCE_Constant)
134 , DefaultValue(0.0)
135 , bHasDefaultValue(false)
136#if WITH_EDITORONLY_DATA
137 , bShowCurve(false)
138#endif
139 {}
140
142
149 {
150 return TMovieSceneChannelData<FMovieSceneDoubleValue>(&Times, &Values, this, &KeyHandles);
151 }
152
162
167 {
168 return Times;
169 }
170
175 {
176 return Values;
177 }
178
187 MOVIESCENE_API bool Evaluate(FFrameTime InTime, double& OutValue) const;
188
192 MOVIESCENE_API bool Evaluate(FFrameTime InTime, float& OutValue) const;
193
198
199
208
209
219
220
230 MOVIESCENE_API bool InverseEvaluateBetween(double Value, FFrameTime StartTime, FFrameTime EndTime, const TFunctionRef<bool(FFrameTime)>& Visitor) const;
231
232
237 MOVIESCENE_API int32 GetCycleCount(FFrameTime InTime) const;
238
239
244
245public:
250
255public:
256
257 // ~ FMovieSceneChannel Interface
262 MOVIESCENE_API virtual void DeleteKeys(TArrayView<const FKeyHandle> InHandles) override;
263 MOVIESCENE_API virtual void DeleteKeysFrom(FFrameNumber InTime, bool bDeleteKeysBefore) override;
264 MOVIESCENE_API virtual void RemapTimes(const UE::MovieScene::IRetimingInterface& Retimer) override;
265 MOVIESCENE_API virtual TRange<FFrameNumber> ComputeEffectiveRange() const override;
266 MOVIESCENE_API virtual int32 GetNumKeys() const override;
267 MOVIESCENE_API virtual void Reset() override;
268 MOVIESCENE_API virtual void Offset(FFrameNumber DeltaPosition) override;
269 MOVIESCENE_API virtual void Optimize(const FKeyDataOptimizationParams& InParameters) override;
270 MOVIESCENE_API virtual void ClearDefault() override;
271 MOVIESCENE_API virtual void PostEditChange() override;
272 MOVIESCENE_API virtual FKeyHandle GetHandle(int32 Index) override;
273 MOVIESCENE_API virtual int32 GetIndex(FKeyHandle Handle) override;
274
275public:
276
280 inline bool HasAnyData() const
281 {
282 return Times.Num() != 0 || bHasDefaultValue == true;
283 }
284
290 inline void SetDefault(double InDefaultValue)
291 {
292 bHasDefaultValue = true;
293 DefaultValue = InDefaultValue;
294 }
295
302 {
303 return bHasDefaultValue ? TOptional<double>(DefaultValue) : TOptional<double>();
304 }
305
309 inline void RemoveDefault()
310 {
311 bHasDefaultValue = false;
312 }
313
314public:
315
318 {
319 Me.Serialize(Ar);
320 return Ar;
321 }
322
324 MOVIESCENE_API bool SerializeFromMismatchedTag(const FPropertyTag& Tag, FStructuredArchive::FSlot Slot);
325
326 MOVIESCENE_API int32 AddConstantKey(FFrameNumber InTime, double InValue);
327
328 MOVIESCENE_API int32 AddLinearKey(FFrameNumber InTime, double InValue);
329
331
332 MOVIESCENE_API void AutoSetTangents(float Tension = 0.f);
333
338
349 MOVIESCENE_API void PopulateCurvePoints(double StartTimeSeconds, double EndTimeSeconds, double TimeThreshold, double ValueThreshold, FFrameRate TickResolution, TArray<TTuple<double, double>>& InOutPoints) const;
350
358
360
361#if WITH_EDITORONLY_DATA
362 /* Get whether to show this curve in the UI */
363 MOVIESCENE_API bool GetShowCurve() const;
364 /* Set whether to show this curve in the UI */
366#endif
367
368public:
369
371 UPROPERTY()
373
375 UPROPERTY()
377
378private:
379
380 UPROPERTY(meta=(KeyTimes))
381 TArray<FFrameNumber> Times;
382
383 UPROPERTY(meta=(KeyValues))
385
386 UPROPERTY()
387 double DefaultValue;
388
389 UPROPERTY()
390 bool bHasDefaultValue;
391
394 FMovieSceneKeyHandleMap KeyHandles;
395
396 UPROPERTY()
398
399#if WITH_EDITORONLY_DATA
400
401 UPROPERTY()
403
404#endif
405
408};
409
410template<>
420
421template<>
423{
424#if WITH_EDITOR
425
428
429#endif
430};
431
436
441
442
447
448
460
461
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
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
MOVIESCENE_API EMovieSceneKeyInterpolation GetInterpolationMode(FMovieSceneDoubleChannel *InChannel, const FFrameNumber &InTime, EMovieSceneKeyInterpolation DefaultInterpolationMode)
Definition MovieSceneDoubleChannel.cpp:661
MOVIESCENE_API void Dilate(FMovieSceneDoubleChannel *InChannel, FFrameNumber Origin, double DilationFactor)
Definition MovieSceneDoubleChannel.cpp:671
MOVIESCENE_API void TransformValue(double &InOutValue, const FMovieSceneChannelTraitsTransform< double > &Transform)
Definition MovieSceneDoubleChannel.cpp:716
MOVIESCENE_API void AssignValue(FMovieSceneDoubleChannel *InChannel, FKeyHandle InKeyHandle, double InValue)
Definition MovieSceneDoubleChannel.cpp:691
MOVIESCENE_API bool ValueExistsAtTime(const FMovieSceneDoubleChannel *InChannel, FFrameNumber InFrameNumber, const FMovieSceneDoubleValue &InValue)
Definition MovieSceneDoubleChannel.cpp:676
MOVIESCENE_API void InvertValue(double &InOutValue)
Definition MovieSceneDoubleChannel.cpp:701
MOVIESCENE_API void ReciprocalValue(double &InOutValue)
Definition MovieSceneDoubleChannel.cpp:706
MOVIESCENE_API FKeyHandle AddKeyToChannel(FMovieSceneDoubleChannel *Channel, FFrameNumber InFrameNumber, double InValue, EMovieSceneKeyInterpolation Interpolation)
Definition MovieSceneDoubleChannel.cpp:666
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
EPropertyObjectReferenceType
Definition ObjectMacros.h:533
ERichCurveExtrapolation
Definition RealCurve.h:27
ERichCurveInterpMode
Definition RealCurve.h:13
ERichCurveTangentMode
Definition RichCurve.h:16
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Archive.h:1208
Definition StructuredArchiveSlots.h:52
Definition ArrayView.h:139
Definition Array.h:670
Definition EnumAsByte.h:22
Definition AssetRegistryState.h:50
Definition Range.h:50
Definition MovieSceneCurveChannelImpl.h:17
Definition ConstraintsManager.h:14
EInverseEvaluateFlags
Definition MovieSceneTransformTypes.h:17
void OnRemapChannelKeyTime(const FMovieSceneChannel *Channel, const IRetimingInterface &Retimer, FFrameNumber PreviousTime, FFrameNumber CurrentTime, FMovieSceneDoubleValue &InOutValue)
Definition MovieSceneDoubleChannel.cpp:26
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition FrameNumber.h:18
Definition FrameRate.h:21
Definition FrameTime.h:16
Definition MovieSceneChannelTraits.h:20
Definition KeyHandle.h:15
Definition MovieSceneChannelTraits.h:52
Definition MovieSceneChannel.h:112
Definition MovieSceneDoubleChannel.h:125
bool HasAnyData() const
Definition MovieSceneDoubleChannel.h:280
friend FArchive & operator<<(FArchive &Ar, FMovieSceneDoubleChannel &Me)
Definition MovieSceneDoubleChannel.h:317
MOVIESCENE_API bool Serialize(FArchive &Ar)
Definition MovieSceneDoubleChannel.cpp:761
TMovieSceneChannelData< const FMovieSceneDoubleValue > GetData() const
Definition MovieSceneDoubleChannel.h:158
TArrayView< const FFrameNumber > GetTimes() const
Definition MovieSceneDoubleChannel.h:166
TArrayView< const FMovieSceneDoubleValue > GetValues() const
Definition MovieSceneDoubleChannel.h:174
TOptional< double > GetDefault() const
Definition MovieSceneDoubleChannel.h:301
void SetTickResolution(FFrameRate InTickSolution)
Definition MovieSceneDoubleChannel.h:337
TMovieSceneChannelData< FMovieSceneDoubleValue > GetData()
Definition MovieSceneDoubleChannel.h:148
void RemoveDefault()
Definition MovieSceneDoubleChannel.h:309
void SetDefault(double InDefaultValue)
Definition MovieSceneDoubleChannel.h:290
double CurveValueType
Definition MovieSceneDoubleChannel.h:128
FFrameRate GetTickResolution() const
Definition MovieSceneDoubleChannel.h:335
Definition MovieSceneDoubleChannel.h:53
FMovieSceneDoubleValue(double InValue)
Definition MovieSceneDoubleChannel.h:60
friend FArchive & operator<<(FArchive &Ar, FMovieSceneDoubleValue &P)
Definition MovieSceneDoubleChannel.h:67
TEnumAsByte< ERichCurveTangentMode > TangentMode
Definition MovieSceneDoubleChannel.h:83
uint8 UnserializedPaddingBytes[1]
Definition MovieSceneDoubleChannel.h:95
double Value
Definition MovieSceneDoubleChannel.h:74
FMovieSceneTangentData Tangent
Definition MovieSceneDoubleChannel.h:77
uint8 PaddingByte
Definition MovieSceneDoubleChannel.h:92
TEnumAsByte< ERichCurveInterpMode > InterpMode
Definition MovieSceneDoubleChannel.h:80
Definition MovieSceneChannelData.h:37
Definition MovieSceneCurveChannelCommon.h:26
Definition PropertyTag.h:38
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition MovieSceneChannelData.h:259
Definition MovieSceneChannelTraits.h:39
Definition MovieSceneChannelTraits.h:63
Definition MovieSceneCurveChannelImpl.h:25
Definition Optional.h:131
Definition StructOpsTypeTraits.h:11
@ WithStructuredSerializeFromMismatchedTag
Definition StructOpsTypeTraits.h:29
@ WithIdenticalViaEquality
Definition StructOpsTypeTraits.h:18
@ WithCopy
Definition StructOpsTypeTraits.h:17
@ WithSerializer
Definition StructOpsTypeTraits.h:23
static constexpr EPropertyObjectReferenceType WithSerializerObjectReferences
Definition StructOpsTypeTraits.h:41
Definition StructOpsTypeTraits.h:46
Definition Tuple.h:652
Definition MovieScenePiecewiseCurve.h:28
Definition IMovieSceneRetimingInterface.h:18
Definition MovieSceneInterpolation.h:460
Definition MovieSceneInterpolation.h:98