feat: wip
This commit is contained in:
28
Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h
Normal file
28
Source/RefinedRDApi/Public/DataAssets/RRDABoilerDataAsset.h
Normal file
@@ -0,0 +1,28 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "RRDADataAssetBase.h"
|
||||
#include "ItemAmount.h"
|
||||
|
||||
#include "RRDABoilerDataAsset.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDABoilerDataAsset : public URRDADataAssetBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* Fuel item that this heater uses
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Boiler")
|
||||
FItemAmount mItem;
|
||||
|
||||
/**
|
||||
* What this boiler produces
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Boiler")
|
||||
FItemAmount mOutputItem;
|
||||
};
|
||||
22
Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h
Normal file
22
Source/RefinedRDApi/Public/DataAssets/RRDACoolerDataAsset.h
Normal file
@@ -0,0 +1,22 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "ItemAmount.h"
|
||||
#include "RRDADataAssetBase.h"
|
||||
|
||||
#include "RRDACoolerDataAsset.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDACoolerDataAsset : public URRDADataAssetBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* Fuel item that this heater uses
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cooler")
|
||||
FItemAmount mItem;
|
||||
};
|
||||
42
Source/RefinedRDApi/Public/DataAssets/RRDADataAssetBase.h
Normal file
42
Source/RefinedRDApi/Public/DataAssets/RRDADataAssetBase.h
Normal file
@@ -0,0 +1,42 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
#include "RRDADataAssetBase.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDADataAssetBase : public UPrimaryDataAsset
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Can be overridden to disable the asset or make some other checks
|
||||
*/
|
||||
virtual bool IsEnabled_Internal(UObject* WorldContextObject) const
|
||||
{
|
||||
return !mIsDisabled;
|
||||
}
|
||||
|
||||
virtual FPrimaryAssetId GetPrimaryAssetId() const override
|
||||
{
|
||||
return FPrimaryAssetId(FPrimaryAssetType("RRDADataAsset"), GetFName());
|
||||
}
|
||||
|
||||
public:
|
||||
UFUNCTION( BlueprintPure, Category="FicsitFarming|Dirt" )
|
||||
static bool IsEnabled(URRDADataAssetBase* Asset, UObject* WorldContextObject)
|
||||
{
|
||||
if(!Asset) return false;
|
||||
return Asset->IsEnabled_Internal(WorldContextObject);
|
||||
};
|
||||
|
||||
/**
|
||||
* Disable this asset from being used in the game
|
||||
* For example if a mod is disabling some content from another mod
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Asset")
|
||||
bool mIsDisabled;
|
||||
};
|
||||
51
Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h
Normal file
51
Source/RefinedRDApi/Public/DataAssets/RRDADirtDataAsset.h
Normal file
@@ -0,0 +1,51 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "RRDADataAssetBase.h"
|
||||
#include "ItemAmount.h"
|
||||
|
||||
#include "RRDADirtDataAsset.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDADirtDataAsset : public URRDADataAssetBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
UFUNCTION( BlueprintPure, Category="FicsitFarming|Dirt" )
|
||||
static TArray<FItemAmount> GetExtractableSeed(URRDADirtDataAsset* Asset);
|
||||
|
||||
UFUNCTION( BlueprintPure, Category="FicsitFarming|Dirt" )
|
||||
static float GetExtractionCycleTime(URRDADirtDataAsset* Asset);
|
||||
|
||||
UFUNCTION( BlueprintPure, Category="FicsitFarming|Dirt" )
|
||||
static int32 GetDirtConsume(URRDADirtDataAsset* Asset);
|
||||
|
||||
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")
|
||||
TSubclassOf<UFGItemDescriptor> mItem;
|
||||
|
||||
/**
|
||||
* Seeds that can be extracted from this dirt every cycle
|
||||
*/
|
||||
UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" )
|
||||
TArray<FItemAmount> mExtractableSeed;
|
||||
|
||||
/**
|
||||
* Production time for the extraction of seeds
|
||||
*/
|
||||
UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" )
|
||||
float mExtractionCycleTime = 6.0f;
|
||||
|
||||
/**
|
||||
* How much dirt should be consumed?
|
||||
*/
|
||||
UPROPERTY( EditAnywhere, BlueprintReadWrite, Category="FicsitFarming" )
|
||||
int32 mDirtConsume = 2;
|
||||
};
|
||||
36
Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h
Normal file
36
Source/RefinedRDApi/Public/DataAssets/RRDAHeaterDataAsset.h
Normal file
@@ -0,0 +1,36 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "RRDADataAssetBase.h"
|
||||
#include "ItemAmount.h"
|
||||
#include "Enums/RRDARPEnums.h"
|
||||
|
||||
#include "RRDAHeaterDataAsset.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDAHeaterDataAsset : public URRDADataAssetBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* What type of heater this is
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Heater")
|
||||
ERRDAHeaterType mHeaterType;
|
||||
|
||||
/**
|
||||
* Fuel item that this heater uses
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Heater")
|
||||
FItemAmount mInput;
|
||||
|
||||
/**
|
||||
* Item that this turbine produces
|
||||
* @Note - Can be nullptr
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Heater")
|
||||
FItemAmount mOutput;
|
||||
};
|
||||
29
Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h
Normal file
29
Source/RefinedRDApi/Public/DataAssets/RRDATurbineDataAsset.h
Normal file
@@ -0,0 +1,29 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "RRDADataAssetBase.h"
|
||||
#include "ItemAmount.h"
|
||||
|
||||
#include "RRDATurbineDataAsset.generated.h"
|
||||
|
||||
UCLASS( BlueprintType )
|
||||
class REFINEDRDAPI_API URRDATurbineDataAsset : public URRDADataAssetBase
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
/**
|
||||
* Fuel item that this heater uses
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine")
|
||||
FItemAmount mItem;
|
||||
|
||||
/**
|
||||
* Item that this turbine produces
|
||||
* @Note - Can be nullptr so that the turbine doesn't produce anything
|
||||
*/
|
||||
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Turbine")
|
||||
FItemAmount mWasteItem;
|
||||
};
|
||||
19
Source/RefinedRDApi/Public/Enums/RRDARPEnums.h
Normal file
19
Source/RefinedRDApi/Public/Enums/RRDARPEnums.h
Normal file
@@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class ERRDAHeaterType : uint8
|
||||
{
|
||||
Biomass,
|
||||
Coal,
|
||||
Solution,
|
||||
Nuclear
|
||||
};
|
||||
|
||||
UENUM(BlueprintType)
|
||||
enum class ERRDACoolerType : uint8
|
||||
{
|
||||
Chemical,
|
||||
Steam
|
||||
};
|
||||
11
Source/RefinedRDApi/Public/RefinedRDApi.h
Normal file
11
Source/RefinedRDApi/Public/RefinedRDApi.h
Normal file
@@ -0,0 +1,11 @@
|
||||
#pragma once
|
||||
|
||||
DECLARE_LOG_CATEGORY_EXTERN(LogRRDApi, Log, All)
|
||||
|
||||
class FRefinedRDApiModule : public IModuleInterface
|
||||
{
|
||||
public:
|
||||
/** IModuleInterface implementation */
|
||||
virtual void StartupModule() override;
|
||||
virtual void ShutdownModule() override;
|
||||
};
|
||||
0
Source/RefinedRDApi/Public/Structs/.gitkeep
Normal file
0
Source/RefinedRDApi/Public/Structs/.gitkeep
Normal file
132
Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h
Normal file
132
Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h
Normal file
@@ -0,0 +1,132 @@
|
||||
// Fill out your copyright notice in the Description page of Project Settings.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "RefinedRDApi.h"
|
||||
#include "AssetRegistry/AssetRegistryModule.h"
|
||||
#include "DataAssets/RRDADataAssetBase.h"
|
||||
#include "DataAssets/RRDADirtDataAsset.h"
|
||||
#include "Engine/AssetManager.h"
|
||||
#include "Enums/RRDARPEnums.h"
|
||||
#include "Resources/FGItemDescriptor.h"
|
||||
|
||||
#include "RRDADataAssetSubsystem.generated.h"
|
||||
|
||||
class IAssetRegistry;
|
||||
|
||||
UCLASS()
|
||||
class REFINEDRDAPI_API URRDADataAssetSubsystem : public UWorldSubsystem
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
URRDADataAssetSubsystem();
|
||||
|
||||
static URRDADataAssetSubsystem* Get(UObject* Context);
|
||||
static URRDADataAssetSubsystem* GetChecked(UObject* Context);
|
||||
|
||||
/** Implement this for initialization of instances of the system */
|
||||
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||
|
||||
virtual void Deinitialize() override;
|
||||
|
||||
/**
|
||||
* Note: call this function only in the constructor of the subsystem OR if you change some mDisabled value in runtime to refresh cached data
|
||||
*/
|
||||
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset")
|
||||
void StartScanForDataAssets();
|
||||
|
||||
void ReCacheDirtDataAssets();
|
||||
void ReCacheTurbineDataAssets();
|
||||
void ReCacheBoilerDataAssets();
|
||||
void ReCacheCoolerDataAssets();
|
||||
void ReCacheHeaterDataAssets();
|
||||
|
||||
public:
|
||||
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;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Find all data assets of a specific class
|
||||
* @param OutDataAssets - Set of data assets
|
||||
* @return true if found any data assets
|
||||
*/
|
||||
template<class T>
|
||||
bool FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets);
|
||||
|
||||
private:
|
||||
UPROPERTY()
|
||||
TMap<TSubclassOf<UFGItemDescriptor>, class 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;
|
||||
|
||||
public:
|
||||
UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")
|
||||
TSet<URRDADataAssetBase*> mDisabledDataAssets;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Transient, Category = "RRDA|DataAsset")
|
||||
TSet<URRDADataAssetBase*> mAllDataAssets;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
bool URRDADataAssetSubsystem::FindAllDataAssetsOfClass(TSet<T*>& OutDataAssets)
|
||||
{
|
||||
OutDataAssets.Empty();
|
||||
|
||||
// This doesn't work the AssetDatas are always invalid
|
||||
/*UAssetManager& Manager = UAssetManager::Get();
|
||||
|
||||
TArray<FAssetData> AssetDatas;
|
||||
Manager.GetPrimaryAssetDataList(FPrimaryAssetType("RRDADataAsset"), AssetDatas);
|
||||
|
||||
for (FAssetData AssetData : AssetDatas)
|
||||
{
|
||||
if(AssetData.IsValid())
|
||||
{
|
||||
if(URRDADataAssetBase* Asset = Cast<URRDADataAssetBase>(AssetData.GetAsset()))
|
||||
{
|
||||
if(!URRDADataAssetBase::IsEnabled(Asset, GetWorld()))
|
||||
{
|
||||
UE_LOG(LogRRDApi, Error, TEXT("Asset Disabled: %s"), *AssetData.AssetName.ToString());
|
||||
continue;
|
||||
}
|
||||
|
||||
OutDataAssets.Add(Cast<T>(Asset));
|
||||
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *AssetData.GetAsset()->GetPathName());
|
||||
}
|
||||
} else
|
||||
{
|
||||
UE_LOG(LogRRDApi, Error, TEXT("Invalid AssetData: %s"), *AssetData.AssetName.ToString());
|
||||
return false;
|
||||
}
|
||||
}*/
|
||||
|
||||
TArray<UClass*> FoundClasses;
|
||||
GetDerivedClasses(T::StaticClass(), FoundClasses, true);
|
||||
|
||||
for (UClass* FoundClass : FoundClasses)
|
||||
{
|
||||
if(FoundClass->IsNative()) continue;
|
||||
|
||||
if(URRDADataAssetBase* Asset = FoundClass->GetDefaultObject<URRDADataAssetBase>())
|
||||
{
|
||||
if(!URRDADataAssetBase::IsEnabled(Asset, GetWorld()))
|
||||
{
|
||||
UE_LOG(LogRRDApi, Error, TEXT("Asset Disabled: %s"), *FoundClass->GetPathName());
|
||||
continue;
|
||||
}
|
||||
OutDataAssets.Add(FoundClass->GetDefaultObject<T>());
|
||||
UE_LOG(LogRRDApi, Log, TEXT("Found %s"), *FoundClass->GetPathName());
|
||||
}
|
||||
}
|
||||
|
||||
return OutDataAssets.Num() > 0;
|
||||
}
|
||||
Reference in New Issue
Block a user