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))
|
if (IsValid(Context))
|
||||||
{
|
{
|
||||||
return Context->GetWorld()->GetSubsystem<URRDADataAssetSubsystem>();
|
return Context->GetWorld()->GetGameInstance()->GetSubsystem<URRDADataAssetSubsystem>();
|
||||||
}
|
}
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
class IAssetRegistry;
|
class IAssetRegistry;
|
||||||
|
|
||||||
UCLASS()
|
UCLASS()
|
||||||
class REFINEDRDAPI_API URRDADataAssetSubsystem : public UWorldSubsystem
|
class REFINEDRDAPI_API URRDADataAssetSubsystem : public UGameInstanceSubsystem
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
@ -58,13 +58,6 @@ public:
|
|||||||
template<class T>
|
template<class T>
|
||||||
bool FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets);
|
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:
|
private:
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets;
|
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets;
|
||||||
@ -84,31 +77,6 @@ public:
|
|||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets)
|
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();
|
OutDataAssets.Empty();
|
||||||
|
|
||||||
@ -117,19 +85,27 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClassUseRegistry(TSet<T*>& OutD
|
|||||||
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
|
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
|
||||||
|
|
||||||
TArray<FAssetData> AssetList;
|
TArray<FAssetData> AssetList;
|
||||||
AssetRegistry.GetAssetsByClass(URRDADataAssetBase::StaticClass()->GetClassPathName(), AssetList, true);
|
AssetRegistry.GetAssetsByClass(T::StaticClass()->GetClassPathName(), AssetList, true);
|
||||||
|
|
||||||
// Split assets into separate arrays.
|
// Split assets into separate arrays.
|
||||||
for (const FAssetData& Asset : AssetList) {
|
for (const FAssetData& Asset : AssetList) {
|
||||||
UObject* Obj = Asset.GetAsset();
|
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* BaseAsset = Cast<URRDADataAssetBase>(Obj))
|
||||||
{
|
{
|
||||||
if(URRDADataAssetBase::IsEnabled(BaseAsset, GetWorld()))
|
if(URRDADataAssetBase::IsEnabled(BaseAsset, GetWorld()))
|
||||||
{
|
{
|
||||||
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *BaseAsset->GetPathName());
|
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *BaseAsset->GetPathName());
|
||||||
OutDataAssets.Add(Cast<T>(BaseAsset));
|
OutDataAssets.Add(CastedAsset);
|
||||||
mEnabledDataAssets.Add(BaseAsset);
|
mEnabledDataAssets.Add(BaseAsset);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
UE_LOG(LogRRDApi, Warning, TEXT("Asset Disabled: %s"), *BaseAsset->GetPathName());
|
UE_LOG(LogRRDApi, Warning, TEXT("Asset Disabled: %s"), *BaseAsset->GetPathName());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user