// 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" 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& 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) {}; }; // Interface to allow external modules to register additional key struct instanced property type customizations class IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer { public: virtual void RegisterKeyStructInstancedPropertyTypeCustomization(TSharedRef StructureDetailsView, TWeakObjectPtr WeakOwningSection) {}; }; /** * Implements the MovieSceneTools module. */ class MOVIESCENETOOLS_API FMovieSceneToolsModule : public IMovieSceneTools { public: static inline FMovieSceneToolsModule& Get() { return FModuleManager::LoadModuleChecked< FMovieSceneToolsModule >("MovieSceneTools"); } // IModuleInterface interface virtual void StartupModule() override; virtual void ShutdownModule() override; void RegisterAnimationBakeHelper(IMovieSceneToolsAnimationBakeHelper* BakeHelper); void UnregisterAnimationBakeHelper(IMovieSceneToolsAnimationBakeHelper* BakeHelper); const TArray& GetAnimationBakeHelpers() { return BakeHelpers; } void RegisterTakeData(IMovieSceneToolsTakeData*); void UnregisterTakeData(IMovieSceneToolsTakeData*); bool GatherTakes(const UMovieSceneSection* Section, TArray& AssetData, uint32& OutCurrentTakeNumber); bool GetTakeNumber(const UMovieSceneSection* Section, FAssetData AssetData, uint32& OutTakeNumber); bool SetTakeNumber(const UMovieSceneSection* Section, uint32 InTakeNumber); void RegisterTrackImporter(IMovieSceneToolsTrackImporter*); void UnregisterTrackImporter(IMovieSceneToolsTrackImporter*); bool ImportAnimatedProperty(const FString& InPropertyName, const FRichCurve& InCurve, FGuid InBinding, UMovieScene* InMovieScene); bool ImportStringProperty(const FString& InPropertyName, const FString& InPropertyValue, FGuid InBinding, UMovieScene* InMovieScene); void RegisterKeyStructInstancedPropertyTypeCustomizer(IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer*); void UnregisterKeyStructInstancedPropertyTypeCustomizer(IMovieSceneToolsKeyStructInstancedPropertyTypeCustomizer*); // Called By SKeyEditInterface to allow external modules to add key struct instanced property type customizations void CustomizeKeyStructInstancedPropertyTypes(TSharedRef StructureDetailsView, TWeakObjectPtr Section); private: void RegisterClipboardConversions(); static void FixupPayloadParameterNameForSection(UMovieSceneEventSectionBase* Section, UK2Node* InNode, FName OldPinName, FName NewPinName); static void FixupPayloadParameterNameForDynamicBinding(UMovieScene* MovieScene, UK2Node* InNode, FName OldPinName, FName NewPinName); static bool UpgradeLegacyEventEndpointForSection(UMovieSceneEventSectionBase* Section); static void PostDuplicateEventSection(UMovieSceneEventSectionBase* Section); static void RemoveForCookEventSection(UMovieSceneEventSectionBase* Section); static bool IsTrackClassAllowed(UClass* InClass); static bool IsCustomBindingClassAllowed(UClass* InClass); static bool IsConditionClassAllowed(const UClass* InClass); static void PostDuplicateEvent(ULevelSequence* LevelSequence); static void FixupDynamicBindingsEvent(ULevelSequence* LevelSequence); static void FixupPayloadParameterNameForDirectorBlueprintCondition(UMovieScene* MovieScene, UK2Node* InNode, FName OldPinName, FName NewPinName); private: /** Registered delegate handles */ FDelegateHandle BoolPropertyTrackCreateEditorHandle; FDelegateHandle BytePropertyTrackCreateEditorHandle; FDelegateHandle ColorPropertyTrackCreateEditorHandle; FDelegateHandle FloatPropertyTrackCreateEditorHandle; FDelegateHandle DoublePropertyTrackCreateEditorHandle; FDelegateHandle IntegerPropertyTrackCreateEditorHandle; FDelegateHandle FloatVectorPropertyTrackCreateEditorHandle; FDelegateHandle DoubleVectorPropertyTrackCreateEditorHandle; FDelegateHandle TransformPropertyTrackCreateEditorHandle; FDelegateHandle EulerTransformPropertyTrackCreateEditorHandle; FDelegateHandle RotatorPropertyTrackCreateEditorHandle; FDelegateHandle VisibilityPropertyTrackCreateEditorHandle; FDelegateHandle ActorReferencePropertyTrackCreateEditorHandle; FDelegateHandle StringPropertyTrackCreateEditorHandle; 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 CameraCutTrackModelHandle; FDelegateHandle CinematicShotTrackModelHandle; FDelegateHandle BindingLifetimeTrackModelHandle; FDelegateHandle TimeWarpTrackModelHandle; FDelegateHandle GenerateEventEntryPointsHandle; FDelegateHandle FixupDynamicBindingPayloadParameterNameHandle; FDelegateHandle FixupEventSectionPayloadParameterNameHandle; FDelegateHandle UpgradeLegacyEventEndpointHandle; FDelegateHandle FixupDynamicBindingsHandle; FDelegateHandle FixupDirectorBlueprintConditionPayloadParameterNameHandle; FDelegateHandle OnObjectsReplacedHandle; TArray TakeDatas; TArray TrackImporters; TArray BakeHelpers; TArray KeyStructInstancedPropertyTypeCustomizers; };