fix: Fixes to data asset loading

This commit is contained in:
mrhid6 2024-10-24 18:05:53 +01:00
parent 07a9ef4e58
commit 2732cf1c64

View File

@ -3,6 +3,7 @@
#include "RefinedRDApi.h" #include "RefinedRDApi.h"
#include "DataAssets/RRDADirtDataAsset.h" #include "DataAssets/RRDADirtDataAsset.h"
#include "Engine/AssetManager.h" #include "Engine/AssetManager.h"
#include "AssetRegistry/AssetRegistryModule.h"
URRDADataAssetSubsystem::URRDADataAssetSubsystem() {} URRDADataAssetSubsystem::URRDADataAssetSubsystem() {}
@ -26,9 +27,19 @@ void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{ {
Super::Initialize(Collection); Super::Initialize(Collection);
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(FName("AssetRegistry"));
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
// Must wait until all assets are discovered before populating list of assets.
if (AssetRegistry.IsLoadingAssets()) {
AssetRegistry.OnFilesLoaded().AddUObject(this, &URRDADataAssetSubsystem::StartScanForDataAssets);
}
else {
StartScanForDataAssets(); StartScanForDataAssets();
} }
}
void URRDADataAssetSubsystem::Deinitialize() void URRDADataAssetSubsystem::Deinitialize()
{ {
Super::Deinitialize(); Super::Deinitialize();
@ -36,8 +47,26 @@ void URRDADataAssetSubsystem::Deinitialize()
void URRDADataAssetSubsystem::StartScanForDataAssets() void URRDADataAssetSubsystem::StartScanForDataAssets()
{ {
UAssetManager& Manager = UAssetManager::Get(); /*UAssetManager& Manager = UAssetManager::Get();
Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset")); Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset"));*/
// Find list of all UStat, and USkill assets in Content Browser.
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(FName("AssetRegistry"));
IAssetRegistry& AssetRegistry = AssetRegistryModule.Get();
TArray<FAssetData> AssetList;
AssetRegistry.GetAssetsByClass(FName("RRDADataAssetBase"), AssetList);
// Split assets into separate arrays.
for (const FAssetData& Asset : AssetList) {
UObject* Obj = Asset.GetAsset();
// Cast the Obj to other data asset classes
if (Obj->GetClass()->IsChildOf(URRDADirtDataAsset::StaticClass())) {
auto DirtDataAsset = Cast<URRDADirtDataAsset>(Obj);
mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset);
}
}
mDisabledDataAssets.Empty(); mDisabledDataAssets.Empty();
mAllDataAssets.Empty(); mAllDataAssets.Empty();