feat: DS Adapter data assets

This commit is contained in:
mrhid6 2024-11-11 16:47:42 +00:00
parent 31b8963757
commit 4aa2b4ccb0
10 changed files with 185 additions and 5 deletions

View File

@ -29,5 +29,5 @@
"SemVersion": "^3.8.0"
}
],
"GameVersion": ">=365306"
"GameVersion": ">=377620"
}

View File

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

View File

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

View File

@ -0,0 +1 @@
#include "Structs/RRDADSStructs.h"

View File

@ -6,9 +6,10 @@
#include "AssetRegistry/AssetRegistryModule.h"
#include "DataAssets/RRDABoilerDataAsset.h"
#include "DataAssets/RRDACoolerDataAsset.h"
#include "DataAssets/RRDAGeneratorDataAsset.h"
#include "DataAssets/RRDADataAssetDSModAdapter.h"
#include "DataAssets/RRDAHeaterDataAsset.h"
#include "DataAssets/RRDATurbineDataAsset.h"
#include "Logging/StructuredLog.h"
URRDADataAssetSubsystem::URRDADataAssetSubsystem() {}
@ -56,12 +57,11 @@ void URRDADataAssetSubsystem::Deinitialize()
mCoolerAssets.Empty();
mHeaterAssets.Empty();
mGeneratorAssets.Empty();
mDSModAdapterAssets.Empty();
}
void URRDADataAssetSubsystem::StartScanForDataAssets()
{
// UAssetManager& Manager = UAssetManager::Get();
// Manager.LoadPrimaryAssetsWithType(FPrimaryAssetType("RRDADataAsset"));
mDisabledDataAssets.Empty();
mEnabledDataAssets.Empty();
@ -71,6 +71,7 @@ void URRDADataAssetSubsystem::StartScanForDataAssets()
ReCacheHeaterDataAssets();
ReCacheTurbineDataAssets();
ReCacheGeneratorDataAssets();
ReCacheDSModAdapterDataAssets();
}
void URRDADataAssetSubsystem::ReCacheDirtDataAssets()
@ -191,6 +192,19 @@ void URRDADataAssetSubsystem::ReCacheGeneratorDataAssets()
UE_LOG(LogRRDApi, Log, TEXT("ReCacheGeneratorDataAssets: %d"), mGeneratorAssets.Num());
}
void URRDADataAssetSubsystem::ReCacheDSModAdapterDataAssets() {
mDSModAdapterAssets.Empty();
TSet<URRDADataAssetDSModAdapter*> DataAssets;
if(FindAllDataAssetsOfClass(DataAssets))
{
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets)
{
mDSModAdapterAssets.Add(DataAsset->mBuildingClass, DataAsset);
}
}
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSModAdapterDataAssets: {0}", mDSModAdapterAssets.Num());
}
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const
{
if(!mDirtAssets.Num())
@ -214,6 +228,27 @@ TArray<URRDADirtDataAsset*> URRDADataAssetSubsystem::GetAllDirtAssets() const {
return Assets;
}
int32 URRDADataAssetSubsystem::GetAllModAdapterBuildingClasses(TArray<TSubclassOf<AFGBuildableFactory>>& OutBuildingClasses) const {
if(!mDSModAdapterAssets.Num())
{
UE_LOG(LogRRDApi, Error, TEXT("No Mod Adapter Assets found!"));
}
return mDSModAdapterAssets.GetKeys(OutBuildingClasses);
}
URRDADataAssetDSModAdapter* URRDADataAssetSubsystem::GetModAdapterDataAssetForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const {
if(!BuildingClass) return nullptr;
URRDADataAssetDSModAdapter* const* DataAsset = mDSModAdapterAssets.Find(BuildingClass);
if(!DataAsset) return nullptr;
return *DataAsset;
}
TArray<URRDADataAssetDSModAdapter*> URRDADataAssetSubsystem::GetAllModAdapterDataAssets() const {
TArray<URRDADataAssetDSModAdapter*> Assets;
mDSModAdapterAssets.GenerateValueArray(Assets);
return Assets;
}
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const
{
if(!mTurbineAssets.Contains(Tier)) {

View File

@ -0,0 +1,27 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Buildables/FGBuildableFactory.h"
#include "DataAssets/RRDADataAssetBase.h"
#include "Structs/RRDADSStructs.h"
#include "RRDADataAssetDSAdapterCovers.generated.h"
/**
*
*/
UCLASS()
class REFINEDRDAPI_API URRDADataAssetDSAdapterCovers : public URRDADataAssetBase
{
GENERATED_BODY()
public:
/* The building class this adapter cover belongs to */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AdapterCovers")
TSubclassOf<AFGBuildableFactory> mBuildableClass;
/* The offsets to place the cover mesh from the buildings origin */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AdapterCovers")
TArray<FRRDADSAdapterOffset> mConnectionOffsets;
};

View File

@ -0,0 +1,41 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "RRDADataAssetDSAdapterCovers.h"
#include "Buildables/FGBuildableFactory.h"
#include "DataAssets/RRDADataAssetBase.h"
#include "Structs/RRDADSStructs.h"
#include "RRDADataAssetDSModAdapter.generated.h"
/**
*
*/
UCLASS()
class REFINEDRDAPI_API URRDADataAssetDSModAdapter : public URRDADataAssetBase
{
GENERATED_BODY()
public:
/* The Building class to snap to when placing */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ModAdapter")
TSubclassOf<AFGBuildableFactory> mBuildingClass;
/* The Adapter Cover Asset */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ModAdapter")
URRDADataAssetDSAdapterCovers* mAdapterCoversAsset;
/* Select which inventories can be accessed by Digital Storage */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ModAdapter")
TArray<FRRDADSModAdapterInventoryAccess> mInventoryAccess;
UPROPERTY( meta=(NoAutoJson = true) )
bool mOverrideNetworkConnectionTransform = false;
/* By default the adapter will use the Power Connection Components Transform
* Override this and manually set the transform
*/
UPROPERTY( EditDefaultsOnly, BlueprintReadOnly, Category = "ModAdapter", meta = ( EditCondition = mOverrideNetworkConnectionTransform ) )
FTransform mNetworkConnectionRelativeTransform;
};

View File

@ -0,0 +1,11 @@
#pragma once
#include "CoreMinimal.h"
UENUM(BlueprintType)
enum class ERRDADSInventorySlotAccess : uint8
{
None,
ImportToNetworkFromSlot,
ExportFromNetworkToSlot,
};

View File

@ -0,0 +1,39 @@
#pragma once
#include "Enums/RRDADSEnums.h"
#include "Math/Transform.h"
#include "RRDADSStructs.generated.h"
USTRUCT( BlueprintType )
struct REFINEDRDAPI_API FRRDADSAdapterOffset
{
GENERATED_BODY()
public:
/* The relative transform from the buildings origin */
UPROPERTY(EditDefaultsOnly)
FTransform mRelativeTransform;
/* If the cover should be a conveyor cover or a pipe cover */
UPROPERTY(EditDefaultsOnly)
bool bIsConveyor = true;
};
USTRUCT( BlueprintType )
struct REFINEDRDAPI_API FRRDADSModAdapterInventoryAccess
{
GENERATED_BODY()
public:
/* The Inventory Name to search for */
UPROPERTY(EditDefaultsOnly)
FName mInventoryName;
/* The Inventory index to search for in case couldn't find by name */
UPROPERTY(EditDefaultsOnly)
int mInventoryIndex = 0;
/* The Inventory slots to allow access to Digital Storage */
UPROPERTY(EditDefaultsOnly)
TMap<int, ERRDADSInventorySlotAccess> mInventorySlots;
};

View File

@ -5,6 +5,7 @@
#include "CoreMinimal.h"
#include "RefinedRDApi.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "Buildables/FGBuildableFactory.h"
#include "DataAssets/RRDADataAssetBase.h"
#include "DataAssets/RRDADirtDataAsset.h"
#include "DataAssets/RRDABoilerDataAsset.h"
@ -12,6 +13,7 @@
#include "DataAssets/RRDAHeaterDataAsset.h"
#include "DataAssets/RRDATurbineDataAsset.h"
#include "DataAssets/RRDACoolerDataAsset.h"
#include "DataAssets/RRDADataAssetDSModAdapter.h"
#include "Enums/RRDARPEnums.h"
#include "Resources/FGItemDescriptor.h"
@ -82,6 +84,7 @@ public:
void ReCacheCoolerDataAssets();
void ReCacheHeaterDataAssets();
void ReCacheGeneratorDataAssets();
void ReCacheDSModAdapterDataAssets();
public:
// Dirt Functions
@ -91,9 +94,19 @@ public:
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|FF")
URRDADirtDataAsset* GetDataForDirtItem(TSubclassOf<UFGItemDescriptor> Item) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|FF")
TArray<URRDADirtDataAsset*> GetAllDirtAssets() const;
// DS Mod Adapter Functions
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS")
int32 GetAllModAdapterBuildingClasses(TArray<TSubclassOf<AFGBuildableFactory>>& OutBuildingClasses) const;
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
URRDADataAssetDSModAdapter* GetModAdapterDataAssetForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS")
TArray<URRDADataAssetDSModAdapter*> GetAllModAdapterDataAssets() const;
// Turbine Functions
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
@ -171,6 +184,9 @@ public:
public:
UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset")
TMap<TSubclassOf<UFGItemDescriptor>, URRDADirtDataAsset*> mDirtAssets;
UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset")
TMap<TSubclassOf<AFGBuildableFactory>, URRDADataAssetDSModAdapter*> mDSModAdapterAssets;
UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset")
TMap<int32, URRDAGeneratorDataAsset*> mGeneratorAssets;