#include "Subsystems/RRDADataAssetSubsystem.h" #include "RefinedRDApi.h" #include "DataAssets/RRDADirtDataAsset.h" #include "Engine/AssetManager.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); StartScanForDataAssets(); } void URRDADataAssetSubsystem::Deinitialize() { Super::Deinitialize(); } void URRDADataAssetSubsystem::StartScanForDataAssets() { UAssetManager& Manager = UAssetManager::Get(); Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset")); 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); }