From 4e1ea32b9da4d8082cfa7e451a3e9447963e1932 Mon Sep 17 00:00:00 2001 From: Kyrium Date: Fri, 25 Oct 2024 15:06:24 +0200 Subject: [PATCH] fix: move to GameInstanceSubsystem and scan for correct class --- .../Subsystems/RRDADataAssetSubsystem.cpp | 2 +- .../Subsystems/RRDADataAssetSubsystem.h | 48 +++++-------------- 2 files changed, 13 insertions(+), 37 deletions(-) diff --git a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp index bca1d5d..d3af460 100644 --- a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp +++ b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp @@ -15,7 +15,7 @@ URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context) { if (IsValid(Context)) { - return Context->GetWorld()->GetSubsystem(); + return Context->GetWorld()->GetGameInstance()->GetSubsystem(); } return nullptr; } diff --git a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h index a227004..0f1f15d 100644 --- a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h +++ b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h @@ -15,7 +15,7 @@ class IAssetRegistry; UCLASS() -class REFINEDRDAPI_API URRDADataAssetSubsystem : public UWorldSubsystem +class REFINEDRDAPI_API URRDADataAssetSubsystem : public UGameInstanceSubsystem { GENERATED_BODY() @@ -58,13 +58,6 @@ public: template bool FindAllDataAssetsOfClass(TSet& OutDataAssets); - /** - * @note For testing purposes only it currently finds 0 assets - * @deprecated Use FindAllDataAssetsOfClass instead it uses GetDerivedClasses and get all assets of a specific class - */ - template - bool FindAllDataAssetsOfClassUseRegistry(TSet& OutDataAssets); - private: UPROPERTY() TMap, class URRDADirtDataAsset*> mDirtAssets; @@ -84,31 +77,6 @@ public: template bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet& OutDataAssets) -{ - TArray FoundClasses; - GetDerivedClasses(T::StaticClass(), FoundClasses, true); - - for (UClass* FoundClass : FoundClasses) - { - if(FoundClass->IsNative()) continue; - - if(URRDADataAssetBase* Asset = FoundClass->GetDefaultObject()) - { - if(!URRDADataAssetBase::IsEnabled(Asset, GetWorld())) - { - UE_LOG(LogRRDApi, Error, TEXT("Asset Disabled: %s"), *FoundClass->GetPathName()); - continue; - } - OutDataAssets.Add(FoundClass->GetDefaultObject()); - UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *FoundClass->GetPathName()); - } - } - - return OutDataAssets.Num() > 0; -} - -template -bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet& OutDataAssets) { OutDataAssets.Empty(); @@ -117,19 +85,27 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet& OutD IAssetRegistry& AssetRegistry = AssetRegistryModule.Get(); TArray AssetList; - AssetRegistry.GetAssetsByClass(URRDADataAssetBase::StaticClass()->GetClassPathName(), AssetList, true); + AssetRegistry.GetAssetsByClass(T::StaticClass()->GetClassPathName(), AssetList, true); // Split assets into separate arrays. for (const FAssetData& Asset : AssetList) { UObject* Obj = Asset.GetAsset(); + + T* CastedAsset = Cast(Obj); + if(!CastedAsset) + { + UE_LOG(LogRRDApi, Warning, TEXT("Invalid asset type: %s"), *Asset.AssetName.ToString()); + continue; + } if(URRDADataAssetBase* BaseAsset = Cast(Obj)) { if(URRDADataAssetBase::IsEnabled(BaseAsset, GetWorld())) { UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *BaseAsset->GetPathName()); - OutDataAssets.Add(Cast(BaseAsset)); + OutDataAssets.Add(CastedAsset); mEnabledDataAssets.Add(BaseAsset); + continue; } UE_LOG(LogRRDApi, Warning, TEXT("Asset Disabled: %s"), *BaseAsset->GetPathName()); @@ -138,4 +114,4 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet& OutD } return OutDataAssets.Num() > 0; -} +} \ No newline at end of file