feat: functions for Turbine

This commit is contained in:
Kyrium 2024-10-27 12:42:17 +01:00
parent 4e1ea32b9d
commit ce944794dc
6 changed files with 195 additions and 6 deletions

View File

@ -0,0 +1,3 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "DataAssets/RRDAGeneratorDataAsset.h"

View File

@ -1,3 +1,11 @@
// Fill out your copyright notice in the Description page of Project Settings. // Fill out your copyright notice in the Description page of Project Settings.
#include "DataAssets/RRDATurbineDataAsset.h" #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);
}

View File

@ -6,6 +6,7 @@
#include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/AssetRegistryModule.h"
#include "DataAssets/RRDABoilerDataAsset.h" #include "DataAssets/RRDABoilerDataAsset.h"
#include "DataAssets/RRDACoolerDataAsset.h" #include "DataAssets/RRDACoolerDataAsset.h"
#include "DataAssets/RRDAGeneratorDataAsset.h"
#include "DataAssets/RRDAHeaterDataAsset.h" #include "DataAssets/RRDAHeaterDataAsset.h"
#include "DataAssets/RRDATurbineDataAsset.h" #include "DataAssets/RRDATurbineDataAsset.h"
@ -69,6 +70,7 @@ void URRDADataAssetSubsystem::StartScanForDataAssets()
ReCacheDirtDataAssets(); ReCacheDirtDataAssets();
ReCacheHeaterDataAssets(); ReCacheHeaterDataAssets();
ReCacheTurbineDataAssets(); ReCacheTurbineDataAssets();
ReCacheGeneratorDataAssets();
} }
void URRDADataAssetSubsystem::ReCacheDirtDataAssets() void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
@ -178,6 +180,21 @@ void URRDADataAssetSubsystem::ReCacheHeaterDataAssets() {
UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num()); UE_LOG(LogRRDApi, Log, TEXT("ReCacheHeaterDataAssets: %d"), mTurbineAssets.Num());
} }
void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets()
{
mHeaterAssets.Empty();
TSet<URRDAGeneratorDataAsset*> 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<TSubclassOf<UFGItemDescriptor>>& Items) const int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const
{ {
return mDirtAssets.GetKeys(Items); return mDirtAssets.GetKeys(Items);
@ -191,3 +208,69 @@ URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf<UFGI
return *Desc; return *Desc;
} }
TArray<URRDADirtDataAsset*> URRDADataAssetSubsystem::GetAllDirtAssets() const {
TArray<URRDADirtDataAsset*> Assets;
mDirtAssets.GenerateValueArray(Assets);
return Assets;
}
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const
{
if(!mTurbineAssets.Contains(Tier)) {
return false;
}
Items.Empty();
mTurbineAssets[Tier].GetKeys(Items);
return true;
}
bool URRDADataAssetSubsystem::GetAllTurbineRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
if(!mTurbineAssets.Contains(Tier)) {
return false;
}
Items.Empty();
for (TTuple<TSubclassOf<UFGItemDescriptor>, URRDATurbineDataAsset*> TurbineAsset : mTurbineAssets[Tier])
{
Items.AddUnique(TurbineAsset.Key);
if(TurbineAsset.Value->mWasteItem.ItemClass) {
Items.AddUnique(TurbineAsset.Value->mWasteItem.ItemClass);
}
}
return true;
}
TArray<URRDATurbineDataAsset*> URRDADataAssetSubsystem::GetAllTurbineAssets(int32 Tier) const {
if(!mTurbineAssets.Contains(Tier)) {
return TArray<URRDATurbineDataAsset*>();
}
TArray<URRDATurbineDataAsset*> Assets;
mTurbineAssets[Tier].GenerateValueArray(Assets);
return Assets;
}
URRDATurbineDataAsset* URRDADataAssetSubsystem::GetDefaultTurbineAsset(int32 Tier) const {
if(!mTurbineAssets.Contains(Tier)) {
return nullptr;
}
TArray<URRDATurbineDataAsset*> Assets;
mTurbineAssets[Tier].GenerateValueArray(Assets);
// Return the first item in the tier
return Assets[0];
}
URRDATurbineDataAsset* URRDADataAssetSubsystem::GetTurbineItemData(TSubclassOf<UFGItemDescriptor> Item, int32 Tier) const
{
if(!mTurbineAssets.Contains(Tier)) {
return nullptr;
}
return mTurbineAssets[Tier].FindRef(Item);
}

View File

@ -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;
};

View File

@ -13,6 +13,8 @@ class REFINEDRDAPI_API URRDATurbineDataAsset : public URRDADataAssetBase
{ {
GENERATED_BODY() GENERATED_BODY()
virtual bool IsEnabled_Internal(UObject* WorldContextObject) const override;
public: public:
/** /**
* Fuel item that this heater uses * Fuel item that this heater uses
@ -38,4 +40,28 @@ public:
*/ */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine") UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine")
float mDuration = 6.f; 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;
}; };

View File

@ -7,6 +7,11 @@
#include "AssetRegistry/AssetRegistryModule.h" #include "AssetRegistry/AssetRegistryModule.h"
#include "DataAssets/RRDADataAssetBase.h" #include "DataAssets/RRDADataAssetBase.h"
#include "DataAssets/RRDADirtDataAsset.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 "Enums/RRDARPEnums.h"
#include "Resources/FGItemDescriptor.h" #include "Resources/FGItemDescriptor.h"
@ -41,14 +46,35 @@ public:
void ReCacheBoilerDataAssets(); void ReCacheBoilerDataAssets();
void ReCacheCoolerDataAssets(); void ReCacheCoolerDataAssets();
void ReCacheHeaterDataAssets(); void ReCacheHeaterDataAssets();
void ReCacheGeneratorDataAssets();
public: public:
// Dirt Functions
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|FF") UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|FF")
int32 GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const; int32 GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const;
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|FF") UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|FF")
URRDADirtDataAsset* GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const; URRDADirtDataAsset* GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
TArray<URRDADirtDataAsset*> GetAllDirtAssets() const;
// Turbine Functions
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
URRDATurbineDataAsset* GetTurbineItemData(TSubclassOf<UFGItemDescriptor>Item, int32 Tier) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
bool GetAllTurbineRelevantItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
URRDATurbineDataAsset* GetDefaultTurbineAsset(int32 Tier) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
TArray<URRDATurbineDataAsset*> GetAllTurbineAssets(int32 Tier) const;
public: public:
/** /**
* Find all data assets of a specific class * Find all data assets of a specific class
@ -60,12 +86,15 @@ public:
private: private:
UPROPERTY() UPROPERTY()
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets; TMap<TSubclassOf<UFGItemDescriptor>, URRDADirtDataAsset*> mDirtAssets;
TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, class URRDATurbineDataAsset*>> mTurbineAssets; UPROPERTY()
TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, class URRDABoilerDataAsset*>> mBoilerAssets; TMap<int32, URRDAGeneratorDataAsset*> mGeneratorAssets;
TMap<ERRDACoolerType, TMap<TSubclassOf<UFGItemDescriptor>, class URRDACoolerDataAsset*>> mCoolerAssets;
TMap<ERRDAHeaterType, TMap<TSubclassOf<UFGItemDescriptor>, class URRDAHeaterDataAsset*>> mHeaterAssets; TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, URRDATurbineDataAsset*>> mTurbineAssets;
TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, URRDABoilerDataAsset*>> mBoilerAssets;
TMap<ERRDACoolerType, TMap<TSubclassOf<UFGItemDescriptor>, URRDACoolerDataAsset*>> mCoolerAssets;
TMap<ERRDAHeaterType, TMap<TSubclassOf<UFGItemDescriptor>, URRDAHeaterDataAsset*>> mHeaterAssets;
public: public:
UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset") UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")