fix: move to GameInstanceSubsystem and scan for correct class
This commit is contained in:
parent
bfd977e1e1
commit
4e1ea32b9d
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user