feat: Item filters
This commit is contained in:
parent
8e6378208c
commit
0d976de526
@ -0,0 +1,5 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
|
||||||
|
#include "DataAssets/RRDADataAssetDSItemFilter.h"
|
||||||
|
|
@ -67,6 +67,7 @@ void URRDADataAssetSubsystem::StartScanForDataAssets() {
|
|||||||
ReCacheGeneratorDataAssets();
|
ReCacheGeneratorDataAssets();
|
||||||
|
|
||||||
mDSBuildingData.Empty();
|
mDSBuildingData.Empty();
|
||||||
|
ReCacheDSItemFilters();
|
||||||
ReCacheDSModAdapterDataAssets();
|
ReCacheDSModAdapterDataAssets();
|
||||||
ReCacheDSAdapterCoversDataAssets();
|
ReCacheDSAdapterCoversDataAssets();
|
||||||
}
|
}
|
||||||
@ -178,6 +179,8 @@ void URRDADataAssetSubsystem::ReCacheDSModAdapterDataAssets() {
|
|||||||
TSet<URRDADataAssetDSModAdapter*> DataAssets;
|
TSet<URRDADataAssetDSModAdapter*> DataAssets;
|
||||||
if (FindAllDataAssetsOfClass(DataAssets)) {
|
if (FindAllDataAssetsOfClass(DataAssets)) {
|
||||||
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets) {
|
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets) {
|
||||||
|
if (DataAsset->mBuildingClass == nullptr) continue;
|
||||||
|
|
||||||
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
|
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
|
||||||
if (existingData == nullptr) {
|
if (existingData == nullptr) {
|
||||||
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
|
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
|
||||||
@ -197,6 +200,8 @@ void URRDADataAssetSubsystem::ReCacheDSAdapterCoversDataAssets() {
|
|||||||
TSet<URRDADataAssetDSAdapterCovers*> DataAssets;
|
TSet<URRDADataAssetDSAdapterCovers*> DataAssets;
|
||||||
if (FindAllDataAssetsOfClass(DataAssets)) {
|
if (FindAllDataAssetsOfClass(DataAssets)) {
|
||||||
for (URRDADataAssetDSAdapterCovers* DataAsset : DataAssets) {
|
for (URRDADataAssetDSAdapterCovers* DataAsset : DataAssets) {
|
||||||
|
if (DataAsset->mBuildingClass == nullptr) continue;
|
||||||
|
|
||||||
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
|
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
|
||||||
if (existingData == nullptr) {
|
if (existingData == nullptr) {
|
||||||
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
|
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
|
||||||
@ -211,6 +216,26 @@ void URRDADataAssetSubsystem::ReCacheDSAdapterCoversDataAssets() {
|
|||||||
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSAdapterCoversDataAssets: {0}", mDSBuildingData.Num());
|
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSAdapterCoversDataAssets: {0}", mDSBuildingData.Num());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void URRDADataAssetSubsystem::ReCacheDSItemFilters() {
|
||||||
|
TSet<URRDADataAssetDSItemFilter*> DataAssets;
|
||||||
|
if (FindAllDataAssetsOfClass(DataAssets)) {
|
||||||
|
for (URRDADataAssetDSItemFilter* DataAsset : DataAssets) {
|
||||||
|
if (DataAsset->mBuildingClass == nullptr) continue;
|
||||||
|
|
||||||
|
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
|
||||||
|
if (existingData == nullptr) {
|
||||||
|
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
|
||||||
|
newData.ItemFilters.AddUnique(DataAsset);
|
||||||
|
mDSBuildingData.Add(DataAsset->mBuildingClass, newData);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
existingData->ItemFilters.AddUnique(DataAsset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSItemFilters: {0}", mDSBuildingData.Num());
|
||||||
|
}
|
||||||
|
|
||||||
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const {
|
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const {
|
||||||
if (!mDirtAssets.Num()) {
|
if (!mDirtAssets.Num()) {
|
||||||
UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!"));
|
UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!"));
|
||||||
@ -308,6 +333,27 @@ bool URRDADataAssetSubsystem::HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGB
|
|||||||
return IsValid(GetDSAdapterCoverDataAssetForBuildingClass(BuildingClass));
|
return IsValid(GetDSAdapterCoverDataAssetForBuildingClass(BuildingClass));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> URRDADataAssetSubsystem::GetDSItemFiltersDataAssetsForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const {
|
||||||
|
if (!BuildingClass) return TArray<URRDADataAssetDSItemFilter*>{};
|
||||||
|
|
||||||
|
const FRRDADataHolderDSBuildingData* data = mDSBuildingData.Find(BuildingClass);
|
||||||
|
if (data == nullptr) return TArray<URRDADataAssetDSItemFilter*>{};
|
||||||
|
|
||||||
|
return data->ItemFilters;
|
||||||
|
}
|
||||||
|
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> URRDADataAssetSubsystem::GetAllDSItemFiltersDataAssets() const {
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> Assets;
|
||||||
|
TArray<FRRDADataHolderDSBuildingData> buildingDatas;
|
||||||
|
|
||||||
|
mDSBuildingData.GenerateValueArray(buildingDatas);
|
||||||
|
|
||||||
|
for (FRRDADataHolderDSBuildingData& buildingData : buildingDatas) {
|
||||||
|
Assets.Append(buildingData.ItemFilters);
|
||||||
|
}
|
||||||
|
return Assets;
|
||||||
|
}
|
||||||
|
|
||||||
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
|
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
|
||||||
if (!mTurbineAssets.Contains(Tier)) {
|
if (!mTurbineAssets.Contains(Tier)) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -0,0 +1,31 @@
|
|||||||
|
// Fill out your copyright notice in the Description page of Project Settings.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "DataAssets/RRDADataAssetBase.h"
|
||||||
|
#include "Resources/FGItemDescriptor.h"
|
||||||
|
#include "RRDADataAssetDSItemFilter.generated.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
UCLASS()
|
||||||
|
class REFINEDRDAPI_API URRDADataAssetDSItemFilter : public URRDADataAssetBase
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
/* The Building class this item filter should be used on */
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
|
||||||
|
TSubclassOf<AFGBuildableFactory> mBuildingClass;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
|
||||||
|
int mInventoryIndex = 0;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
|
||||||
|
int mInventorySlotIndex = 0;
|
||||||
|
|
||||||
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
|
||||||
|
TArray<TSubclassOf<UFGItemDescriptor>> mItemFilterClasses;
|
||||||
|
};
|
@ -13,6 +13,7 @@
|
|||||||
#include "DataAssets/RRDAHeaterDataAsset.h"
|
#include "DataAssets/RRDAHeaterDataAsset.h"
|
||||||
#include "DataAssets/RRDATurbineDataAsset.h"
|
#include "DataAssets/RRDATurbineDataAsset.h"
|
||||||
#include "DataAssets/RRDACoolerDataAsset.h"
|
#include "DataAssets/RRDACoolerDataAsset.h"
|
||||||
|
#include "DataAssets/RRDADataAssetDSItemFilter.h"
|
||||||
#include "DataAssets/RRDADataAssetDSModAdapter.h"
|
#include "DataAssets/RRDADataAssetDSModAdapter.h"
|
||||||
#include "Enums/RRDARPEnums.h"
|
#include "Enums/RRDARPEnums.h"
|
||||||
#include "Resources/FGItemDescriptor.h"
|
#include "Resources/FGItemDescriptor.h"
|
||||||
@ -66,6 +67,9 @@ struct FRRDADataHolderDSBuildingData
|
|||||||
|
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
URRDADataAssetDSModAdapter* ModAdapter;
|
URRDADataAssetDSModAdapter* ModAdapter;
|
||||||
|
|
||||||
|
UPROPERTY()
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> ItemFilters;
|
||||||
};
|
};
|
||||||
|
|
||||||
UCLASS()
|
UCLASS()
|
||||||
@ -98,6 +102,7 @@ public:
|
|||||||
void ReCacheGeneratorDataAssets();
|
void ReCacheGeneratorDataAssets();
|
||||||
void ReCacheDSModAdapterDataAssets();
|
void ReCacheDSModAdapterDataAssets();
|
||||||
void ReCacheDSAdapterCoversDataAssets();
|
void ReCacheDSAdapterCoversDataAssets();
|
||||||
|
void ReCacheDSItemFilters();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Dirt Functions
|
// Dirt Functions
|
||||||
@ -133,6 +138,14 @@ public:
|
|||||||
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
|
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
|
||||||
bool HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass);
|
bool HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass);
|
||||||
|
|
||||||
|
// DS Item Filters
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> GetDSItemFiltersDataAssetsForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const;
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS")
|
||||||
|
TArray<URRDADataAssetDSItemFilter*> GetAllDSItemFiltersDataAssets() const;
|
||||||
|
|
||||||
// Turbine Functions
|
// Turbine Functions
|
||||||
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
|
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
|
||||||
bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
|
bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user