From 86362e2658204d8f0881d36148ea64e2284175d5 Mon Sep 17 00:00:00 2001 From: Kyrium Date: Sun, 27 Oct 2024 19:49:15 +0100 Subject: [PATCH] feat: RP asset functions --- .../DataAssets/RRDATurbineDataAsset.cpp | 15 +- .../Subsystems/RRDADataAssetSubsystem.cpp | 208 +++++++++++++----- .../Public/DataAssets/RRDABoilerDataAsset.h | 8 +- .../Public/DataAssets/RRDACoolerDataAsset.h | 2 +- .../Public/DataAssets/RRDADirtDataAsset.h | 8 +- .../DataAssets/RRDAGeneratorDataAsset.h | 8 +- .../Public/DataAssets/RRDAHeaterDataAsset.h | 9 + .../Public/DataAssets/RRDATurbineDataAsset.h | 2 +- .../Subsystems/RRDADataAssetSubsystem.h | 100 ++++++++- 9 files changed, 281 insertions(+), 79 deletions(-) diff --git a/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp b/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp index a89e0e3..e37ba5b 100644 --- a/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp +++ b/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp @@ -4,8 +4,17 @@ bool URRDATurbineDataAsset::IsEnabled_Internal(UObject* WorldContextObject) const { - fgcheck(mTier > 0); - fgcheck(mRPMDrag > 0); - fgcheck(mMaxRPM > 0); + // If this Asset is not disabled we want to check that all the values are valid + if(!mIsDisabled) + { + fgcheckf(mTier > 0, TEXT("%s: mTier must be larger then 0"), *GetName()); + fgcheckf(mRPMDrag > 0, TEXT("%s: mRPMDrag must be larger then 0"), *GetName()); + fgcheckf(mMaxRPM > 0, TEXT("%s: mMaxRPM must be larger then 0"), *GetName()); + fgcheckf(mRPMMultiplier > 0.f, TEXT("%s: mMaxRPM must be larger then 0"), *GetName()); + fgcheckf(mRPHandleTime > 0.f, TEXT("%s: mRPHandleTime must be larger then 0"), *GetName()); + fgcheckf(mDuration > 0.f, TEXT("%s: mDuration must be larger then 0"), *GetName()); + fgcheckf(mItem.Amount > 0, TEXT("%s: mItem.Amount must be larger then 0"), *GetName()); + fgcheckf(mItem.ItemClass, TEXT("%s: mItem.ItemClass must be valid"), *GetName()); + } return Super::IsEnabled_Internal(WorldContextObject); } \ No newline at end of file diff --git a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp index 0dc7a81..6c92047 100644 --- a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp +++ b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp @@ -55,13 +55,13 @@ void URRDADataAssetSubsystem::Deinitialize() mBoilerAssets.Empty(); mCoolerAssets.Empty(); mHeaterAssets.Empty(); + mGeneratorAssets.Empty(); } void URRDADataAssetSubsystem::StartScanForDataAssets() { - UAssetManager& Manager = UAssetManager::Get(); - Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset")); - + // UAssetManager& Manager = UAssetManager::Get(); + // Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset")); mDisabledDataAssets.Empty(); mEnabledDataAssets.Empty(); @@ -91,98 +91,94 @@ void URRDADataAssetSubsystem::ReCacheTurbineDataAssets() { mTurbineAssets.Empty(); TSet DataAssets; + int32 Added = 0; if(FindAllDataAssetsOfClass(DataAssets)) { for (URRDATurbineDataAsset* DataAsset : DataAssets) { if(!mTurbineAssets.Contains(DataAsset->mTier)) { - mTurbineAssets.Add(DataAsset->mTier, TMap, URRDATurbineDataAsset*>()); + mTurbineAssets.Add(DataAsset->mTier, FRRDADataHolderTurbineData()); } - if(!DataAsset->mItem.ItemClass) { - UE_LOG(LogRRDApi, Fatal, TEXT("TurbineDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - continue; - } + fgcheckf(DataAsset->mItem.ItemClass, TEXT("TurbineDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - mTurbineAssets[DataAsset->mTier].Add(DataAsset->mItem.ItemClass, DataAsset); + mTurbineAssets[DataAsset->mTier].Data.Add(DataAsset->mItem.ItemClass, DataAsset); + Added++; } } - UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets: %d"), mTurbineAssets.Num()); + UE_LOG(LogRRDApi, Log, TEXT("ReCacheTurbineDataAssets: %d"), Added); } void URRDADataAssetSubsystem::ReCacheBoilerDataAssets() { mBoilerAssets.Empty(); TSet DataAssets; + int32 Added = 0; if(FindAllDataAssetsOfClass(DataAssets)) { for (URRDABoilerDataAsset* DataAsset : DataAssets) { if(!mBoilerAssets.Contains(DataAsset->mTier)) { - mBoilerAssets.Add(DataAsset->mTier, TMap, URRDABoilerDataAsset*>()); + mBoilerAssets.Add(DataAsset->mTier, FRRDADataHolderBoilerData()); } - if(!DataAsset->mInput.ItemClass) { - UE_LOG(LogRRDApi, Fatal, TEXT("BoilerDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - continue; - } + fgcheckf(DataAsset->mInput.ItemClass, TEXT("BoilerDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - mBoilerAssets[DataAsset->mTier].Add(DataAsset->mInput.ItemClass, DataAsset); + mBoilerAssets[DataAsset->mTier].Data.Add(DataAsset->mInput.ItemClass, DataAsset); + Added++; } } - UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets: %d"), mTurbineAssets.Num()); + UE_LOG(LogRRDApi, Log, TEXT("ReCacheBoilerDataAssets: %d"), Added); } void URRDADataAssetSubsystem::ReCacheCoolerDataAssets() { mCoolerAssets.Empty(); TSet DataAssets; + int32 Added = 0; if(FindAllDataAssetsOfClass(DataAssets)) { for (URRDACoolerDataAsset* DataAsset : DataAssets) { if(!mCoolerAssets.Contains(DataAsset->mType)) { - mCoolerAssets.Add(DataAsset->mType, TMap, URRDACoolerDataAsset*>()); + mCoolerAssets.Add(DataAsset->mType, FRRDADataHolderCoolerData()); } - if(!DataAsset->mItem) { - UE_LOG(LogRRDApi, Fatal, TEXT("CoolerDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - continue; - } + fgcheckf(DataAsset->mItem, TEXT("CoolerDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - mCoolerAssets[DataAsset->mType].Add(DataAsset->mItem, DataAsset); + mCoolerAssets[DataAsset->mType].Data.Add(DataAsset->mItem, DataAsset); + Added++; } } - UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets: %d"), mTurbineAssets.Num()); + UE_LOG(LogRRDApi, Log, TEXT("ReCacheCoolerDataAssets: %d"), Added); } void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() { mHeaterAssets.Empty(); TSet DataAssets; + int32 Added = 0; if(FindAllDataAssetsOfClass(DataAssets)) { for (URRDAHeaterDataAsset* DataAsset : DataAssets) { if(!mHeaterAssets.Contains(DataAsset->mType)) { - mHeaterAssets.Add(DataAsset->mType, TMap, URRDAHeaterDataAsset*>()); + mHeaterAssets.Add(DataAsset->mType, FRRDADataHolderHeaterData()); } + + fgcheckf(DataAsset->mInput.ItemClass, TEXT("HeaterDataAsset %s has no ItemClass"), *DataAsset->GetPathName()); - 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); + mHeaterAssets[DataAsset->mType].Data.Add(DataAsset->mInput.ItemClass, DataAsset); + Added++; } } - UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num()); + UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), Added); } void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets() { - mHeaterAssets.Empty(); + mGeneratorAssets.Empty(); TSet DataAssets; if(FindAllDataAssetsOfClass(DataAssets)) { @@ -192,11 +188,15 @@ void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets() } } - UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num()); + UE_LOG(LogRRDApi, Log, TEXT("ReCacheGeneratorDataAssets: %d"), mGeneratorAssets.Num()); } int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray>& Items) const { + if(!mDirtAssets.Num()) + { + UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!")); + } return mDirtAssets.GetKeys(Items); } @@ -221,40 +221,36 @@ bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray>& Items, int32 Tier) const { - if(!mTurbineAssets.Contains(Tier)) { - return false; - } - Items.Empty(); - for (TTuple, URRDATurbineDataAsset*> TurbineAsset : mTurbineAssets[Tier]) + for (URRDATurbineDataAsset* Asset : GetAllTurbineAssets(Tier)) { - Items.AddUnique(TurbineAsset.Key); - if(TurbineAsset.Value->mWasteItem.ItemClass) { - Items.AddUnique(TurbineAsset.Value->mWasteItem.ItemClass); + Items.AddUnique(Asset->mItem.ItemClass); + if(Asset->mWasteItem.ItemClass) { + Items.AddUnique(Asset->mWasteItem.ItemClass); } } - - return true; + return Items.Num() > 0; } TArray URRDADataAssetSubsystem::GetAllTurbineAssets(int32 Tier) const { if(!mTurbineAssets.Contains(Tier)) { + UE_LOG(LogRRDApi, Error, TEXT("No TurbineAssets found for Type: %d"), Tier); return TArray(); } TArray Assets; - mTurbineAssets[Tier].GenerateValueArray(Assets); + mTurbineAssets[Tier].Data.GenerateValueArray(Assets); return Assets; } URRDATurbineDataAsset* URRDADataAssetSubsystem::GetDefaultTurbineAsset(int32 Tier) const { - return GetAllTurbineAssets(Tier)[0]; + return GetAllTurbineAssets(Tier).Top(); } URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf Item, int32 Tier) const @@ -263,7 +259,7 @@ URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf 0; } URRDACoolerDataAsset* URRDADataAssetSubsystem::GetCoolerItemData(TSubclassOf Item, ERRDACoolerType Type) const { if(!mCoolerAssets.Contains(Type)) return nullptr; - return mCoolerAssets[Type].FindRef(Item); + return mCoolerAssets[Type].Data.FindRef(Item); } URRDACoolerDataAsset* URRDADataAssetSubsystem::GetDefaultCoolerAsset(ERRDACoolerType Type) const { - return GetAllCoolerAssets(Type)[0]; + return GetAllCoolerAssets(Type).Top(); } TArray URRDADataAssetSubsystem::GetAllCoolerAssets(ERRDACoolerType Type) const { - if(!mCoolerAssets.Contains(Type)) return TArray(); + if(!mCoolerAssets.Contains(Type)) + { + UE_LOG(LogRRDApi, Error, TEXT("No CoolerAssets found for Type: %d"), Type); + return TArray(); + } TArray Assets; - mCoolerAssets[Type].GenerateValueArray(Assets); + mCoolerAssets[Type].Data.GenerateValueArray(Assets); + + return Assets; +} + +URRDAGeneratorDataAsset* URRDADataAssetSubsystem::GetGeneratorItemData(int32 Tier) const { + UE_LOG(LogRRDApi, Log, TEXT("GetGeneratorItemData: %d"), Tier); + if(!mGeneratorAssets.Contains(Tier)) return nullptr; + return mGeneratorAssets.FindRef(Tier); +} + +bool URRDADataAssetSubsystem::GetAllBoilerItems(TArray>& Items, int32 Tier) const +{ + if(!mBoilerAssets.Contains(Tier)) return false; + + mBoilerAssets[Tier].Data.GetKeys(Items); + + return Items.Num() > 0; +} + +URRDABoilerDataAsset* URRDADataAssetSubsystem::GetBoilerItemData(TSubclassOf Item, int32 Tier) const +{ + if(!mBoilerAssets.Contains(Tier)) return nullptr; + return mBoilerAssets[Tier].Data.FindRef(Item); +} + +bool URRDADataAssetSubsystem::GetAllBoilerRelevantItems(TArray>& Items, int32 Tier) const +{ + Items.Empty(); + for (URRDABoilerDataAsset* Asset : GetAllBoilerAssets(Tier)) + { + Items.AddUnique(Asset->mInput.ItemClass); + if(Asset->mOutput.ItemClass) { + Items.AddUnique(Asset->mOutput.ItemClass); + } + } + return Items.Num() > 0; +} + +URRDABoilerDataAsset* URRDADataAssetSubsystem::GetDefaultBoilerAsset(int32 Tier) const +{ + return GetAllBoilerAssets(Tier).Top(); +} + +TArray URRDADataAssetSubsystem::GetAllBoilerAssets(int32 Tier) const +{ + if(!mBoilerAssets.Contains(Tier)) + { + UE_LOG(LogRRDApi, Error, TEXT("No BoilerAssets found for Type: %d"), Tier); + return TArray(); + } + + TArray Assets; + mBoilerAssets[Tier].Data.GenerateValueArray(Assets); + + return Assets; +} + +bool URRDADataAssetSubsystem::GetAllHeaterItems(TArray>& Items, ERRDAHeaterType Type) const { + if(!mHeaterAssets.Contains(Type)) return false; + + mHeaterAssets[Type].Data.GetKeys(Items); + + return Items.Num() > 0; +} + +URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetHeaterItemData(TSubclassOf Item, ERRDAHeaterType Type) const +{ + if(!mHeaterAssets.Contains(Type)) return nullptr; + + return mHeaterAssets[Type].Data.FindRef(Item); +} + +bool URRDADataAssetSubsystem::GetAllHeaterRelevantItems(TArray>& Items, ERRDAHeaterType Type) const +{ + Items.Empty(); + for (URRDAHeaterDataAsset* HeaterAsset : GetAllHeaterAssets(Type)) + { + Items.AddUnique(HeaterAsset->mInput.ItemClass); + if(HeaterAsset->mOutput.ItemClass) { + Items.AddUnique(HeaterAsset->mOutput.ItemClass); + } + } + return Items.Num() > 0; +} + +URRDAHeaterDataAsset* URRDADataAssetSubsystem::GetDefaultHeaterAsset(ERRDAHeaterType Type) const +{ + return GetAllHeaterAssets(Type).Top(); +} + +TArray URRDADataAssetSubsystem::GetAllHeaterAssets(ERRDAHeaterType Type) const +{ + if(!mHeaterAssets.Contains(Type)) + { + UE_LOG(LogRRDApi, Error, TEXT("No HeaterAssets found for Type: %d"), Type); + return TArray(); + } + + TArray Assets; + mHeaterAssets[Type].Data.GenerateValueArray(Assets); return Assets; } diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h index 89894f6..f8271ed 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h @@ -17,7 +17,7 @@ public: /** * Fuel item that this heater uses */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine", meta=( UIMin = "1", UIMax = "2" )) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Boiler") int32 mTier = 1; /** @@ -37,4 +37,10 @@ public: */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Boiler") float mDuration = 6.f; + + /** + * Curve for the production to Heat + */ + UPROPERTY( EditDefaultsOnly, BlueprintReadOnly, Category = "Boiler" ) + UCurveFloat* mBoilerCurve; }; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h index 180970c..94f9392 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h @@ -18,7 +18,7 @@ public: /** * What type of heater this is */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Heater") + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cooler") ERRDACoolerType mType = ERRDACoolerType::Chemical; /** diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h index 94a2799..aaf0243 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h @@ -28,24 +28,24 @@ public: * What Item should be a Dirt? * @warning - If 2 DirtDataAssets have the same Item, the game will use the last one which was loaded */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "FicsitFarming") + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Dirt") TSubclassOf mItem; /** * Seeds that can be extracted from this dirt every cycle */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Dirt" ) TArray mExtractableSeed; /** * Production time for the extraction of seeds */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Dirt" ) float mExtractionCycleTime = 6.0f; /** * How much dirt should be consumed? */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="Dirt" ) int32 mDirtConsume = 2; }; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h index a36b45a..68951cd 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h @@ -17,24 +17,24 @@ public: /** * Fuel item that this heater uses */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine", meta=( UIMin = "1", UIMax = "5" ) ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Generator", meta=( UIMin = "1", UIMax = "5" ) ) int32 mTier = 1; /** * Maximum power output of the generator */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Generator" ) float mMaxPowerOutput; /** * Maximum RPM of the generator */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Generator" ) int mMaxRPM; /** * Curve that defines the power output of the generator */ - UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Generator" ) UCurveFloat* mGeneratorCurve; }; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h index 47121e7..82286a2 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h @@ -39,4 +39,13 @@ public: */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Heater") float mDuration = 6.f; + + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Heater" ) + float mHeat = 1; + + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Heater" ) + float mMaxHeatValue = 500; + + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Heater" ) + float mMinHeatValue = 20; }; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h index b739f68..09adcf2 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h @@ -19,7 +19,7 @@ public: /** * Fuel item that this heater uses */ - UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine", meta=( UIMin = "1", UIMax = "2" )) + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine") int32 mTier = 1; /** diff --git a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h index 3897f6f..26dc6fa 100644 --- a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h +++ b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h @@ -17,7 +17,42 @@ #include "RRDADataAssetSubsystem.generated.h" -class IAssetRegistry; +// We need this otherwise some of the cache will GC'd +USTRUCT(BlueprintType) +struct FRRDADataHolderTurbineData +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadOnly) + TMap, URRDATurbineDataAsset*> Data; +}; + +USTRUCT(BlueprintType) +struct FRRDADataHolderBoilerData +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadOnly) + TMap, URRDABoilerDataAsset*> Data; +}; + +USTRUCT(BlueprintType) +struct FRRDADataHolderCoolerData +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadOnly) + TMap, URRDACoolerDataAsset*> Data; +}; + +USTRUCT(BlueprintType) +struct FRRDADataHolderHeaterData +{ + GENERATED_BODY() + + UPROPERTY(BlueprintReadOnly) + TMap, URRDAHeaterDataAsset*> Data; +}; UCLASS() class REFINEDRDAPI_API URRDADataAssetSubsystem : public UGameInstanceSubsystem @@ -88,6 +123,42 @@ public: UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") TArray GetAllCoolerAssets(ERRDACoolerType Type) const; + // Generator Functions + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDAGeneratorDataAsset* GetGeneratorItemData(int32 Tier) const; + + // Boiler Functions + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllBoilerItems(TArray>& Items, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDABoilerDataAsset* GetBoilerItemData(TSubclassOfItem, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllBoilerRelevantItems(TArray>& Items, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDABoilerDataAsset* GetDefaultBoilerAsset(int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + TArray GetAllBoilerAssets(int32 Tier) const; + + // Heater Functions + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllHeaterItems(TArray>& Items, ERRDAHeaterType Type) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDAHeaterDataAsset* GetHeaterItemData(TSubclassOfItem, ERRDAHeaterType Type) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllHeaterRelevantItems(TArray>& Items, ERRDAHeaterType Type) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDAHeaterDataAsset* GetDefaultHeaterAsset(ERRDAHeaterType Type) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + TArray GetAllHeaterAssets(ERRDAHeaterType Type) const; + public: /** * Find all data assets of a specific class @@ -97,23 +168,29 @@ public: template bool FindAllDataAssetsOfClass(TSet& OutDataAssets); -private: - UPROPERTY() +public: + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TMap, URRDADirtDataAsset*> mDirtAssets; - UPROPERTY() + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TMap mGeneratorAssets; - TMap, URRDATurbineDataAsset*>> mTurbineAssets; - TMap, URRDABoilerDataAsset*>> mBoilerAssets; - TMap, URRDACoolerDataAsset*>> mCoolerAssets; - TMap, URRDAHeaterDataAsset*>> mHeaterAssets; + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") + TMap mTurbineAssets; + + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") + TMap mBoilerAssets; + + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") + TMap mCoolerAssets; + + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") + TMap mHeaterAssets; -public: - UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset") + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TSet mDisabledDataAssets; - UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset") + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TSet mEnabledDataAssets; }; @@ -155,5 +232,6 @@ bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet& OutDataAssets) } } + UE_LOG(LogRRDApi, Warning, TEXT("Found %d of: %s"), OutDataAssets.Num(), *T::StaticClass()->GetPathName()); return OutDataAssets.Num() > 0; } \ No newline at end of file