From f31f12d57e89310fd6405a209f1fb18ac6f0efc3 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 5 Oct 2023 11:58:31 +0200 Subject: [PATCH] [ue] Fixes #2368, use the InName provided to FactoryCreateFile for the asset object name. --- .../Private/SpineAtlasImportFactory.cpp | 13 ++++---- .../Private/SpineEditorPlugin.cpp | 30 +++++++++++++++++++ .../Private/SpineSkeletonImportFactory.cpp | 5 +--- .../SpinePlugin/Private/SpineAtlasAsset.cpp | 4 --- .../Public/SpineSkeletonDataAsset.h | 2 +- spine-ue4/SpineUE4.uproject | 2 +- 6 files changed, 40 insertions(+), 16 deletions(-) diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp index df4c681bc..b9391e101 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp @@ -28,11 +28,9 @@ *****************************************************************************/ #include "SpineAtlasImportFactory.h" -#include "AssetRegistryModule.h" #include "AssetToolsModule.h" -#include "Developer/AssetTools/Public/IAssetTools.h" -#include "PackageTools.h" #include "SpineAtlasAsset.h" +#include "Editor.h" #define LOCTEXT_NAMESPACE "Spine" @@ -56,6 +54,9 @@ bool USpineAtlasAssetFactory::FactoryCanImport(const FString &Filename) { } UObject *USpineAtlasAssetFactory::FactoryCreateFile(UClass *InClass, UObject *InParent, FName InName, EObjectFlags Flags, const FString &Filename, const TCHAR *Parms, FFeedbackContext *Warn, bool &bOutOperationCanceled) { + FString FileExtension = FPaths::GetExtension(Filename); + GEditor->GetEditorSubsystem()->BroadcastAssetPreImport(this, InClass, InParent, InName, *FileExtension); + FString rawString; if (!FFileHelper::LoadFileToString(rawString, *Filename)) { return nullptr; @@ -64,13 +65,12 @@ UObject *USpineAtlasAssetFactory::FactoryCreateFile(UClass *InClass, UObject *In FString currentSourcePath, filenameNoExtension, unusedExtension; const FString longPackagePath = FPackageName::GetLongPackagePath(InParent->GetOutermost()->GetPathName()); FPaths::Split(UFactory::GetCurrentFilename(), currentSourcePath, filenameNoExtension, unusedExtension); - FString name(InName.ToString()); - name.Append("-atlas"); - USpineAtlasAsset *asset = NewObject(InParent, InClass, FName(*name), Flags); + USpineAtlasAsset *asset = NewObject(InParent, InClass, InName, Flags); asset->SetRawData(rawString); asset->SetAtlasFileName(FName(*Filename)); LoadAtlas(asset, currentSourcePath, longPackagePath); + GEditor->GetEditorSubsystem()->BroadcastAssetPostImport(this, asset); return asset; } @@ -109,6 +109,7 @@ EReimportResult::Type USpineAtlasAssetFactory::Reimport(UObject *Obj) { else Obj->MarkPackageDirty(); + GEditor->GetEditorSubsystem()->BroadcastAssetReimport(asset); return EReimportResult::Succeeded; } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp index e556a854d..c95f82d59 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineEditorPlugin.cpp @@ -28,16 +28,46 @@ *****************************************************************************/ #include "SpineEditorPlugin.h" +#include "AssetTypeActions_Base.h" +#include "SpineAtlasAsset.h" +#include "SpineSkeletonDataAsset.h" + +class FSpineAtlasAssetTypeActions : public FAssetTypeActions_Base +{ +public: + UClass* GetSupportedClass() const override { return USpineAtlasAsset::StaticClass(); }; + FText GetName() const override { return INVTEXT("Spine atlas asset"); }; + FColor GetTypeColor() const override { return FColor::Red; }; + uint32 GetCategories() override { return EAssetTypeCategories::Misc; }; +}; + +class FSpineSkeletonDataAssetTypeActions : public FAssetTypeActions_Base +{ +public: + UClass* GetSupportedClass() const override { return USpineSkeletonDataAsset::StaticClass(); }; + FText GetName() const override { return INVTEXT("Spine data asset"); }; + FColor GetTypeColor() const override { return FColor::Red; }; + uint32 GetCategories() override { return EAssetTypeCategories::Misc; }; +}; class FSpineEditorPlugin : public ISpineEditorPlugin { virtual void StartupModule() override; virtual void ShutdownModule() override; + TSharedPtr SpineAtlasAssetTypeActions; + TSharedPtr SpineSkeletonDataAssetTypeActions; }; IMPLEMENT_MODULE(FSpineEditorPlugin, SpineEditorPlugin) void FSpineEditorPlugin::StartupModule() { + SpineAtlasAssetTypeActions = MakeShared(); + FAssetToolsModule::GetModule().Get().RegisterAssetTypeActions(SpineAtlasAssetTypeActions.ToSharedRef()); + SpineSkeletonDataAssetTypeActions = MakeShared(); + FAssetToolsModule::GetModule().Get().RegisterAssetTypeActions(SpineSkeletonDataAssetTypeActions.ToSharedRef()); } void FSpineEditorPlugin::ShutdownModule() { + if (!FModuleManager::Get().IsModuleLoaded("AssetTools")) return; + FAssetToolsModule::GetModule().Get().UnregisterAssetTypeActions(SpineAtlasAssetTypeActions.ToSharedRef()); + FAssetToolsModule::GetModule().Get().UnregisterAssetTypeActions(SpineSkeletonDataAssetTypeActions.ToSharedRef()); } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp index 3603abfc1..f92d03f95 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineSkeletonImportFactory.cpp @@ -76,10 +76,7 @@ void LoadAtlas(const FString &Filename, const FString &TargetPath) { } UObject *USpineSkeletonAssetFactory::FactoryCreateFile(UClass *InClass, UObject *InParent, FName InName, EObjectFlags Flags, const FString &Filename, const TCHAR *Parms, FFeedbackContext *Warn, bool &bOutOperationCanceled) { - FString name(InName.ToString()); - name.Append("-data"); - - USpineSkeletonDataAsset *asset = NewObject(InParent, InClass, FName(*name), Flags); + USpineSkeletonDataAsset *asset = NewObject(InParent, InClass, InName, Flags); TArray rawData; if (!FFileHelper::LoadFileToArray(rawData, *Filename, 0)) { return nullptr; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp index 9be02dfcc..bd7f63306 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp @@ -53,10 +53,6 @@ void USpineAtlasAsset::PostInitProperties() { } void USpineAtlasAsset::GetAssetRegistryTags(TArray &OutTags) const { - if (importData) { - OutTags.Add(FAssetRegistryTag(SourceFileTagName(), importData->GetSourceData().ToJson(), FAssetRegistryTag::TT_Hidden)); - } - Super::GetAssetRegistryTags(OutTags); } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h index 9abc7c5df..dd23d8c9e 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonDataAsset.h @@ -111,7 +111,7 @@ public: protected: UPROPERTY(VisibleAnywhere, Instanced, Category = ImportSettings) - class UAssetImportData *importData; + class UAssetImportData *importData = nullptr; virtual void PostInitProperties() override; virtual void GetAssetRegistryTags(TArray &OutTags) const override; diff --git a/spine-ue4/SpineUE4.uproject b/spine-ue4/SpineUE4.uproject index 40c4435b1..1a871bfec 100644 --- a/spine-ue4/SpineUE4.uproject +++ b/spine-ue4/SpineUE4.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "5.2", + "EngineAssociation": "5.3", "Category": "", "Description": "", "Modules": [