X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=core%2Fsrc%2Fru%2Fdeadsoftware%2Fcavedroid%2Fgame%2FGameItemsHolder.kt;h=050ae6fe442acacc4d3c20211d94b7200738182c;hb=9606fce8cc7c9b264abd7cb38583faaebb610540;hp=832845eb0c11f60f2ae6168661d1a99961b28c37;hpb=387ad284ceb79b07cba3726fa7350b7e83916815;p=cavedroid.git diff --git a/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt b/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt index 832845e..050ae6f 100644 --- a/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt +++ b/core/src/ru/deadsoftware/cavedroid/game/GameItemsHolder.kt @@ -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): 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 }