#include "Subsystems/RRDADataAssetSubsystem.h" #include "RefinedRDApi.h" #include "DataAssets/RRDADirtDataAsset.h" #include "Engine/AssetManager.h" #include "AssetRegistry/AssetRegistryModule.h" URRDADataAssetSubsystem::URRDADataAssetSubsystem() {} URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context) { if (IsValid(Context)) { return Context->GetWorld()->GetSubsystem(); } return nullptr; } URRDADataAssetSubsystem* URRDADataAssetSubsystem::GetChecked(UObject* Context) { URRDADataAssetSubsystem* Subsystem = Get(Context); fgcheck(Subsystem); return Subsystem; } void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection) { Super::Initialize(Collection); 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() { Super::Deinitialize(); } void URRDADataAssetSubsystem::StartScanForDataAssets() { /*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(); ReCacheBoilerDataAssets(); ReCacheCoolerDataAssets(); ReCacheDirtDataAssets(); ReCacheHeaterDataAssets(); ReCacheTurbineDataAssets(); } void URRDADataAssetSubsystem::ReCacheDirtDataAssets() { mDirtAssets.Empty(); TSet DirtDataAssets; if(FindAllDataAssetsOfClass(DirtDataAssets)) { for (URRDADirtDataAsset* DirtDataAsset : DirtDataAssets) { mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset); } } UE_LOG(LogRRDApi, Log, TEXT("ReCacheDirtDataAssets: %d"), mDirtAssets.Num()); } void URRDADataAssetSubsystem::ReCacheTurbineDataAssets() { UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets")); } void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() { UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets")); } void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() { UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets")); } void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() { UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets")); } int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray>& Items) const { return mDirtAssets.GetKeys(Items); } URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf Item) const { if(!Item) return nullptr; return *mDirtAssets.Find(Item); }