Files
UnrealEngine/Engine/Source/Editor/MovieSceneTools/Public/MovieSceneToolsModule.h
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

180 lines
7.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "Modules/ModuleInterface.h"
#include "Modules/ModuleManager.h"
#include "Misc/Guid.h"
#include "Curves/RichCurve.h"
#include "Containers/UnrealString.h"
#include "IMovieSceneTools.h"
#define UE_API MOVIESCENETOOLS_API
struct FAssetData;
class UK2Node;
class UBlueprint;
class UMovieScene;
class UMovieSceneSection;
class UMovieSceneEventSectionBase;
class IMovieSceneToolsTrackImporter;
class ULevelSequence;
class IStructureDetailsView;
class IMovieSceneToolsTakeData
{
public:
virtual bool GatherTakes(const UMovieSceneSection* Section, TArray<FAssetData>& AssetData, uint32& OutCurrentTakeNumber) = 0;
virtual bool GetTakeNumber(const UMovieSceneSection* Section, FAssetData AssetData, uint32& OutTakeNumber) = 0;
virtual bool SetTakeNumber(const UMovieSceneSection*, uint32 InTakeNumber) = 0;
};
//Interface to get notifications when an animation bake happens in case in needs to run custom code
class IMovieSceneToolsAnimationBakeHelper
{
public:
virtual void StartBaking(UMovieScene* MovieScene) {};
virtual void PreEvaluation(UMovieScene* MovieScene, FFrameNumber Frame) {};
virtual void PostEvaluation(UMovieScene* MovieScene, FFrameNumber Frame) {};
virtual void StopBaking(UMovieScene* MovieScene) {};
};
struct FMovieSceneToolsAnimationBakingWrapper
{
FMovieSceneToolsAnimationBakingWrapper(UMovieScene* InMovieScene);
void Start() const;
void PreEvaluate(const FFrameNumber& Frame) const;
void PostEvaluate(const FFrameNumber& Frame) const;
void Stop() const;
private:
UMovieScene* MovieScene = nullptr;
const TArray<IMovieSceneToolsAnimationBakeHelper*>& BakeHelpers;
};
// Interface to allow external modules to register additional key struct instanced property type customizations
class IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer
{
public:
virtual void RegisterKeyStructInstancedPropertyTypeCustomization(TSharedRef<IStructureDetailsView> StructureDetailsView, TWeakObjectPtr<UMovieSceneSection> WeakOwningSection) {};
};
/**
* Implements the MovieSceneTools module.
*/
class FMovieSceneToolsModule
: public IMovieSceneTools
{
public:
static inline FMovieSceneToolsModule& Get()
{
return FModuleManager::LoadModuleChecked< FMovieSceneToolsModule >("MovieSceneTools");
}
// IModuleInterface interface
UE_API virtual void StartupModule() override;
UE_API virtual void ShutdownModule() override;
UE_API void RegisterAnimationBakeHelper(IMovieSceneToolsAnimationBakeHelper* BakeHelper);
UE_API void UnregisterAnimationBakeHelper(IMovieSceneToolsAnimationBakeHelper* BakeHelper);
const TArray<IMovieSceneToolsAnimationBakeHelper*>& GetAnimationBakeHelpers() { return BakeHelpers; }
UE_API void RegisterTakeData(IMovieSceneToolsTakeData*);
UE_API void UnregisterTakeData(IMovieSceneToolsTakeData*);
UE_API bool GatherTakes(const UMovieSceneSection* Section, TArray<FAssetData>& AssetData, uint32& OutCurrentTakeNumber);
UE_API bool GetTakeNumber(const UMovieSceneSection* Section, FAssetData AssetData, uint32& OutTakeNumber);
UE_API bool SetTakeNumber(const UMovieSceneSection* Section, uint32 InTakeNumber);
UE_API void RegisterTrackImporter(IMovieSceneToolsTrackImporter*);
UE_API void UnregisterTrackImporter(IMovieSceneToolsTrackImporter*);
UE_API bool ImportAnimatedProperty(const FString& InPropertyName, const FRichCurve& InCurve, FGuid InBinding, UMovieScene* InMovieScene);
UE_API bool ImportStringProperty(const FString& InPropertyName, const FString& InPropertyValue, FGuid InBinding, UMovieScene* InMovieScene);
UE_API void RegisterKeyStructInstancedPropertyTypeCustomizer(IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer*);
UE_API void UnregisterKeyStructInstancedPropertyTypeCustomizer(IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer*);
// Called By SKeyEditInterface to allow external modules to add key struct instanced property type customizations
UE_API void CustomizeKeyStructInstancedPropertyTypes(TSharedRef<IStructureDetailsView> StructureDetailsView, TWeakObjectPtr<UMovieSceneSection> Section);
private:
UE_API void RegisterClipboardConversions();
static UE_API void FixupPayloadParameterNameForSection(UMovieSceneEventSectionBase* Section, UK2Node* InNode, FName OldPinName, FName NewPinName);
static UE_API void FixupPayloadParameterNameForDynamicBinding(UMovieScene* MovieScene, UK2Node* InNode, FName OldPinName, FName NewPinName);
static UE_API bool UpgradeLegacyEventEndpointForSection(UMovieSceneEventSectionBase* Section);
static UE_API void PostDuplicateEventSection(UMovieSceneEventSectionBase* Section);
static UE_API void RemoveForCookEventSection(UMovieSceneEventSectionBase* Section);
static UE_API bool IsTrackClassAllowed(UClass* InClass);
static UE_API bool IsCustomBindingClassAllowed(UClass* InClass);
static UE_API bool IsConditionClassAllowed(const UClass* InClass);
static UE_API void PostDuplicateEvent(ULevelSequence* LevelSequence);
static UE_API void FixupDynamicBindingsEvent(ULevelSequence* LevelSequence);
static UE_API void FixupPayloadParameterNameForDirectorBlueprintCondition(UMovieScene* MovieScene, UK2Node* InNode, FName OldPinName, FName NewPinName);
private:
/** Registered delegate handles */
FDelegateHandle BytePropertyTrackCreateEditorHandle;
FDelegateHandle RotatorPropertyTrackCreateEditorHandle;
FDelegateHandle VisibilityPropertyTrackCreateEditorHandle;
FDelegateHandle ActorReferencePropertyTrackCreateEditorHandle;
FDelegateHandle StringPropertyTrackCreateEditorHandle;
FDelegateHandle TextPropertyTrackCreateEditorHandle;
FDelegateHandle ObjectTrackCreateEditorHandle;
FDelegateHandle AnimationTrackCreateEditorHandle;
FDelegateHandle AttachTrackCreateEditorHandle;
FDelegateHandle AudioTrackCreateEditorHandle;
FDelegateHandle EventTrackCreateEditorHandle;
FDelegateHandle ParticleTrackCreateEditorHandle;
FDelegateHandle ParticleParameterTrackCreateEditorHandle;
FDelegateHandle PathTrackCreateEditorHandle;
FDelegateHandle CameraCutTrackCreateEditorHandle;
FDelegateHandle CinematicShotTrackCreateEditorHandle;
FDelegateHandle SlomoTrackCreateEditorHandle;
FDelegateHandle SubTrackCreateEditorHandle;
FDelegateHandle TransformTrackCreateEditorHandle;
FDelegateHandle ComponentMaterialTrackCreateEditorHandle;
FDelegateHandle FadeTrackCreateEditorHandle;
FDelegateHandle SpawnTrackCreateEditorHandle;
FDelegateHandle LevelVisibilityTrackCreateEditorHandle;
FDelegateHandle DataLayerTrackCreateEditorHandle;
FDelegateHandle CameraShakeTrackCreateEditorHandle;
FDelegateHandle MPCTrackCreateEditorHandle;
FDelegateHandle PrimitiveMaterialCreateEditorHandle;
FDelegateHandle CameraShakeSourceShakeCreateEditorHandle;
FDelegateHandle CVarTrackCreateEditorHandle;
FDelegateHandle CustomPrimitiveDataTrackCreateEditorHandle;
FDelegateHandle BindingLifetimeTrackCreateEditorHandle;
FDelegateHandle TimeWarpTrackCreateEditorHandle;
FDelegateHandle RegisteredPropertyTrackCreateEditorHandle;
FDelegateHandle CameraCutTrackModelHandle;
FDelegateHandle CinematicShotTrackModelHandle;
FDelegateHandle BindingLifetimeTrackModelHandle;
FDelegateHandle TimeWarpTrackModelHandle;
FDelegateHandle GenerateEventEntryPointsHandle;
FDelegateHandle FixupDynamicBindingPayloadParameterNameHandle;
FDelegateHandle FixupEventSectionPayloadParameterNameHandle;
FDelegateHandle UpgradeLegacyEventEndpointHandle;
FDelegateHandle FixupDynamicBindingsHandle;
FDelegateHandle FixupDirectorBlueprintConditionPayloadParameterNameHandle;
FDelegateHandle OnObjectsReplacedHandle;
TArray<IMovieSceneToolsTakeData*> TakeDatas;
TArray<IMovieSceneToolsTrackImporter*> TrackImporters;
TArray<IMovieSceneToolsAnimationBakeHelper*> BakeHelpers;
TArray<IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer*> KeyStructInstancedPropertyTypeCustomizers;
};
#undef UE_API