DEADSOFTWARE

Better crafting
[cavedroid.git] / core / src / ru / deadsoftware / cavedroid / game / GameItemsHolder.kt
index 832845eb0c11f60f2ae6168661d1a99961b28c37..050ae6fe442acacc4d3c20211d94b7200738182c 100644 (file)
@@ -83,7 +83,7 @@ class GameItemsHolder @Inject constructor(
 
         jsonMap.forEach { (key, value) ->
             craftingRecipes += CraftingRecipe(
-                input = value.input.map(::getItem),
+                input = value.input.map(::Regex),
                 output = CraftingResult(getItem(key), value.count)
             )
         }
@@ -131,8 +131,20 @@ class GameItemsHolder @Inject constructor(
     }
 
     fun craftItem(input: List<Item>): InventoryItem? {
+        val startIndex = input.indexOfFirst { !it.isNone() }.takeIf { it >= 0 } ?: return null
+
         return  try {
-            craftingRecipes.first { rec -> rec.input == input}.output.toInventoryItem()
+            craftingRecipes.first { rec ->
+                for (i in rec.input.indices) {
+                    if (startIndex + i >= input.size) {
+                        return@first rec.input.subList(i, rec.input.size).all { it.matches("none") }
+                    }
+                    if (!input[startIndex + i].params.key.matches(rec.input[i])) {
+                        return@first false
+                    }
+                }
+                return@first true
+            }.output.toInventoryItem()
         } catch (e: NoSuchElementException) {
             null
         }