feat: RP Data Assets

This commit is contained in:
2024-10-25 14:45:06 +02:00
parent 90ac5dca32
commit bfd977e1e1
6 changed files with 194 additions and 67 deletions

View File

@@ -4,6 +4,10 @@
#include "DataAssets/RRDADirtDataAsset.h"
#include "Engine/AssetManager.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "DataAssets/RRDABoilerDataAsset.h"
#include "DataAssets/RRDACoolerDataAsset.h"
#include "DataAssets/RRDAHeaterDataAsset.h"
#include "DataAssets/RRDATurbineDataAsset.h"
URRDADataAssetSubsystem::URRDADataAssetSubsystem() {}
@@ -29,6 +33,7 @@ void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& 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);
@@ -36,40 +41,28 @@ void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
else {
StartScanForDataAssets();
}
}
void URRDADataAssetSubsystem::Deinitialize()
{
Super::Deinitialize();
mEnabledDataAssets.Empty();
mDisabledDataAssets.Empty();
mDirtAssets.Empty();
mTurbineAssets.Empty();
mBoilerAssets.Empty();
mCoolerAssets.Empty();
mHeaterAssets.Empty();
}
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<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);
}
}
UAssetManager& Manager = UAssetManager::Get();
Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset"));
mDisabledDataAssets.Empty();
mAllDataAssets.Empty();
mEnabledDataAssets.Empty();
ReCacheBoilerDataAssets();
ReCacheCoolerDataAssets();
@@ -81,12 +74,12 @@ void URRDADataAssetSubsystem::StartScanForDataAssets()
void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
{
mDirtAssets.Empty();
TSet<URRDADirtDataAsset*> DirtDataAssets;
if(FindAllDataAssetsOfClass(DirtDataAssets))
TSet<URRDADirtDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDADirtDataAsset* DirtDataAsset : DirtDataAssets)
for (URRDADirtDataAsset* DataAsset : DataAssets)
{
mDirtAssets.Add(DirtDataAsset->mItem, DirtDataAsset);
mDirtAssets.Add(DataAsset->mItem, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheDirtDataAssets: %d"), mDirtAssets.Num());
@@ -94,19 +87,95 @@ void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
void URRDADataAssetSubsystem::ReCacheTurbineDataAssets()
{
UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets"));
mTurbineAssets.Empty();
TSet<URRDATurbineDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDATurbineDataAsset* DataAsset : DataAssets)
{
if(!mTurbineAssets.Contains(DataAsset->mTier)) {
mTurbineAssets.Add(DataAsset->mTier, TMap<TSubclassOf<UFGItemDescriptor>, URRDATurbineDataAsset*>());
}
if(!DataAsset->mItem.ItemClass) {
UE_LOG(LogRRDApi, Fatal, TEXT("TurbineDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
continue;
}
mTurbineAssets[DataAsset->mTier].Add(DataAsset->mItem.ItemClass, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets: %d"), mTurbineAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() {
UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets"));
mBoilerAssets.Empty();
TSet<URRDABoilerDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDABoilerDataAsset* DataAsset : DataAssets)
{
if(!mBoilerAssets.Contains(DataAsset->mTier)) {
mBoilerAssets.Add(DataAsset->mTier, TMap<TSubclassOf<UFGItemDescriptor>, URRDABoilerDataAsset*>());
}
if(!DataAsset->mInput.ItemClass) {
UE_LOG(LogRRDApi, Fatal, TEXT("BoilerDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
continue;
}
mBoilerAssets[DataAsset->mTier].Add(DataAsset->mInput.ItemClass, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets: %d"), mTurbineAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() {
UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets"));
mCoolerAssets.Empty();
TSet<URRDACoolerDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDACoolerDataAsset* DataAsset : DataAssets)
{
if(!mCoolerAssets.Contains(DataAsset->mType)) {
mCoolerAssets.Add(DataAsset->mType, TMap<TSubclassOf<UFGItemDescriptor>, URRDACoolerDataAsset*>());
}
if(!DataAsset->mItem) {
UE_LOG(LogRRDApi, Fatal, TEXT("CoolerDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
continue;
}
mCoolerAssets[DataAsset->mType].Add(DataAsset->mItem, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets: %d"), mTurbineAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() {
UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets"));
mHeaterAssets.Empty();
TSet<URRDAHeaterDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDAHeaterDataAsset* DataAsset : DataAssets)
{
if(!mHeaterAssets.Contains(DataAsset->mType)) {
mHeaterAssets.Add(DataAsset->mType, TMap<TSubclassOf<UFGItemDescriptor>, URRDAHeaterDataAsset*>());
}
if(!DataAsset->mInput.ItemClass) {
UE_LOG(LogRRDApi, Fatal, TEXT("HeaterDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
continue;
}
mHeaterAssets[DataAsset->mType].Add(DataAsset->mInput.ItemClass, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num());
}
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const