4 Commits

Author SHA1 Message Date
mrhid6 f1b737439d Bump version to 1.0.2.
Mod Build / Setup (push) Successful in 3s
Mod Build / PullMods (RefinedRDApi) (push) Successful in 2s
Mod Build / UpdateUPlugins (RefinedRDApi) (push) Successful in 1s
Mod Build / CompileEditor (push) Successful in 3m28s
Mod Build / BuildMods (RefinedRDApi) (push) Successful in 8m11s
Mod Build / SMRDeploy (push) Successful in 30s
2024-11-29 10:23:22 +00:00
mrhid6 0d976de526 feat: Item filters 2024-11-27 13:15:40 +00:00
mrhid6 8e6378208c feat: Additional DS Options 2024-11-26 14:15:02 +00:00
mrhid6 6b2b12cf2a Bump version to 1.0.1.
Mod Build / Setup (push) Successful in 2s
Mod Build / PullMods (RefinedRDApi) (push) Successful in 2s
Mod Build / UpdateUPlugins (RefinedRDApi) (push) Successful in 1s
Mod Build / CompileEditor (push) Successful in 5m26s
Mod Build / BuildMods (RefinedRDApi) (push) Successful in 34m18s
Mod Build / SMRDeploy (push) Successful in 37s
2024-11-25 15:26:06 +00:00
9 changed files with 111 additions and 5 deletions
+1 -1
View File
@@ -68,7 +68,7 @@ jobs:
($UPlugin | convertto-json -Depth 100) -replace '\\u0026', '&' | Set-Content ${{env.SML_DIR}}/Mods/${{matrix.value}}/${{matrix.value}}.uplugin ($UPlugin | convertto-json -Depth 100) -replace '\\u0026', '&' | Set-Content ${{env.SML_DIR}}/Mods/${{matrix.value}}/${{matrix.value}}.uplugin
echo "Done" echo "Done"
CompileEditor: CompileEditor:
needs: UpdateModUPluginDependencies needs: UpdateUPlugins
runs-on: windows-2022 runs-on: windows-2022
outputs: outputs:
version: ${{steps.getversion.outputs.version}} version: ${{steps.getversion.outputs.version}}
+7
View File
@@ -1,3 +1,10 @@
## 1.0.2 (November 29, 2024)
- feat: Item filters
- feat: Additional DS Options
## 1.0.1 (November 25, 2024)
## 1.0.0 (November 25, 2024) ## 1.0.0 (November 25, 2024)
+2 -2
View File
@@ -1,8 +1,8 @@
{ {
"FileVersion": 3, "FileVersion": 3,
"Version": 1, "Version": 1,
"VersionName": "1.0.0", "VersionName": "1.0.2",
"SemVersion": "1.0.0", "SemVersion": "1.0.2",
"FriendlyName": "Refined R&D Api", "FriendlyName": "Refined R&D Api",
"Description": "This Lib can be used to create Mod Compatability with Refined R&D Mods", "Description": "This Lib can be used to create Mod Compatability with Refined R&D Mods",
"Category": "Modding", "Category": "Modding",
@@ -0,0 +1,5 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "DataAssets/RRDADataAssetDSItemFilter.h"
@@ -67,6 +67,7 @@ void URRDADataAssetSubsystem::StartScanForDataAssets() {
ReCacheGeneratorDataAssets(); ReCacheGeneratorDataAssets();
mDSBuildingData.Empty(); mDSBuildingData.Empty();
ReCacheDSItemFilters();
ReCacheDSModAdapterDataAssets(); ReCacheDSModAdapterDataAssets();
ReCacheDSAdapterCoversDataAssets(); ReCacheDSAdapterCoversDataAssets();
} }
@@ -178,6 +179,8 @@ void URRDADataAssetSubsystem::ReCacheDSModAdapterDataAssets() {
TSet<URRDADataAssetDSModAdapter*> DataAssets; TSet<URRDADataAssetDSModAdapter*> DataAssets;
if (FindAllDataAssetsOfClass(DataAssets)) { if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADataAssetDSModAdapter* DataAsset : DataAssets) { for (URRDADataAssetDSModAdapter* DataAsset : DataAssets) {
if (DataAsset->mBuildingClass == nullptr) continue;
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass); FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
if (existingData == nullptr) { if (existingData == nullptr) {
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData(); FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
@@ -197,6 +200,8 @@ void URRDADataAssetSubsystem::ReCacheDSAdapterCoversDataAssets() {
TSet<URRDADataAssetDSAdapterCovers*> DataAssets; TSet<URRDADataAssetDSAdapterCovers*> DataAssets;
if (FindAllDataAssetsOfClass(DataAssets)) { if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADataAssetDSAdapterCovers* DataAsset : DataAssets) { for (URRDADataAssetDSAdapterCovers* DataAsset : DataAssets) {
if (DataAsset->mBuildingClass == nullptr) continue;
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass); FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
if (existingData == nullptr) { if (existingData == nullptr) {
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData(); FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
@@ -211,6 +216,26 @@ void URRDADataAssetSubsystem::ReCacheDSAdapterCoversDataAssets() {
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSAdapterCoversDataAssets: {0}", mDSBuildingData.Num()); UE_LOGFMT(LogRRDApi, Log, "ReCacheDSAdapterCoversDataAssets: {0}", mDSBuildingData.Num());
} }
void URRDADataAssetSubsystem::ReCacheDSItemFilters() {
TSet<URRDADataAssetDSItemFilter*> DataAssets;
if (FindAllDataAssetsOfClass(DataAssets)) {
for (URRDADataAssetDSItemFilter* DataAsset : DataAssets) {
if (DataAsset->mBuildingClass == nullptr) continue;
FRRDADataHolderDSBuildingData* existingData = mDSBuildingData.Find(DataAsset->mBuildingClass);
if (existingData == nullptr) {
FRRDADataHolderDSBuildingData newData = FRRDADataHolderDSBuildingData();
newData.ItemFilters.AddUnique(DataAsset);
mDSBuildingData.Add(DataAsset->mBuildingClass, newData);
}
else {
existingData->ItemFilters.AddUnique(DataAsset);
}
}
}
UE_LOGFMT(LogRRDApi, Log, "ReCacheDSItemFilters: {0}", mDSBuildingData.Num());
}
int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const { int32 URRDADataAssetSubsystem::GetAllDirtItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items) const {
if (!mDirtAssets.Num()) { if (!mDirtAssets.Num()) {
UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!")); UE_LOG(LogRRDApi, Error, TEXT("No Dirts found!"));
@@ -308,6 +333,27 @@ bool URRDADataAssetSubsystem::HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGB
return IsValid(GetDSAdapterCoverDataAssetForBuildingClass(BuildingClass)); return IsValid(GetDSAdapterCoverDataAssetForBuildingClass(BuildingClass));
} }
TArray<URRDADataAssetDSItemFilter*> URRDADataAssetSubsystem::GetDSItemFiltersDataAssetsForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const {
if (!BuildingClass) return TArray<URRDADataAssetDSItemFilter*>{};
const FRRDADataHolderDSBuildingData* data = mDSBuildingData.Find(BuildingClass);
if (data == nullptr) return TArray<URRDADataAssetDSItemFilter*>{};
return data->ItemFilters;
}
TArray<URRDADataAssetDSItemFilter*> URRDADataAssetSubsystem::GetAllDSItemFiltersDataAssets() const {
TArray<URRDADataAssetDSItemFilter*> Assets;
TArray<FRRDADataHolderDSBuildingData> buildingDatas;
mDSBuildingData.GenerateValueArray(buildingDatas);
for (FRRDADataHolderDSBuildingData& buildingData : buildingDatas) {
Assets.Append(buildingData.ItemFilters);
}
return Assets;
}
bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const { bool URRDADataAssetSubsystem::GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const {
if (!mTurbineAssets.Contains(Tier)) { if (!mTurbineAssets.Contains(Tier)) {
return false; return false;
@@ -0,0 +1,31 @@
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "DataAssets/RRDADataAssetBase.h"
#include "Resources/FGItemDescriptor.h"
#include "RRDADataAssetDSItemFilter.generated.h"
/**
*
*/
UCLASS()
class REFINEDRDAPI_API URRDADataAssetDSItemFilter : public URRDADataAssetBase
{
GENERATED_BODY()
public:
/* The Building class this item filter should be used on */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
TSubclassOf<AFGBuildableFactory> mBuildingClass;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
int mInventoryIndex = 0;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
int mInventorySlotIndex = 0;
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="ItemFilter")
TArray<TSubclassOf<UFGItemDescriptor>> mItemFilterClasses;
};
@@ -55,12 +55,16 @@ public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(EditCondition = mOverrideItemFilter)) UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta=(EditCondition = mOverrideItemFilter))
TArray<TSubclassOf<UFGItemDescriptor>> mItemFilter; TArray<TSubclassOf<UFGItemDescriptor>> mItemFilter;
/* Adds only the filtered item from the slot to the Item Selection dropdown. */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
bool mCheckSlotItemFilter = false;
/* Should check if the inventory slot has an Item Filter set /* Should check if the inventory slot has an Item Filter set
This will override the item class that the player selects with the allowed item class on the slot. This will override the item class that the player selects with the allowed item class on the slot.
Also disables item selection in the UI. Also disables item selection in the UI.
*/ */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
bool mCheckSlotItemFilter = false; bool mAutomaticallySetFromSlotItemFilter = false;
}; };
USTRUCT(BlueprintType) USTRUCT(BlueprintType)
@@ -13,6 +13,7 @@
#include "DataAssets/RRDAHeaterDataAsset.h" #include "DataAssets/RRDAHeaterDataAsset.h"
#include "DataAssets/RRDATurbineDataAsset.h" #include "DataAssets/RRDATurbineDataAsset.h"
#include "DataAssets/RRDACoolerDataAsset.h" #include "DataAssets/RRDACoolerDataAsset.h"
#include "DataAssets/RRDADataAssetDSItemFilter.h"
#include "DataAssets/RRDADataAssetDSModAdapter.h" #include "DataAssets/RRDADataAssetDSModAdapter.h"
#include "Enums/RRDARPEnums.h" #include "Enums/RRDARPEnums.h"
#include "Resources/FGItemDescriptor.h" #include "Resources/FGItemDescriptor.h"
@@ -66,6 +67,9 @@ struct FRRDADataHolderDSBuildingData
UPROPERTY() UPROPERTY()
URRDADataAssetDSModAdapter* ModAdapter; URRDADataAssetDSModAdapter* ModAdapter;
UPROPERTY()
TArray<URRDADataAssetDSItemFilter*> ItemFilters;
}; };
UCLASS() UCLASS()
@@ -98,6 +102,7 @@ public:
void ReCacheGeneratorDataAssets(); void ReCacheGeneratorDataAssets();
void ReCacheDSModAdapterDataAssets(); void ReCacheDSModAdapterDataAssets();
void ReCacheDSAdapterCoversDataAssets(); void ReCacheDSAdapterCoversDataAssets();
void ReCacheDSItemFilters();
public: public:
// Dirt Functions // Dirt Functions
@@ -133,6 +138,14 @@ public:
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS") UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
bool HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass); bool HasDSAdaperCoversForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass);
// DS Item Filters
UFUNCTION(BlueprintCallable, Category = "RRDA|DataAsset|DS")
TArray<URRDADataAssetDSItemFilter*> GetDSItemFiltersDataAssetsForBuildingClass(TSubclassOf<AFGBuildableFactory> BuildingClass) const;
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|DS")
TArray<URRDADataAssetDSItemFilter*> GetAllDSItemFiltersDataAssets() const;
// Turbine Functions // Turbine Functions
UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP") UFUNCTION(BlueprintPure, Category = "RRDA|DataAsset|RP|MP")
bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const; bool GetAllTurbineItems(TArray<TSubclassOf<UFGItemDescriptor>>& Items, int32 Tier) const;
+1 -1
View File
@@ -1 +1 @@
1.0.0 1.0.2