From bbe38671f31ca2a6ecb42de46d7b677c381eb23b Mon Sep 17 00:00:00 2001 From: mircearoata Date: Fri, 26 Nov 2021 22:11:29 +0200 Subject: [PATCH] Fix customization recipes not being registered --- .../Private/Registry/ModContentRegistry.cpp | 48 ++++++++++++------- .../SML/Public/Registry/ModContentRegistry.h | 3 ++ 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/Plugins/SML/Source/SML/Private/Registry/ModContentRegistry.cpp b/Plugins/SML/Source/SML/Private/Registry/ModContentRegistry.cpp index d7e605b357..359d52cad2 100644 --- a/Plugins/SML/Source/SML/Private/Registry/ModContentRegistry.cpp +++ b/Plugins/SML/Source/SML/Private/Registry/ModContentRegistry.cpp @@ -10,6 +10,7 @@ #include "FGSchematicManager.h" #include "FGTutorialIntroManager.h" #include "Unlocks/FGUnlockRecipe.h" +#include "FGCustomizationRecipe.h" #include "IPlatformFilePak.h" #include "Patching/NativeHookManager.h" #include "Reflection/ReflectionHelper.h" @@ -268,24 +269,32 @@ void AModContentRegistry::OnSchematicPurchased(TSubclassOf Schemat } void AModContentRegistry::MarkItemDescriptorsFromRecipe(const TSubclassOf& Recipe, const FName ModReference) { - TArray AllReferencedItems; - AllReferencedItems.Append(UFGRecipe::GetIngredients(Recipe)); - AllReferencedItems.Append(UFGRecipe::GetProducts(Recipe)); + TArray AllReferencedItems; + AllReferencedItems.Append(UFGRecipe::GetIngredients(Recipe)); + AllReferencedItems.Append(UFGRecipe::GetProducts(Recipe)); - for (const FItemAmount& ItemAmount : AllReferencedItems) { - const TSubclassOf& ItemDescriptor = ItemAmount.ItemClass; + for (const FItemAmount& ItemAmount : AllReferencedItems) { + const TSubclassOf& ItemDescriptor = ItemAmount.ItemClass; - CHECK_PROVIDED_OBJECT_VALID(ItemDescriptor, TEXT("Recipe '%s' registered by %s contains invalid NULL ItemDescriptor in it's Ingredients or Results"), - *Recipe->GetPathName(), *ModReference.ToString()); + CHECK_PROVIDED_OBJECT_VALID(ItemDescriptor, TEXT("Recipe '%s' registered by %s contains invalid NULL ItemDescriptor in it's Ingredients or Results"), + *Recipe->GetPathName(), *ModReference.ToString()); - TSharedPtr ItemRegistrationInfo = ItemRegistryState.FindObject(ItemDescriptor); - if (!ItemRegistrationInfo.IsValid()) { - const FName OwnerModReference = FindContentOwnerFast(ItemDescriptor); - ItemRegistrationInfo = RegisterItemDescriptor(OwnerModReference, ModReference, ItemDescriptor); - } - //Associate item registration info with this recipe - ItemRegistrationInfo->ReferencedBy.AddUnique(Recipe); - } + TSharedPtr ItemRegistrationInfo = ItemRegistryState.FindObject(ItemDescriptor); + if (!ItemRegistrationInfo.IsValid()) { + const FName OwnerModReference = FindContentOwnerFast(ItemDescriptor); + ItemRegistrationInfo = RegisterItemDescriptor(OwnerModReference, ModReference, ItemDescriptor); + } + //Associate item registration info with this recipe + ItemRegistrationInfo->ReferencedBy.AddUnique(Recipe); + } +} + +void AModContentRegistry::MarkCustomizationRecipeFromRecipe(const TSubclassOf& Recipe, const FName ModReference) { + TSubclassOf CustomizationRecipe = UFGRecipe::GetMaterialCustomizationRecipe(Recipe); + + if (IsValid(CustomizationRecipe)) { + RegisterRecipe(ModReference, CustomizationRecipe); + } } TSharedPtr AModContentRegistry::RegisterItemDescriptor(const FName OwnerModReference, const FName RegistrarModReference, const TSubclassOf& ItemDescriptor) { @@ -434,10 +443,13 @@ void AModContentRegistry::RegisterRecipe(const FName ModReference, const TSubcla MakeRegistrationInfo(Recipe, OwnerModReference, ModReference)); //Process registration callback - OnRecipeRegistered.Broadcast(Recipe, *RegistrationInfo); + OnRecipeRegistered.Broadcast(Recipe, *RegistrationInfo); + + //Associate referenced item descriptors with this recipe registrar + MarkItemDescriptorsFromRecipe(Recipe, ModReference); - //Associate referenced item descriptors with this recipe registrar - MarkItemDescriptorsFromRecipe(Recipe, ModReference); + //Associate referenced customization recipe with this recipe registrar + MarkCustomizationRecipeFromRecipe(Recipe, ModReference); } } diff --git a/Plugins/SML/Source/SML/Public/Registry/ModContentRegistry.h b/Plugins/SML/Source/SML/Public/Registry/ModContentRegistry.h index 944dda3be2..5418e6006f 100644 --- a/Plugins/SML/Source/SML/Public/Registry/ModContentRegistry.h +++ b/Plugins/SML/Source/SML/Public/Registry/ModContentRegistry.h @@ -364,6 +364,9 @@ class SML_API AModContentRegistry : public AModSubsystem { /** Associate items referenced in recipe with given mod reference if they are not associated already */ void MarkItemDescriptorsFromRecipe(const TSubclassOf& Recipe, const FName ModReference); + + /** Associate the customization recipe referenced in recipe with given mod reference if it is not associated already */ + void MarkCustomizationRecipeFromRecipe(const TSubclassOf& Recipe, const FName ModReference); TSharedPtr RegisterItemDescriptor(const FName OwnerModReference, const FName RegistrarModReference, const TSubclassOf& ItemDescriptor);