123 lines
4.6 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "ProjectFishEditor.h"
#include "AssetTypeActions_Base.h"
#include "DataTableRowSelectorCustomization.h"
#include "AssetActions/BagShapeAssetTypeAction.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "ProjectFish/DataAsset/BagShapeAsset.h"
#include "Thimbnail/BagShapeAssetThumbnailRenderer.h"
#define LOCTEXT_NAMESPACE "FProjectFishEditorModule"
void FProjectFishEditorModule::StartupModule()
{
FPropertyEditorModule& PropModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropModule.RegisterCustomPropertyTypeLayout("SkillDataConfig"
, FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FDataTableRowSelectorCustomization::MakeInstance));
//注册资源类型编辑器
RegisterAssetTypeActions();
}
void FProjectFishEditorModule::ShutdownModule()
{
if ( FPropertyEditorModule* PropModule = FModuleManager::GetModulePtr<FPropertyEditorModule>("PropertyEditor"))
{
PropModule->UnregisterCustomPropertyTypeLayout("SkillDataConfig");
}
//注销资源类型编辑器
UnregisterAssetTypeActions();
}
void FProjectFishEditorModule::RegisterAssetTypeActions()
{
FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools");
IAssetTools& AssetTools = AssetToolsModule.Get();
//注册自定义的菜单
EAssetTypeCategories::Type BoxShapeAssetCategory = AssetTools.RegisterAdvancedAssetCategory(FName(TEXT("Bag")), FText::FromString(TEXT("BagSystem")));
//BagShape
TSharedRef<FAssetTypeActions_Base> BagShapeAction = MakeShareable(new FBagShapeAssetTypeAction(BoxShapeAssetCategory));
AssetTools.RegisterAssetTypeActions(BagShapeAction);
CreatedAssetTypeActions.Add(BagShapeAction);
RegisterThumbnailRenderers();
}
void FProjectFishEditorModule::UnregisterAssetTypeActions()
{
if (FModuleManager::Get().IsModuleLoaded("AssetTools"))
{
FAssetToolsModule& AssetToolsModule = FModuleManager::LoadModuleChecked<FAssetToolsModule>("AssetTools");
IAssetTools& AssetTools = AssetToolsModule.Get();
for (auto action : CreatedAssetTypeActions)
{
AssetTools.UnregisterAssetTypeActions(action.ToSharedRef());
}
}
CreatedAssetTypeActions.Empty();
UnregisterThumbnailRenderers();
}
void FProjectFishEditorModule::RegisterThumbnailRenderers()
{
UThumbnailManager::Get().RegisterCustomRenderer(UBagShapeAsset::StaticClass(), UBagShapeAssetThumbnailRenderer::StaticClass());
RefreshExistingAssetThumbnails();
}
void FProjectFishEditorModule::UnregisterThumbnailRenderers()
{
if (UObjectInitialized())
{
UThumbnailManager::Get().UnregisterCustomRenderer(UBagShapeAsset::StaticClass());
}
}
void FProjectFishEditorModule::RefreshExistingAssetThumbnails()
{
// 延迟执行以确保所有模块都已加载
FTSTicker::GetCoreTicker().AddTicker(FTickerDelegate::CreateLambda([](float DeltaTime) -> bool
{
if (FModuleManager::Get().IsModuleLoaded("AssetRegistry"))
{
FAssetRegistryModule& AssetRegistryModule = FModuleManager::GetModuleChecked<FAssetRegistryModule>("AssetRegistry");
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
// 查找所有BagShapeAsset资产
TArray<FAssetData> BagShapeAssetList;
AssetRegistry.GetAssetsByClass(UBagShapeAsset::StaticClass()->GetClassPathName(), BagShapeAssetList);
// 查找所有BagClass资产
TArray<FAssetData> BagClassAssetList;
//AssetRegistry.GetAssetsByClass(UBagClass::StaticClass()->GetClassPathName(), BagClassAssetList);
// 合并资产列表
TArray<FAssetData> AllAssets;
AllAssets.Append(BagShapeAssetList);
AllAssets.Append(BagClassAssetList);
// 刷新每个资产的缩略图
UThumbnailManager& ThumbnailManager = UThumbnailManager::Get();
for (const FAssetData& AssetData : AllAssets)
{
if (UObject* Asset = AssetData.GetAsset())
{
// 通知系统资源已修改
if (GEditor)
{
GEditor->GetEditorSubsystem<UImportSubsystem>()->BroadcastAssetPostImport(nullptr, Asset);
}
}
}
}
// 只执行一次返回false停止ticker
return false;
}), 1.0f); // 1秒延迟
}
#undef LOCTEXT_NAMESPACE
IMPLEMENT_MODULE(FProjectFishEditorModule, ProjectFishEditor)