// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. #include "CoreMinimal.h" #include "Modules/ModuleManager.h" #include "Curves/RichCurve.h" #include "ISequencerModule.h" #include "MovieSceneToolsProjectSettingsCustomization.h" #include "TrackEditors/PropertyTrackEditors/BoolPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/BytePropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/ColorPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/FloatPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/IntegerPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/VectorPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/TransformPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/VisibilityPropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/ActorReferencePropertyTrackEditor.h" #include "TrackEditors/PropertyTrackEditors/StringPropertyTrackEditor.h" #include "TrackEditors/TransformTrackEditor.h" #include "TrackEditors/CameraCutTrackEditor.h" #include "TrackEditors/CinematicShotTrackEditor.h" #include "TrackEditors/SlomoTrackEditor.h" #include "TrackEditors/SubTrackEditor.h" #include "TrackEditors/AudioTrackEditor.h" #include "TrackEditors/SkeletalAnimationTrackEditor.h" #include "TrackEditors/ParticleTrackEditor.h" #include "TrackEditors/ParticleParameterTrackEditor.h" #include "TrackEditors/AttachTrackEditor.h" #include "TrackEditors/EventTrackEditor.h" #include "TrackEditors/PathTrackEditor.h" #include "TrackEditors/MaterialTrackEditor.h" #include "TrackEditors/FadeTrackEditor.h" #include "TrackEditors/SpawnTrackEditor.h" #include "TrackEditors/LevelVisibilityTrackEditor.h" #include "TrackEditors/CameraAnimTrackEditor.h" #include "TrackEditors/CameraShakeTrackEditor.h" #include "TrackEditors/MaterialParameterCollectionTrackEditor.h" #include "SequencerClipboardReconciler.h" #include "ClipboardTypes.h" #include "ISettingsModule.h" #include "PropertyEditorModule.h" #include "IMovieSceneTools.h" #include "MovieSceneToolsProjectSettings.h" #define LOCTEXT_NAMESPACE "FMovieSceneToolsModule" /** * Implements the MovieSceneTools module. */ class FMovieSceneToolsModule : public IMovieSceneTools { public: // IModuleInterface interface virtual void StartupModule() override { if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings")) { SettingsModule->RegisterSettings("Project", "Editor", "Level Sequences", LOCTEXT("RuntimeSettingsName", "Level Sequences"), LOCTEXT("RuntimeSettingsDescription", "Configure project settings relating to Level Sequences"), GetMutableDefault() ); } ISequencerModule& SequencerModule = FModuleManager::Get().LoadModuleChecked( "Sequencer" ); // register property track editors BoolPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); BytePropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); ColorPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); FloatPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); IntegerPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); VectorPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); TransformPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); VisibilityPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); ActorReferencePropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); StringPropertyTrackCreateEditorHandle = SequencerModule.RegisterPropertyTrackEditor(); // register specialty track editors AnimationTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FSkeletalAnimationTrackEditor::CreateTrackEditor ) ); AttachTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &F3DAttachTrackEditor::CreateTrackEditor ) ); AudioTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FAudioTrackEditor::CreateTrackEditor ) ); EventTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FEventTrackEditor::CreateTrackEditor ) ); ParticleTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FParticleTrackEditor::CreateTrackEditor ) ); ParticleParameterTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FParticleParameterTrackEditor::CreateTrackEditor ) ); PathTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &F3DPathTrackEditor::CreateTrackEditor ) ); CameraCutTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FCameraCutTrackEditor::CreateTrackEditor ) ); CinematicShotTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FCinematicShotTrackEditor::CreateTrackEditor ) ); SlomoTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FSlomoTrackEditor::CreateTrackEditor ) ); SubTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FSubTrackEditor::CreateTrackEditor ) ); TransformTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &F3DTransformTrackEditor::CreateTrackEditor ) ); ComponentMaterialTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FComponentMaterialTrackEditor::CreateTrackEditor ) ); FadeTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FFadeTrackEditor::CreateTrackEditor ) ); SpawnTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FSpawnTrackEditor::CreateTrackEditor ) ); LevelVisibilityTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor( FOnCreateTrackEditor::CreateStatic( &FLevelVisibilityTrackEditor::CreateTrackEditor ) ); CameraAnimTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor(FOnCreateTrackEditor::CreateStatic(&FCameraAnimTrackEditor::CreateTrackEditor)); CameraShakeTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor(FOnCreateTrackEditor::CreateStatic(&FCameraShakeTrackEditor::CreateTrackEditor)); MPCTrackCreateEditorHandle = SequencerModule.RegisterTrackEditor(FOnCreateTrackEditor::CreateStatic(&FMaterialParameterCollectionTrackEditor::CreateTrackEditor)); RegisterClipboardConversions(); // register details customization FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.RegisterCustomClassLayout("MovieSceneToolsProjectSettings", FOnGetDetailCustomizationInstance::CreateStatic(&FMovieSceneToolsProjectSettingsCustomization::MakeInstance)); } virtual void ShutdownModule() override { if (ISettingsModule* SettingsModule = FModuleManager::GetModulePtr("Settings")) { SettingsModule->UnregisterSettings("Project", "Editor", "Level Sequences"); } if (!FModuleManager::Get().IsModuleLoaded("Sequencer")) { return; } ISequencerModule& SequencerModule = FModuleManager::Get().GetModuleChecked( "Sequencer" ); // unregister property track editors SequencerModule.UnRegisterTrackEditor( BoolPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( BytePropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( ColorPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( FloatPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( IntegerPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( VectorPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( VisibilityPropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( ActorReferencePropertyTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( StringPropertyTrackCreateEditorHandle ); // unregister specialty track editors SequencerModule.UnRegisterTrackEditor( AnimationTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( AttachTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( AudioTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( EventTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( ParticleTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( ParticleParameterTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( PathTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( CameraCutTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( CinematicShotTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( SlomoTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( SubTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( TransformTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( ComponentMaterialTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( FadeTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( SpawnTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( CameraAnimTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( CameraShakeTrackCreateEditorHandle ); SequencerModule.UnRegisterTrackEditor( MPCTrackCreateEditorHandle ); if (FModuleManager::Get().IsModuleLoaded("PropertyEditor")) { FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropertyModule.UnregisterCustomClassLayout("MovieSceneToolsProjectSettings"); } } void RegisterClipboardConversions() { using namespace MovieSceneClipboard; DefineImplicitConversion(); DefineImplicitConversion(); DefineImplicitConversion(); DefineImplicitConversion(); DefineExplicitConversion([](const int32& In) -> FRichCurveKey { return FRichCurveKey(0.f, In); }); DefineExplicitConversion([](const uint8& In) -> FRichCurveKey { return FRichCurveKey(0.f, In); }); DefineExplicitConversion([](const FRichCurveKey& In) -> int32 { return In.Value; }); DefineExplicitConversion([](const FRichCurveKey& In) -> uint8 { return In.Value; }); DefineExplicitConversion([](const FRichCurveKey& In) -> bool { return !!In.Value; }); FSequencerClipboardReconciler::AddTrackAlias("Location.X", "R"); FSequencerClipboardReconciler::AddTrackAlias("Location.Y", "G"); FSequencerClipboardReconciler::AddTrackAlias("Location.Z", "B"); FSequencerClipboardReconciler::AddTrackAlias("Rotation.X", "R"); FSequencerClipboardReconciler::AddTrackAlias("Rotation.Y", "G"); FSequencerClipboardReconciler::AddTrackAlias("Rotation.Z", "B"); FSequencerClipboardReconciler::AddTrackAlias("Scale.X", "R"); FSequencerClipboardReconciler::AddTrackAlias("Scale.Y", "G"); FSequencerClipboardReconciler::AddTrackAlias("Scale.Z", "B"); FSequencerClipboardReconciler::AddTrackAlias("X", "R"); FSequencerClipboardReconciler::AddTrackAlias("Y", "G"); FSequencerClipboardReconciler::AddTrackAlias("Z", "B"); FSequencerClipboardReconciler::AddTrackAlias("W", "A"); } private: /** Registered delegate handles */ FDelegateHandle BoolPropertyTrackCreateEditorHandle; FDelegateHandle BytePropertyTrackCreateEditorHandle; FDelegateHandle ColorPropertyTrackCreateEditorHandle; FDelegateHandle FloatPropertyTrackCreateEditorHandle; FDelegateHandle IntegerPropertyTrackCreateEditorHandle; FDelegateHandle VectorPropertyTrackCreateEditorHandle; FDelegateHandle TransformPropertyTrackCreateEditorHandle; FDelegateHandle VisibilityPropertyTrackCreateEditorHandle; FDelegateHandle ActorReferencePropertyTrackCreateEditorHandle; FDelegateHandle StringPropertyTrackCreateEditorHandle; 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 CameraAnimTrackCreateEditorHandle; FDelegateHandle CameraShakeTrackCreateEditorHandle; FDelegateHandle MPCTrackCreateEditorHandle; }; IMPLEMENT_MODULE( FMovieSceneToolsModule, MovieSceneTools ); #undef LOCTEXT_NAMESPACE