diff --git a/RefinedRDApi.uplugin b/RefinedRDApi.uplugin index c9d6a2e..753fa26 100644 --- a/RefinedRDApi.uplugin +++ b/RefinedRDApi.uplugin @@ -29,5 +29,5 @@ "SemVersion": "^3.8.0" } ], - "GameVersion": ">=365306" + "GameVersion": ">=377620" } \ No newline at end of file diff --git a/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSAdapterCovers.cpp b/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSAdapterCovers.cpp new file mode 100644 index 0000000..afa4099 --- /dev/null +++ b/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSAdapterCovers.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "DataAssets/RRDADataAssetDSAdapterCovers.h" + diff --git a/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSModAdapter.cpp b/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSModAdapter.cpp new file mode 100644 index 0000000..30c4e6c --- /dev/null +++ b/Source/RefinedRDApi/Private/DataAssets/RRDADataAssetDSModAdapter.cpp @@ -0,0 +1,5 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "DataAssets/RRDADataAssetDSModAdapter.h" + diff --git a/Source/RefinedRDApi/Private/Structs/RRDADSStructs.cpp b/Source/RefinedRDApi/Private/Structs/RRDADSStructs.cpp new file mode 100644 index 0000000..cc89985 --- /dev/null +++ b/Source/RefinedRDApi/Private/Structs/RRDADSStructs.cpp @@ -0,0 +1 @@ +#include "Structs/RRDADSStructs.h" diff --git a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp index 6c92047..654c390 100644 --- a/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp +++ b/Source/RefinedRDApi/Private/Subsystems/RRDADataAssetSubsystem.cpp @@ -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 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>& Items) const { if(!mDirtAssets.Num()) @@ -214,6 +228,27 @@ TArray URRDADataAssetSubsystem::GetAllDirtAssets() const { return Assets; } +int32 URRDADataAssetSubsystem::GetAllModAdapterBuildingClasses(TArray>& OutBuildingClasses) const { + if(!mDSModAdapterAssets.Num()) + { + UE_LOG(LogRRDApi, Error, TEXT("No Mod Adapter Assets found!")); + } + return mDSModAdapterAssets.GetKeys(OutBuildingClasses); +} + +URRDADataAssetDSModAdapter* URRDADataAssetSubsystem::GetModAdapterDataAssetForBuildingClass(TSubclassOf BuildingClass) const { + if(!BuildingClass) return nullptr; + URRDADataAssetDSModAdapter* const* DataAsset = mDSModAdapterAssets.Find(BuildingClass); + if(!DataAsset) return nullptr; + return *DataAsset; +} + +TArray URRDADataAssetSubsystem::GetAllModAdapterDataAssets() const { + TArray Assets; + mDSModAdapterAssets.GenerateValueArray(Assets); + return Assets; +} + bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray>& Items, int32 Tier) const { if(!mTurbineAssets.Contains(Tier)) { diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSAdapterCovers.h b/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSAdapterCovers.h new file mode 100644 index 0000000..3247657 --- /dev/null +++ b/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSAdapterCovers.h @@ -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 mBuildableClass; + + /* The offsets to place the cover mesh from the buildings origin */ + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="AdapterCovers") + TArray mConnectionOffsets; +}; diff --git a/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSModAdapter.h b/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSModAdapter.h new file mode 100644 index 0000000..542b23d --- /dev/null +++ b/Source/RefinedRDApi/Public/DataAssets/RRDADataAssetDSModAdapter.h @@ -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 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 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; +}; diff --git a/Source/RefinedRDApi/Public/Enums/RRDADSEnums.h b/Source/RefinedRDApi/Public/Enums/RRDADSEnums.h new file mode 100644 index 0000000..8a870dd --- /dev/null +++ b/Source/RefinedRDApi/Public/Enums/RRDADSEnums.h @@ -0,0 +1,11 @@ +#pragma once + +#include "CoreMinimal.h" + +UENUM(BlueprintType) +enum class ERRDADSInventorySlotAccess : uint8 +{ + None, + ImportToNetworkFromSlot, + ExportFromNetworkToSlot, +}; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/Structs/RRDADSStructs.h b/Source/RefinedRDApi/Public/Structs/RRDADSStructs.h new file mode 100644 index 0000000..4ae3755 --- /dev/null +++ b/Source/RefinedRDApi/Public/Structs/RRDADSStructs.h @@ -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 mInventorySlots; +}; \ No newline at end of file diff --git a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h index 26dc6fa..833b565 100644 --- a/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h +++ b/Source/RefinedRDApi/Public/Subsystems/RRDADataAssetSubsystem.h @@ -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 Item) const; - UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|FF") TArray GetAllDirtAssets() const; + // DS Mod Adapter Functions + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS") + int32 GetAllModAdapterBuildingClasses(TArray>& OutBuildingClasses) const; + + UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS") + URRDADataAssetDSModAdapter* GetModAdapterDataAssetForBuildingClass(TSubclassOf BuildingClass) const; + + UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS") + TArray GetAllModAdapterDataAssets() const; + // Turbine Functions UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") bool GetAllTurbineItems(TArray>& Items, int32 Tier) const; @@ -171,6 +184,9 @@ public: public: UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TMap, URRDADirtDataAsset*> mDirtAssets; + + UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") + TMap, URRDADataAssetDSModAdapter*> mDSModAdapterAssets; UPROPERTY(BlueprintReadOnly, Category = "RRDA|DataAsset") TMap mGeneratorAssets;