diff --git a/ProjectFish/Source/ProjectFishEditor/Private/AssetActions/BagShapeAssetTypeAction.cpp b/ProjectFish/Source/ProjectFishEditor/Private/AssetActions/BagShapeAssetTypeAction.cpp new file mode 100644 index 0000000..12701c5 --- /dev/null +++ b/ProjectFish/Source/ProjectFishEditor/Private/AssetActions/BagShapeAssetTypeAction.cpp @@ -0,0 +1,24 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "AssetActions/BagShapeAssetTypeAction.h" + +#include "ProjectFish/DataAsset/BagShapeAsset.h" + + +UClass* FBagShapeAssetTypeAction::GetSupportedClass() const +{ + return UBagShapeAsset::StaticClass(); +} + +void FBagShapeAssetTypeAction::OpenAssetEditor(const TArray& InObjects, + TSharedPtr EditWithinLevelEditor) +{ + FAssetTypeActions_Base::OpenAssetEditor(InObjects, EditWithinLevelEditor); +} + + +void FBagShapeAssetTypeAction::GetActions(const TArray& InObjects, struct FToolMenuSection& Section) +{ + FAssetTypeActions_Base::GetActions(InObjects, Section); +} diff --git a/ProjectFish/Source/ProjectFishEditor/Private/ProjectFishEditor.cpp b/ProjectFish/Source/ProjectFishEditor/Private/ProjectFishEditor.cpp index ba9751b..c701c28 100644 --- a/ProjectFish/Source/ProjectFishEditor/Private/ProjectFishEditor.cpp +++ b/ProjectFish/Source/ProjectFishEditor/Private/ProjectFishEditor.cpp @@ -1,6 +1,8 @@ #include "ProjectFishEditor.h" +#include "AssetTypeActions_Base.h" #include "DataTableRowSelectorCustomization.h" +#include "AssetActions/BagShapeAssetTypeAction.h" #define LOCTEXT_NAMESPACE "FProjectFishEditorModule" @@ -9,7 +11,9 @@ void FProjectFishEditorModule::StartupModule() FPropertyEditorModule& PropModule = FModuleManager::LoadModuleChecked("PropertyEditor"); PropModule.RegisterCustomPropertyTypeLayout("SkillDataConfig" , FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDataTableRowSelectorCustomization::MakeInstance)); - + + //注册资源类型编辑器 + RegisterAssetTypeActions(); } void FProjectFishEditorModule::ShutdownModule() @@ -18,6 +22,32 @@ void FProjectFishEditorModule::ShutdownModule() { PropModule->UnregisterCustomPropertyTypeLayout("SkillDataConfig"); } + UnregisterAssetTypeActions(); +} + +void FProjectFishEditorModule::RegisterAssetTypeActions() +{ + FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked("AssetTools"); + IAssetTools& AssetTools = AssetToolsModule.Get(); + + //BagShape + TSharedRef BagShapeAction = MakeShareable(new FBagShapeAssetTypeAction); + AssetTools.RegisterAssetTypeActions(BagShapeAction); + CreatedAssetTypeActions.Add(BagShapeAction); +} + +void FProjectFishEditorModule::UnregisterAssetTypeActions() +{ + if (FModuleManager::Get().IsModuleLoaded("AssetTools")) + { + FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked("AssetTools"); + IAssetTools& AssetTools = AssetToolsModule.Get(); + for (auto action : CreatedAssetTypeActions) + { + AssetTools.UnregisterAssetTypeActions(action.ToSharedRef()); + } + } + CreatedAssetTypeActions.Empty(); } #undef LOCTEXT_NAMESPACE diff --git a/ProjectFish/Source/ProjectFishEditor/ProjectFishEditor.Build.cs b/ProjectFish/Source/ProjectFishEditor/ProjectFishEditor.Build.cs index 1d1f241..7da2baa 100644 --- a/ProjectFish/Source/ProjectFishEditor/ProjectFishEditor.Build.cs +++ b/ProjectFish/Source/ProjectFishEditor/ProjectFishEditor.Build.cs @@ -21,7 +21,9 @@ public class ProjectFishEditor : ModuleRules "Slate", "SlateCore", "ProjectFish", - "InputCore" + "InputCore", + "AssetTools", + "UnrealEd" } ); } diff --git a/ProjectFish/Source/ProjectFishEditor/Public/AssetActions/BagShapeAssetTypeAction.h b/ProjectFish/Source/ProjectFishEditor/Public/AssetActions/BagShapeAssetTypeAction.h new file mode 100644 index 0000000..f7ce20a --- /dev/null +++ b/ProjectFish/Source/ProjectFishEditor/Public/AssetActions/BagShapeAssetTypeAction.h @@ -0,0 +1,23 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "AssetTypeActions_Base.h" + +/** + * + */ +class PROJECTFISHEDITOR_API FBagShapeAssetTypeAction: public FAssetTypeActions_Base +{ +public: + virtual FText GetName() const override {return FText::FromString("Bag Shape");} + virtual FColor GetTypeColor() const override { return FColor(129, 196, 115); } + virtual UClass* GetSupportedClass() const override; + virtual void OpenAssetEditor(const TArray& InObjects, TSharedPtr EditWithinLevelEditor = TSharedPtr()) override; + virtual bool HasActions(const TArray& InObjects) const override {return true;} + virtual uint32 GetCategories() override {return EAssetTypeCategories::Gameplay;} + virtual void GetActions(const TArray& InObjects, struct FToolMenuSection& Section) override; + virtual bool CanFilter() override {return true;} +}; + diff --git a/ProjectFish/Source/ProjectFishEditor/Public/ProjectFishEditor.h b/ProjectFish/Source/ProjectFishEditor/Public/ProjectFishEditor.h index 9669917..341484a 100644 --- a/ProjectFish/Source/ProjectFishEditor/Public/ProjectFishEditor.h +++ b/ProjectFish/Source/ProjectFishEditor/Public/ProjectFishEditor.h @@ -1,6 +1,7 @@ #pragma once #include "CoreMinimal.h" +#include "AssetTypeActions_Base.h" #include "Modules/ModuleManager.h" class FProjectFishEditorModule : public IModuleInterface @@ -8,4 +9,12 @@ class FProjectFishEditorModule : public IModuleInterface public: virtual void StartupModule() override; virtual void ShutdownModule() override; + +private: + //Bagshap 编辑器相关 + void RegisterAssetTypeActions(); + void UnregisterAssetTypeActions(); + + /** Asset type actions */ + TArray> CreatedAssetTypeActions; };