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.
#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 "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<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
{
return mDirtAssets.GetKeys(Items);
@ -191,3 +208,69 @@ URRDADirtDataAsset* URRDADataAssetSubsystem::GetDataForDirtItem(TSubclassOf<UFGI
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()
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;
};

View File

@ -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<TSubclassOf<UFGItemDescriptor>>& Items) const;
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|FF")
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:
/**
* Find all data assets of a specific class
@ -60,12 +86,15 @@ public:
private:
UPROPERTY()
TMap<TSubclassOf<UFGItemDescriptor>, class URRDADirtDataAsset*> mDirtAssets;
TMap<TSubclassOf<UFGItemDescriptor>, URRDADirtDataAsset*> mDirtAssets;
TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, class URRDATurbineDataAsset*>> mTurbineAssets;
TMap<int32, TMap<TSubclassOf<UFGItemDescriptor>, class URRDABoilerDataAsset*>> mBoilerAssets;
TMap<ERRDACoolerType, TMap<TSubclassOf<UFGItemDescriptor>, class URRDACoolerDataAsset*>> mCoolerAssets;
TMap<ERRDAHeaterType, TMap<TSubclassOf<UFGItemDescriptor>, class URRDAHeaterDataAsset*>> mHeaterAssets;
UPROPERTY()
TMap<int32, URRDAGeneratorDataAsset*> mGeneratorAssets;
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:
UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")