From 73103e017a25290b5c0d57529eedaa6385e4fce8 Mon Sep 17 00:00:00 2001 From: yairm210 Date: Thu, 31 Oct 2024 10:20:01 +0200 Subject: [PATCH] modding: added "for every adjacent [tileFilter]" unique modifier --- .../com/unciv/models/ruleset/unique/Unique.kt | 16 ++++++++++++++-- .../unciv/models/ruleset/unique/UniqueType.kt | 1 + 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 1958620dc1..deb84f90fd 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -76,19 +76,31 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s } private fun getUniqueMultiplier(stateForConditionals: StateForConditionals): Int { - val forEveryModifiers = getModifiers(UniqueType.ForEveryCountable) - val forEveryAmountModifiers = getModifiers(UniqueType.ForEveryAmountCountable) + var amount = 1 + + val forEveryModifiers = getModifiers(UniqueType.ForEveryCountable) for (conditional in forEveryModifiers) { // multiple multipliers DO multiply. val multiplier = Countables.getCountableAmount(conditional.params[0], stateForConditionals) if (multiplier != null) amount *= multiplier } + + val forEveryAmountModifiers = getModifiers(UniqueType.ForEveryAmountCountable) for (conditional in forEveryAmountModifiers) { // multiple multipliers DO multiply. val multiplier = Countables.getCountableAmount(conditional.params[1], stateForConditionals) val perEvery = conditional.params[0].toInt() if (multiplier != null) amount *= multiplier / perEvery } + if (stateForConditionals.relevantTile != null){ + val forEveryAdjacentTileModifiers = getModifiers(UniqueType.ForEveryAdjacentTile) + for (conditional in forEveryAdjacentTileModifiers) { + val multiplier = stateForConditionals.relevantTile!!.neighbors + .count { it.matchesFilter(conditional.params[0]) } + amount *= multiplier + } + } + return amount.coerceAtLeast(0) } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 7e1ab4251e..a164a6ba70 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -938,6 +938,7 @@ enum class UniqueType( ShowsWhenUnbuilable("Shown while unbuilable", UniqueTarget.Building, UniqueTarget.Unit, flags = UniqueFlag.setOfHiddenToUsers), ModifierHiddenFromUsers("hidden from users", UniqueTarget.MetaModifier), ForEveryCountable("for every [countable]", UniqueTarget.MetaModifier), + ForEveryAdjacentTile("for every adjacent [tileFilter]", UniqueTarget.MetaModifier), ForEveryAmountCountable("for every [amount] [countable]", UniqueTarget.MetaModifier), ModifiedByGameSpeed("(modified by game speed)", UniqueTarget.MetaModifier, docDescription = "Can only be applied to certain uniques, see details of each unique for specifics"),