UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
MovieSceneSectionChannelOverrideRegistry.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4#include "Containers/Map.h"
5#include "CoreMinimal.h"
6
12#include "HAL/Platform.h"
13#include "MovieSceneSection.h"
14#include "UObject/Object.h"
17
18#include "MovieSceneSectionChannelOverrideRegistry.generated.h"
19
23struct FFrameNumber;
27template <typename ElementType> class TRange;
28template <typename T> struct TObjectPtr;
29
30namespace UE
31{
32namespace MovieScene
33{
34 struct FEntityImportParams;
35 struct FImportedEntity;
36}
37}
38
42UCLASS(MinimalAPI)
44{
46
47public:
49
56
62 MOVIESCENE_API bool ContainsChannel(FName ChannelName) const;
63
68 MOVIESCENE_API int32 NumChannels() const;
69
75 MOVIESCENE_API UMovieSceneChannelOverrideContainer* GetChannel(FName ChannelName) const;
76
80 template<typename ChannelContainerType>
92
97 MOVIESCENE_API void RemoveChannel(FName ChannelName);
98
103
108
109#if WITH_EDITOR
110
115
119 MOVIESCENE_API virtual void PostEditUndo() override;
120
121#endif
122
123private:
124
126 UPROPERTY()
128};
129
130namespace UE
131{
132namespace MovieScene
133{
134
136inline bool IsChannelOverriden(const UMovieSceneSectionChannelOverrideRegistry* OverrideRegistry, FName ChannelName)
137{
138 return OverrideRegistry && OverrideRegistry->ContainsChannel(ChannelName);
139}
140
142inline UMovieSceneChannelOverrideContainer* GetChannelOverride(const UMovieSceneSectionChannelOverrideRegistry* OverrideRegistry, FName ChannelName)
143{
144 return OverrideRegistry ? OverrideRegistry->GetChannel(ChannelName) : nullptr;
145}
146
147#if WITH_EDITOR
148
153template<typename ChannelType, typename ExtendedEditorDataType>
154void AddChannelProxy(
156 FName ChannelName, ChannelType& DefaultChannel,
158{
159 UMovieSceneChannelOverrideContainer* OverrideContainer = GetChannelOverride(OverrideRegistry, ChannelName);
161 {
162 // Because the extended editor data is a strongly-typed templated parameter, we can't pass it through the
163 // virtual methods of the channel containers. So channel containers will add an entry with default extended
164 // editor data, and we set the correct data immediately after.
165 FMovieSceneChannelHandle ChannelHandle = OverrideContainer->AddChannelProxy(ChannelName, ProxyData, InMetaData);
166 ProxyData.SetExtendedEditorData<ChannelType>(ChannelHandle, InExtendedEditorData);
167 }
168 else
169 {
171 }
172}
173
177template<typename ChannelType, typename ExtendedEditorDataType>
179 const UMovieSceneSectionChannelOverrideRegistry* OverrideRegistry,
180 ChannelType& DefaultChannel,
182{
183 // When there's only one channel, it usually has no name. Create a channel proxy by hand if
184 // you need a named singled channel.
185 const FName ChannelName(NAME_None);
187 UMovieSceneChannelOverrideContainer* OverrideContainer = GetChannelOverride(OverrideRegistry, ChannelName);
189 {
190 FMovieSceneChannelHandle ChannelHandle = OverrideContainer->AddChannelProxy(ChannelName, ProxyData, InMetaData);
191 ProxyData.SetExtendedEditorData<ChannelType>(ChannelHandle, InExtendedEditorData);
192 }
193 else
194 {
196 }
198}
199
200#else
201
205template<typename ChannelType>
206void AddChannelProxy(
208 FName ChannelName, ChannelType& DefaultChannel)
209{
210 UMovieSceneChannelOverrideContainer* OverrideContainer = GetChannelOverride(OverrideRegistry, ChannelName);
212 {
213 OverrideContainer->AddChannelProxy(ChannelName, ProxyData);
214 }
215 else
216 {
217 ProxyData.Add(DefaultChannel);
218 }
219}
220
224template<typename ChannelType>
226 const UMovieSceneSectionChannelOverrideRegistry* OverrideRegistry,
227 ChannelType& DefaultChannel)
228{
229 const FName ChannelName(NAME_None);
231 UMovieSceneChannelOverrideContainer* OverrideContainer = GetChannelOverride(OverrideRegistry, ChannelName);
233 {
234 OverrideContainer->AddChannelProxy(ChannelName, ProxyData);
235 }
236 else
237 {
238 ProxyData.Add(DefaultChannel);
239 }
241}
242
243#endif
244
245} // namespace MovieScene
246} // namespace UE
247
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 UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition NameTypes.h:617
Definition MovieScene.Build.cs:6
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition Range.h:50
Definition SharedPointer.h:692
Definition MovieSceneChannelOverrideContainer.h:46
Definition MovieSceneEntitySystemLinker.h:113
Definition MovieScenePropertyTrack.h:30
Definition MovieSceneSectionChannelOverrideRegistry.h:44
MOVIESCENE_API UMovieSceneChannelOverrideContainer * GetChannel(FName ChannelName) const
Definition MovieSceneSectionChannelOverrideRegistry.cpp:33
MOVIESCENE_API bool ContainsChannel(FName ChannelName) const
Definition MovieSceneSectionChannelOverrideRegistry.cpp:23
void GetChannels(TArray< ChannelContainerType * > &OutChannels) const
Definition MovieSceneSectionChannelOverrideRegistry.h:81
Definition MovieSceneSection.h:243
Definition Object.h:95
Definition AdvancedWidgetsModule.cpp:13
Definition FrameNumber.h:18
Definition MovieSceneChannelHandle.h:20
Definition MovieSceneChannelProxy.h:87
void Add(ChannelType &InChannel)
Definition MovieSceneChannelProxy.h:170
Definition MovieSceneChannel.h:112
Definition MovieSceneEvaluationField.h:328
Definition MovieSceneEvaluationField.h:109
Definition ObjectPtr.h:488
Definition Tuple.h:652
Definition MovieSceneChannelOverrideContainer.h:33
Definition IMovieSceneEntityProvider.h:93
Definition IMovieSceneEntityProvider.h:47