From 2732cf1c643d3398aa711140b16cdc7885c79f08 Mon Sep 17 00:00:00 2001 From: mrhid6 Date: Thu, 24 Oct 2024 18:05:53 +0100 Subject: [PATCH] fix: Fixes to data asset loading --- .../Subsystems/RRDADataAssetSubsystem.cpp | 35 +++++++++++++++++-- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp index 819965c..44f5460 100644 --- a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp +++ b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp @@ -3,6 +3,7 @@ #include "RefinedRDApi.h" #include "DataAssets/RRDADirtDataAsset.h" #include "Engine/AssetManager.h" +#include "AssetRegistry/AssetRegistryModule.h" URRDADataAssetSubsystem::URRDADataAssetSubsystem() {} @@ -26,7 +27,17 @@ void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); - StartScanForDataAssets(); + FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked(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(); + } + + } void URRDADataAssetSubsystem::Deinitialize() @@ -36,8 +47,26 @@ void URRDADataAssetSubsystem::Deinitialize() void URRDADataAssetSubsystem::StartScanForDataAssets() { - UAssetManager& Manager = UAssetManager::Get(); - Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset")); + /*UAssetManager& Manager = UAssetManager::Get(); + Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset"));*/ + + // Find list of all UStat, and USkill assets in Content Browser. + FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked(FName("AssetRegistry")); + IAssetRegistry& AssetRegistry = AssetRegistryModule.Get(); + + TArray 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(Obj); + mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset); + } + } mDisabledDataAssets.Empty(); mAllDataAssets.Empty();