fix: move to GameInstanceSubsystem and scan for correct class

This commit is contained in:
Kyrium 2024-10-25 15:06:24 +02:00
parent bfd977e1e1
commit 4e1ea32b9d
2 changed files with 13 additions and 37 deletions

View File

@ -15,7 +15,7 @@ URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context)
{
if (IsValid(Context))
{
return Context->GetWorld()->GetSubsystem<URRDADataAssetSubsystem>();
return Context->GetWorld()->GetGameInstance()->GetSubsystem<URRDADataAssetSubsystem>();
}
return nullptr;
}

View File

@ -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<class T>
bool FindAllDataAssetsOfClass(TSet<T*>& 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<class T>
bool FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutDataAssets);
private:
UPROPERTY()
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets;
@ -84,31 +77,6 @@ public:
template <class T>
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets)
{
TArray<UClass*> FoundClasses;
GetDerivedClasses(T::StaticClass(), FoundClasses, true);
for (UClass* FoundClass : FoundClasses)
{
if(FoundClass->IsNative()) continue;
if(URRDADataAssetBase* Asset = FoundClass->GetDefaultObject<URRDADataAssetBase>())
{
if(!URRDADataAssetBase::IsEnabled(Asset, GetWorld()))
{
UE_LOG(LogRRDApi, Error, TEXT("Asset Disabled: %s"), *FoundClass->GetPathName());
continue;
}
OutDataAssets.Add(FoundClass->GetDefaultObject<T>());
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *FoundClass->GetPathName());
}
}
return OutDataAssets.Num() > 0;
}
template <class T>
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutDataAssets)
{
OutDataAssets.Empty();
@ -117,19 +85,27 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutD
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
TArray<FAssetData> 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<T>(Obj);
if(!CastedAsset)
{
UE_LOG(LogRRDApi, Warning, TEXT("Invalid asset type: %s"), *Asset.AssetName.ToString());
continue;
}
if(URRDADataAssetBase* BaseAsset = Cast<URRDADataAssetBase>(Obj))
{
if(URRDADataAssetBase::IsEnabled(BaseAsset, GetWorld()))
{
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *BaseAsset->GetPathName());
OutDataAssets.Add(Cast<T>(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<T*>& OutD
}
return OutDataAssets.Num() > 0;
}
}