From 9b42908273abdf8f24feb14114ef1188be2a21a1 Mon Sep 17 00:00:00 2001 From: Evan Debenham Date: Fri, 17 Aug 2018 21:56:57 -0400 Subject: [PATCH] v0.7.0: corrected issues with simple recipes & multiple of the same item --- .../shatteredpixeldungeon/items/Recipe.java | 39 ++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java index 39232f5ec..30ecfa514 100644 --- a/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java +++ b/core/src/main/java/com/shatteredpixel/shatteredpixeldungeon/items/Recipe.java @@ -51,7 +51,7 @@ public abstract class Recipe { public static abstract class SimpleRecipe extends Recipe { //*** These elements must be filled in by subclasses - protected Class[] inputs; + protected Class[] inputs; //each class should be unique protected int[] inQuantity; protected int cost; @@ -62,20 +62,24 @@ public abstract class Recipe { @Override public final boolean testIngredients(ArrayList ingredients) { - boolean found; - for(int i = 0; i < inputs.length; i++){ - found = false; - for (Item ingredient : ingredients){ - if (ingredient.getClass() == inputs[i] - && ingredient.quantity() >= inQuantity[i]){ - found = true; + + int[] needed = inQuantity.clone(); + + for (Item ingredient : ingredients){ + for (int i = 0; i < inputs.length; i++){ + if (ingredient.getClass() == inputs[i]){ + needed[i] -= ingredient.quantity(); break; } } - if (!found){ + } + + for (int i : needed){ + if (i > 0){ return false; } } + return true; } @@ -87,11 +91,18 @@ public abstract class Recipe { public final Item brew(ArrayList ingredients) { if (!testIngredients(ingredients)) return null; - for(int i = 0; i < inputs.length; i++){ - for (Item ingredient : ingredients){ - if (ingredient.getClass() == inputs[i]){ - ingredient.quantity( ingredient.quantity()-inQuantity[i]); - break; + int[] needed = inQuantity.clone(); + + for (Item ingredient : ingredients){ + for (int i = 0; i < inputs.length; i++) { + if (ingredient.getClass() == inputs[i] && needed[i] > 0) { + if (needed[i] <= ingredient.quantity()) { + ingredient.quantity(ingredient.quantity() - needed[i]); + needed[i] = 0; + } else { + needed[i] -= ingredient.quantity(); + ingredient.quantity(0); + } } } }