feat: RP Data Assets
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user