#pragma once #include "CoreMinimal.h" #include "Toolkits/AssetEditorToolkit.h" #include "EditorUndoClient.h" class USkeletalMesh; class SDockTab; class IDetailsView; class SBorder; /** * Dismemberment System Editor * Provides real-time boolean cutting and multi-layer system editing functionality */ class FDismembermentEditor : public FAssetEditorToolkit, public FEditorUndoClient { public: FDismembermentEditor(); virtual ~FDismembermentEditor(); void InitDismembermentEditor(const EToolkitMode::Type Mode, const TSharedPtr& InitToolkitHost, USkeletalMesh* InSkeletalMesh); virtual FName GetToolkitFName() const override; virtual FText GetBaseToolkitName() const override; virtual FString GetWorldCentricTabPrefix() const override; virtual FLinearColor GetWorldCentricTabColorScale() const override; virtual void PostUndo(bool bSuccess) override; virtual void PostRedo(bool bSuccess) override; private: void CreateEditorLayout(); void CreateEditorToolbar(); void RegisterTabSpawners(const TSharedRef& InTabManager); void UnregisterTabSpawners(const TSharedRef& InTabManager); TSharedRef SpawnTab_Viewport(const FSpawnTabArgs& Args); TSharedRef SpawnTab_Details(const FSpawnTabArgs& Args); TSharedRef SpawnTab_LayerSystem(const FSpawnTabArgs& Args); TSharedRef SpawnTab_PhysicsSettings(const FSpawnTabArgs& Args); void PerformBooleanCut(); void AddNewLayer(); void SaveEdits(); void PreviewEffects(); private: USkeletalMesh* SkeletalMesh; TSharedPtr ViewportWidget; TSharedPtr DetailsWidget; TSharedPtr LayerSystemWidget; TSharedPtr PhysicsSettingsWidget; static const FName ViewportTabId; static const FName DetailsTabId; static const FName LayerSystemTabId; static const FName PhysicsSettingsTabId; };