feat: cleanup ds data asset

This commit is contained in:
mrhid6
2024-11-13 16:23:45 +00:00
parent 4c8e0b59a8
commit 4d01f587e4
3 changed files with 206 additions and 174 deletions

View File

@@ -13,29 +13,25 @@
URRDADataAssetSubsystem::URRDADataAssetSubsystem() {}
URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context)
{
if (IsValid(Context))
{
URRDADataAssetSubsystem* URRDADataAssetSubsystem::Get(UObject* Context) {
if (IsValid(Context)) {
return Context->GetWorld()->GetGameInstance()->GetSubsystem<URRDADataAssetSubsystem>();
}
return nullptr;
}
URRDADataAssetSubsystem* URRDADataAssetSubsystem::GetChecked(UObject* Context)
{
URRDADataAssetSubsystem* URRDADataAssetSubsystem::GetChecked(UObject* Context) {
URRDADataAssetSubsystem* Subsystem = Get(Context);
fgcheck(Subsystem);
return Subsystem;
}
void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection) {
Super::Initialize(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);
@@ -45,8 +41,7 @@ void URRDADataAssetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
}
}
void URRDADataAssetSubsystem::Deinitialize()
{
void URRDADataAssetSubsystem::Deinitialize() {
Super::Deinitialize();
mEnabledDataAssets.Empty();
@@ -57,11 +52,10 @@ void URRDADataAssetSubsystem::Deinitialize()
mCoolerAssets.Empty();
mHeaterAssets.Empty();
mGeneratorAssets.Empty();
mDSModAdapterAssets.Empty();
mDSBuildingData.Empty();
}
void URRDADataAssetSubsystem::StartScanForDataAssets()
{
void URRDADataAssetSubsystem::StartScanForDataAssets() {
mDisabledDataAssets.Empty();
mEnabledDataAssets.Empty();
@@ -71,34 +65,31 @@ void URRDADataAssetSubsystem::StartScanForDataAssets()
ReCacheHeaterDataAssets();
ReCacheTurbineDataAssets();
ReCacheGeneratorDataAssets();
mDSBuildingData.Empty();
ReCacheDSModAdapterDataAssets();
ReCacheDSAdapterCoversDataAssets();
}
void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
{
void URRDADataAssetSubsystem::ReCacheDirtDataAssets() {
mDirtAssets.Empty();
TSet<URRDADirtDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDADirtDataAsset* DataAsset : DataAssets)
{
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADirtDataAsset* DataAsset : DataAssets) {
mDirtAssets.Add(DataAsset->mItem, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheDirtDataAssets: %d"), mDirtAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheTurbineDataAssets()
{
void URRDADataAssetSubsystem::ReCacheTurbineDataAssets() {
mTurbineAssets.Empty();
TSet<URRDATurbineDataAsset*> DataAssets;
int32 Added = 0;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDATurbineDataAsset* DataAsset : DataAssets)
{
if(!mTurbineAssets.Contains(DataAsset->mTier)) {
mTurbineAssets.Add(DataAsset->mTier, FRRDADataHolderTurbineData());
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDATurbineDataAsset* DataAsset : DataAssets) {
if (!mTurbineAssets.Contains(DataAsset->mTier)) {
mTurbineAssets.Add(DataAsset->mTier, FRRDADataHolderTurbineData());
}
fgcheckf(DataAsset->mItem.ItemClass, TEXT("TurbineDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
@@ -107,7 +98,7 @@ void URRDADataAssetSubsystem::ReCacheTurbineDataAssets()
Added++;
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets: %d"), Added);
}
@@ -115,12 +106,10 @@ void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() {
mBoilerAssets.Empty();
TSet<URRDABoilerDataAsset*> DataAssets;
int32 Added = 0;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDABoilerDataAsset* DataAsset : DataAssets)
{
if(!mBoilerAssets.Contains(DataAsset->mTier)) {
mBoilerAssets.Add(DataAsset->mTier, FRRDADataHolderBoilerData());
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDABoilerDataAsset* DataAsset : DataAssets) {
if (!mBoilerAssets.Contains(DataAsset->mTier)) {
mBoilerAssets.Add(DataAsset->mTier, FRRDADataHolderBoilerData());
}
fgcheckf(DataAsset->mInput.ItemClass, TEXT("BoilerDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
@@ -129,7 +118,7 @@ void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() {
Added++;
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets: %d"), Added);
}
@@ -137,12 +126,10 @@ void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() {
mCoolerAssets.Empty();
TSet<URRDACoolerDataAsset*> DataAssets;
int32 Added = 0;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDACoolerDataAsset* DataAsset : DataAssets)
{
if(!mCoolerAssets.Contains(DataAsset->mType)) {
mCoolerAssets.Add(DataAsset->mType, FRRDADataHolderCoolerData());
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDACoolerDataAsset* DataAsset : DataAssets) {
if (!mCoolerAssets.Contains(DataAsset->mType)) {
mCoolerAssets.Add(DataAsset->mType, FRRDADataHolderCoolerData());
}
fgcheckf(DataAsset->mItem, TEXT("CoolerDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
@@ -151,7 +138,7 @@ void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() {
Added++;
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets: %d"), Added);
}
@@ -159,66 +146,82 @@ void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() {
mHeaterAssets.Empty();
TSet<URRDAHeaterDataAsset*> DataAssets;
int32 Added = 0;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDAHeaterDataAsset* DataAsset : DataAssets)
{
if(!mHeaterAssets.Contains(DataAsset->mType)) {
mHeaterAssets.Add(DataAsset->mType, FRRDADataHolderHeaterData());
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDAHeaterDataAsset* DataAsset : DataAssets) {
if (!mHeaterAssets.Contains(DataAsset->mType)) {
mHeaterAssets.Add(DataAsset->mType, FRRDADataHolderHeaterData());
}
fgcheckf(DataAsset->mInput.ItemClass, TEXT("HeaterDataAsset %s has no ItemClass"), *DataAsset->GetPathName());
mHeaterAssets[DataAsset->mType].Data.Add(DataAsset->mInput.ItemClass, DataAsset);
Added++;
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), Added);
}
void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets()
{
void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets() {
mGeneratorAssets.Empty();
TSet<URRDAGeneratorDataAsset*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDAGeneratorDataAsset* DataAsset : DataAssets)
{
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDAGeneratorDataAsset* DataAsset : DataAssets) {
mGeneratorAssets.Add(DataAsset->mTier, DataAsset);
}
}
UE_LOG(LogRRDApi, Log, TEXT("ReCacheGeneratorDataAssets: %d"), mGeneratorAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheDSModAdapterDataAssets() {
mDSModAdapterAssets.Empty();
TSet<URRDADataAssetDSModAdapter*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets)
{
mDSModAdapterAssets.Add(DataAsset->mBuildingClass, DataAsset);
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets) {
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
if (existingData == nullptr) {
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
newData.ModAdapter = DataAsset;
mDSBuildingData.Add(DataAsset->mBuildingClass, newData);
}
else {
existingData->ModAdapter = DataAsset;
}
}
}
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSModAdapterDataAssets: {0}", mDSModAdapterAssets.Num());
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSModAdapterDataAssets: {0}", mDSBuildingData.Num());
}
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const
{
if(!mDirtAssets.Num())
{
void URRDADataAssetSubsystem::ReCacheDSAdapterCoversDataAssets() {
TSet<URRDADataAssetDSAdapterCovers*> DataAssets;
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADataAssetDSAdapterCovers* DataAsset : DataAssets) {
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
if (existingData == nullptr) {
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
newData.AdapterCovers = DataAsset;
mDSBuildingData.Add(DataAsset->mBuildingClass, newData);
}
else {
existingData->AdapterCovers = DataAsset;
}
}
}
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSAdapterCoversDataAssets: {0}", mDSBuildingData.Num());
}
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const {
if (!mDirtAssets.Num()) {
UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!"));
}
return mDirtAssets.GetKeys(Items);
}
URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const
{
if(!Item) return nullptr;
URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const {
if (!Item) return nullptr;
URRDADirtDataAsset* const* Desc = mDirtAssets.Find(Item);
if(!Desc) return nullptr;
if (!Desc) return nullptr;
return *Desc;
}
@@ -228,30 +231,63 @@ TArray<URRDADirtDataAsset*> URRDADataAssetSubsystem::GetAllDirtAssets() const {
return Assets;
}
int32 URRDADataAssetSubsystem::GetAllModAdapterBuildingClasses(TArray<TSubclassOf<AFGBuildableFactory>>& OutBuildingClasses) const {
if(!mDSModAdapterAssets.Num())
{
UE_LOG(LogRRDApi, Error, TEXT("No Mod Adapter Assets found!"));
int32 URRDADataAssetSubsystem::GetAllDSBuildingClasses(TArray<TSubclassOf<AFGBuildableFactory>>& OutBuildingClasses) const {
if (!mDSBuildingData.Num()) {
UE_LOG(LogRRDApi, Error, TEXT("No DS Buildings found!"));
}
return mDSModAdapterAssets.GetKeys(OutBuildingClasses);
return mDSBuildingData.GetKeys(OutBuildingClasses);
}
URRDADataAssetDSModAdapter* URRDADataAssetSubsystem::GetModAdapterDataAssetForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const {
if(!BuildingClass) return nullptr;
URRDADataAssetDSModAdapter* const* DataAsset = mDSModAdapterAssets.Find(BuildingClass);
if(!DataAsset) return nullptr;
return *DataAsset;
if (!BuildingClass) return nullptr;
const FRRDADataHolderDSBuildingData* data = mDSBuildingData.Find(BuildingClass);
if (data == nullptr) return nullptr;
URRDADataAssetDSModAdapter* DataAsset = data->ModAdapter;
if (!DataAsset) return nullptr;
return DataAsset;
}
TArray<URRDADataAssetDSModAdapter*> URRDADataAssetSubsystem::GetAllModAdapterDataAssets() const {
TArray<URRDADataAssetDSModAdapter*> Assets;
mDSModAdapterAssets.GenerateValueArray(Assets);
TArray<FRRDADataHolderDSBuildingData> buildingDatas;
mDSBuildingData.GenerateValueArray(buildingDatas);
for (FRRDADataHolderDSBuildingData& buildingData : buildingDatas) {
Assets.AddUnique(buildingData.ModAdapter);
}
return Assets;
}
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const
{
if(!mTurbineAssets.Contains(Tier)) {
URRDADataAssetDSAdapterCovers* URRDADataAssetSubsystem::GetDSAdapterCoverDataAssetForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const {
if (!BuildingClass) return nullptr;
const FRRDADataHolderDSBuildingData* data = mDSBuildingData.Find(BuildingClass);
if (data == nullptr) return nullptr;
URRDADataAssetDSAdapterCovers* DataAsset = data->AdapterCovers;
if (!DataAsset) return nullptr;
return DataAsset;
}
TArray<URRDADataAssetDSAdapterCovers*> URRDADataAssetSubsystem::GetAllDSAdapterCoverDataAssets() const {
TArray<URRDADataAssetDSAdapterCovers*> Assets;
TArray<FRRDADataHolderDSBuildingData> buildingDatas;
mDSBuildingData.GenerateValueArray(buildingDatas);
for (FRRDADataHolderDSBuildingData& buildingData : buildingDatas) {
Assets.AddUnique(buildingData.AdapterCovers);
}
return Assets;
}
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
if (!mTurbineAssets.Contains(Tier)) {
return false;
}
@@ -263,10 +299,9 @@ bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescr
bool URRDADataAssetSubsystem::GetAllTurbineRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
Items.Empty();
for (URRDATurbineDataAsset* Asset : GetAllTurbineAssets(Tier))
{
for (URRDATurbineDataAsset* Asset : GetAllTurbineAssets(Tier)) {
Items.AddUnique(Asset->mItem.ItemClass);
if(Asset->mWasteItem.ItemClass) {
if (Asset->mWasteItem.ItemClass) {
Items.AddUnique(Asset->mWasteItem.ItemClass);
}
}
@@ -274,7 +309,7 @@ bool URRDADataAssetSubsystem::GetAllTurbineRelevantItems(TArray<TSubclassOf<UFGI
}
TArray<URRDATurbineDataAsset*> URRDADataAssetSubsystem::GetAllTurbineAssets(int32 Tier) const {
if(!mTurbineAssets.Contains(Tier)) {
if (!mTurbineAssets.Contains(Tier)) {
UE_LOG(LogRRDApi, Error, TEXT("No TurbineAssets found for Type: %d"), Tier);
return TArray<URRDATurbineDataAsset*>();
}
@@ -288,9 +323,8 @@ URRDATurbineDataAsset* URRDADataAssetSubsystem::GetDefaultTurbineAsset(int32 Tie
return GetAllTurbineAssets(Tier).Top();
}
URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf<UFGItemDescriptor> Item, int32 Tier) const
{
if(!mTurbineAssets.Contains(Tier)) {
URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf<UFGItemDescriptor> Item, int32 Tier) const {
if (!mTurbineAssets.Contains(Tier)) {
return nullptr;
}
@@ -298,9 +332,8 @@ URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf<U
}
bool URRDADataAssetSubsystem::GetAllCoolerItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, ERRDACoolerType Type) const
{
if(!mCoolerAssets.Contains(Type)) return false;
bool URRDADataAssetSubsystem::GetAllCoolerItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, ERRDACoolerType Type) const {
if (!mCoolerAssets.Contains(Type)) return false;
Items.Empty();
mCoolerAssets[Type].Data.GetKeys(Items);
@@ -308,21 +341,17 @@ bool URRDADataAssetSubsystem::GetAllCoolerItems(TArray<TSubclassOf<UFGItemDescri
return Items.Num() > 0;
}
URRDACoolerDataAsset* URRDADataAssetSubsystem::GetCoolerItemData(TSubclassOf<UFGItemDescriptor> Item, ERRDACoolerType Type) const
{
if(!mCoolerAssets.Contains(Type)) return nullptr;
URRDACoolerDataAsset* URRDADataAssetSubsystem::GetCoolerItemData(TSubclassOf<UFGItemDescriptor> Item, ERRDACoolerType Type) const {
if (!mCoolerAssets.Contains(Type)) return nullptr;
return mCoolerAssets[Type].Data.FindRef(Item);
}
URRDACoolerDataAsset* URRDADataAssetSubsystem::GetDefaultCoolerAsset(ERRDACoolerType Type) const
{
URRDACoolerDataAsset* URRDADataAssetSubsystem::GetDefaultCoolerAsset(ERRDACoolerType Type) const {
return GetAllCoolerAssets(Type).Top();
}
TArray<URRDACoolerDataAsset*> URRDADataAssetSubsystem::GetAllCoolerAssets(ERRDACoolerType Type) const
{
if(!mCoolerAssets.Contains(Type))
{
TArray<URRDACoolerDataAsset*> URRDADataAssetSubsystem::GetAllCoolerAssets(ERRDACoolerType Type) const {
if (!mCoolerAssets.Contains(Type)) {
UE_LOG(LogRRDApi, Error, TEXT("No CoolerAssets found for Type: %d"), Type);
return TArray<URRDACoolerDataAsset*>();
}
@@ -335,47 +364,40 @@ TArray<URRDACoolerDataAsset*> URRDADataAssetSubsystem::GetAllCoolerAssets(ERRDAC
URRDAGeneratorDataAsset* URRDADataAssetSubsystem::GetGeneratorItemData(int32 Tier) const {
UE_LOG(LogRRDApi, Log, TEXT("GetGeneratorItemData: %d"), Tier);
if(!mGeneratorAssets.Contains(Tier)) return nullptr;
if (!mGeneratorAssets.Contains(Tier)) return nullptr;
return mGeneratorAssets.FindRef(Tier);
}
bool URRDADataAssetSubsystem::GetAllBoilerItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const
{
if(!mBoilerAssets.Contains(Tier)) return false;
bool URRDADataAssetSubsystem::GetAllBoilerItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
if (!mBoilerAssets.Contains(Tier)) return false;
mBoilerAssets[Tier].Data.GetKeys(Items);
return Items.Num() > 0;
}
URRDABoilerDataAsset* URRDADataAssetSubsystem::GetBoilerItemData(TSubclassOf<UFGItemDescriptor> Item, int32 Tier) const
{
if(!mBoilerAssets.Contains(Tier)) return nullptr;
URRDABoilerDataAsset* URRDADataAssetSubsystem::GetBoilerItemData(TSubclassOf<UFGItemDescriptor> Item, int32 Tier) const {
if (!mBoilerAssets.Contains(Tier)) return nullptr;
return mBoilerAssets[Tier].Data.FindRef(Item);
}
bool URRDADataAssetSubsystem::GetAllBoilerRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const
{
bool URRDADataAssetSubsystem::GetAllBoilerRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
Items.Empty();
for (URRDABoilerDataAsset* Asset : GetAllBoilerAssets(Tier))
{
for (URRDABoilerDataAsset* Asset : GetAllBoilerAssets(Tier)) {
Items.AddUnique(Asset->mInput.ItemClass);
if(Asset->mOutput.ItemClass) {
if (Asset->mOutput.ItemClass) {
Items.AddUnique(Asset->mOutput.ItemClass);
}
}
return Items.Num() > 0;
}
URRDABoilerDataAsset* URRDADataAssetSubsystem::GetDefaultBoilerAsset(int32 Tier) const
{
URRDABoilerDataAsset* URRDADataAssetSubsystem::GetDefaultBoilerAsset(int32 Tier) const {
return GetAllBoilerAssets(Tier).Top();
}
TArray<URRDABoilerDataAsset*> URRDADataAssetSubsystem::GetAllBoilerAssets(int32 Tier) const
{
if(!mBoilerAssets.Contains(Tier))
{
TArray<URRDABoilerDataAsset*> URRDADataAssetSubsystem::GetAllBoilerAssets(int32 Tier) const {
if (!mBoilerAssets.Contains(Tier)) {
UE_LOG(LogRRDApi, Error, TEXT("No BoilerAssets found for Type: %d"), Tier);
return TArray<URRDABoilerDataAsset*>();
}
@@ -387,42 +409,36 @@ TArray<URRDABoilerDataAsset*> URRDADataAssetSubsystem::GetAllBoilerAssets(int32
}
bool URRDADataAssetSubsystem::GetAllHeaterItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, ERRDAHeaterType Type) const {
if(!mHeaterAssets.Contains(Type)) return false;
if (!mHeaterAssets.Contains(Type)) return false;
mHeaterAssets[Type].Data.GetKeys(Items);
return Items.Num() > 0;
}
URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetHeaterItemData(TSubclassOf<UFGItemDescriptor> Item, ERRDAHeaterType Type) const
{
if(!mHeaterAssets.Contains(Type)) return nullptr;
URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetHeaterItemData(TSubclassOf<UFGItemDescriptor> Item, ERRDAHeaterType Type) const {
if (!mHeaterAssets.Contains(Type)) return nullptr;
return mHeaterAssets[Type].Data.FindRef(Item);
}
bool URRDADataAssetSubsystem::GetAllHeaterRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, ERRDAHeaterType Type) const
{
bool URRDADataAssetSubsystem::GetAllHeaterRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, ERRDAHeaterType Type) const {
Items.Empty();
for (URRDAHeaterDataAsset* HeaterAsset : GetAllHeaterAssets(Type))
{
for (URRDAHeaterDataAsset* HeaterAsset : GetAllHeaterAssets(Type)) {
Items.AddUnique(HeaterAsset->mInput.ItemClass);
if(HeaterAsset->mOutput.ItemClass) {
if (HeaterAsset->mOutput.ItemClass) {
Items.AddUnique(HeaterAsset->mOutput.ItemClass);
}
}
return Items.Num() > 0;
}
URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetDefaultHeaterAsset(ERRDAHeaterType Type) const
{
URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetDefaultHeaterAsset(ERRDAHeaterType Type) const {
return GetAllHeaterAssets(Type).Top();
}
TArray<URRDAHeaterDataAsset*> URRDADataAssetSubsystem::GetAllHeaterAssets(ERRDAHeaterType Type) const
{
if(!mHeaterAssets.Contains(Type))
{
TArray<URRDAHeaterDataAsset*> URRDADataAssetSubsystem::GetAllHeaterAssets(ERRDAHeaterType Type) const {
if (!mHeaterAssets.Contains(Type)) {
UE_LOG(LogRRDApi, Error, TEXT("No HeaterAssets found for Type: %d"), Type);
return TArray<URRDAHeaterDataAsset*>();
}