From ce944794dc97d0f15365556d3e56f0c64bf76840 Mon Sep 17 00:00:00 2001 From: Kyrium Date: Sun, 27 Oct 2024 12:42:17 +0100 Subject: [PATCH] feat: functions for Turbine --- .../DataAssets/RRDAGeneratorDataAsset.cpp | 3 + .../DataAssets/RRDATurbineDataAsset.cpp | 10 ++- .../Subsystems/RRDADataAssetSubsystem.cpp | 83 +++++++++++++++++++ .../DataAssets/RRDAGeneratorDataAsset.h | 40 +++++++++ .../Public/DataAssets/RRDATurbineDataAsset.h | 26 ++++++ .../Subsystems/RRDADataAssetSubsystem.h | 39 +++++++-- 6 files changed, 195 insertions(+), 6 deletions(-) create mode 100644 Source/RefinedRDApi/Private/DataAssets/RRDAGeneratorDataAsset.cpp create mode 100644 Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h diff --git a/Source/RefinedRDApi/Private/DataAssets/RRDAGeneratorDataAsset.cpp b/Source/RefinedRDApi/Private/DataAssets/RRDAGeneratorDataAsset.cpp new file mode 100644 index 0000000..24840a3 --- /dev/null +++ b/Source/RefinedRDApi/Private/DataAssets/RRDAGeneratorDataAsset.cpp @@ -0,0 +1,3 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#include "DataAssets/RRDAGeneratorDataAsset.h" \ No newline at end of file diff --git a/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp b/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp index 5ce1b30..a89e0e3 100644 --- a/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp +++ b/Source/RefinedRDApi/Private/DataAssets/RRDATurbineDataAsset.cpp @@ -1,3 +1,11 @@ // Fill out your copyright notice in the Description page of Project Settings. -#include "DataAssets/RRDATurbineDataAsset.h" \ No newline at end of file +#include "DataAssets/RRDATurbineDataAsset.h" + +bool URRDATurbineDataAsset::IsEnabled_Internal(UObject* WorldContextObject) const +{ + fgcheck(mTier > 0); + fgcheck(mRPMDrag > 0); + fgcheck(mMaxRPM > 0); + 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 d3af460..b4b6191 100644 --- a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp +++ b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp @@ -6,6 +6,7 @@ #include "AssetRegistry/AssetRegistryModule.h" #include "DataAssets/RRDABoilerDataAsset.h" #include "DataAssets/RRDACoolerDataAsset.h" +#include "DataAssets/RRDAGeneratorDataAsset.h" #include "DataAssets/RRDAHeaterDataAsset.h" #include "DataAssets/RRDATurbineDataAsset.h" @@ -69,6 +70,7 @@ void URRDADataAssetSubsystem::StartScanForDataAssets() ReCacheDirtDataAssets(); ReCacheHeaterDataAssets(); ReCacheTurbineDataAssets(); + ReCacheGeneratorDataAssets(); } void URRDADataAssetSubsystem::ReCacheDirtDataAssets() @@ -178,6 +180,21 @@ void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() { UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num()); } +void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets() +{ + mHeaterAssets.Empty(); + TSet DataAssets; + if(FindAllDataAssetsOfClass(DataAssets)) + { + for (URRDAGeneratorDataAsset* DataAsset : DataAssets) + { + mGeneratorAssets.Add(DataAsset->mTier, DataAsset); + } + } + + UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num()); +} + int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray>& Items) const { return mDirtAssets.GetKeys(Items); @@ -191,3 +208,69 @@ URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf URRDADataAssetSubsystem::GetAllDirtAssets() const { + TArray Assets; + mDirtAssets.GenerateValueArray(Assets); + return Assets; +} + +bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray>& Items, int32 Tier) const +{ + if(!mTurbineAssets.Contains(Tier)) { + return false; + } + + Items.Empty(); + mTurbineAssets[Tier].GetKeys(Items); + + return true; +} + +bool URRDADataAssetSubsystem::GetAllTurbineRelevantItems(TArray>& Items, int32 Tier) const { + if(!mTurbineAssets.Contains(Tier)) { + return false; + } + + Items.Empty(); + for (TTuple, URRDATurbineDataAsset*> TurbineAsset : mTurbineAssets[Tier]) + { + Items.AddUnique(TurbineAsset.Key); + if(TurbineAsset.Value->mWasteItem.ItemClass) { + Items.AddUnique(TurbineAsset.Value->mWasteItem.ItemClass); + } + } + + return true; +} + +TArray URRDADataAssetSubsystem::GetAllTurbineAssets(int32 Tier) const { + if(!mTurbineAssets.Contains(Tier)) { + return TArray(); + } + + TArray Assets; + mTurbineAssets[Tier].GenerateValueArray(Assets); + return Assets; +} + +URRDATurbineDataAsset* URRDADataAssetSubsystem::GetDefaultTurbineAsset(int32 Tier) const { + if(!mTurbineAssets.Contains(Tier)) { + return nullptr; + } + + TArray Assets; + mTurbineAssets[Tier].GenerateValueArray(Assets); + + // Return the first item in the tier + return Assets[0]; +} + +URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf Item, int32 Tier) const +{ + if(!mTurbineAssets.Contains(Tier)) { + return nullptr; + } + + return mTurbineAssets[Tier].FindRef(Item); +} + diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h new file mode 100644 index 0000000..a36b45a --- /dev/null +++ b/Source/RefinedRDApi/Public/DataAssets/RRDAGeneratorDataAsset.h @@ -0,0 +1,40 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "RRDADataAssetBase.h" +#include "ItemAmount.h" + +#include "RRDAGeneratorDataAsset.generated.h" + +UCLASS( BlueprintType ) +class REFINEDRDAPI_API URRDAGeneratorDataAsset : public URRDADataAssetBase +{ + GENERATED_BODY() + +public: + /** + * Fuel item that this heater uses + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine", meta=( UIMin = "1", UIMax = "5" ) ) + int32 mTier = 1; + + /** + * Maximum power output of the generator + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + float mMaxPowerOutput; + + /** + * Maximum RPM of the generator + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + int mMaxRPM; + + /** + * Curve that defines the power output of the generator + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Mp Generator" ) + UCurveFloat* mGeneratorCurve; +}; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h b/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h index be9a3a6..b739f68 100644 --- a/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h +++ b/Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h @@ -13,6 +13,8 @@ class REFINEDRDAPI_API URRDATurbineDataAsset : public URRDADataAssetBase { GENERATED_BODY() + virtual bool IsEnabled_Internal(UObject* WorldContextObject) const override; + public: /** * Fuel item that this heater uses @@ -38,4 +40,28 @@ public: */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine") float mDuration = 6.f; + + /** + * The time it takes to handle the RPM (slow down or speed up) + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine" ) + float mRPHandleTime = 0.025f; + + /** + * How much the RPM should be dragged down by + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine" ) + int mRPMDrag = 5; + + /** + * Maximum RPM that this turbine can reach + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine" ) + int mMaxRPM = 10000; + + /** + * Multiplier for the RPM + */ + UPROPERTY( EditAnywhere, BlueprintReadWrite, Category = "Turbine" ) + float mRPMMultiplier = 2; }; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h index 0f1f15d..7b5e44e 100644 --- a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h +++ b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h @@ -7,6 +7,11 @@ #include "AssetRegistry/AssetRegistryModule.h" #include "DataAssets/RRDADataAssetBase.h" #include "DataAssets/RRDADirtDataAsset.h" +#include "DataAssets/RRDABoilerDataAsset.h" +#include "DataAssets/RRDAGeneratorDataAsset.h" +#include "DataAssets/RRDAHeaterDataAsset.h" +#include "DataAssets/RRDATurbineDataAsset.h" +#include "DataAssets/RRDACoolerDataAsset.h" #include "Enums/RRDARPEnums.h" #include "Resources/FGItemDescriptor.h" @@ -41,14 +46,35 @@ public: void ReCacheBoilerDataAssets(); void ReCacheCoolerDataAssets(); void ReCacheHeaterDataAssets(); + void ReCacheGeneratorDataAssets(); public: + // Dirt Functions UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|FF") int32 GetAllDirtItems(TArray>& Items) const; UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|FF") URRDADirtDataAsset* GetDataForDirtItem(TSubclassOf Item) const; + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + TArray GetAllDirtAssets() const; + + // Turbine Functions + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllTurbineItems(TArray>& Items, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDATurbineDataAsset* GetTurbineItemData(TSubclassOfItem, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + bool GetAllTurbineRelevantItems(TArray>& Items, int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + URRDATurbineDataAsset* GetDefaultTurbineAsset(int32 Tier) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + TArray GetAllTurbineAssets(int32 Tier) const; + public: /** * Find all data assets of a specific class @@ -60,12 +86,15 @@ public: private: UPROPERTY() - TMap, class URRDADirtDataAsset*> mDirtAssets; + TMap, URRDADirtDataAsset*> mDirtAssets; - TMap, class URRDATurbineDataAsset*>> mTurbineAssets; - TMap, class URRDABoilerDataAsset*>> mBoilerAssets; - TMap, class URRDACoolerDataAsset*>> mCoolerAssets; - TMap, class URRDAHeaterDataAsset*>> mHeaterAssets; + UPROPERTY() + TMap mGeneratorAssets; + + TMap, URRDATurbineDataAsset*>> mTurbineAssets; + TMap, URRDABoilerDataAsset*>> mBoilerAssets; + TMap, URRDACoolerDataAsset*>> mCoolerAssets; + TMap, URRDAHeaterDataAsset*>> mHeaterAssets; public: UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")