From 6ffe13e7809aac66c05a628b4b004148787a9ff4 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Thu, 28 Sep 2023 09:25:35 +0300 Subject: [PATCH] "if it hasn't used other actions yet" conditional works with new limited unit actions ("<[amount] times>") - paves the way for real deprecation of religion action shenanigans --- core/src/com/unciv/models/ruleset/unique/Unique.kt | 3 +++ .../unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt | 3 +-- .../screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unique/Unique.kt b/core/src/com/unciv/models/ruleset/unique/Unique.kt index 7a1a7ea57c..ff61b94b87 100644 --- a/core/src/com/unciv/models/ruleset/unique/Unique.kt +++ b/core/src/com/unciv/models/ruleset/unique/Unique.kt @@ -249,7 +249,10 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s state.ourCombatant != null && state.ourCombatant.getHealth() < condition.params[0].toInt() UniqueType.ConditionalHasNotUsedOtherActions -> state.unit != null && + // OLD format state.unit.run { limitedActionsUnitCanDo().all { abilityUsesLeft[it] == maxAbilityUses[it] } } + // NEW format + && state.unit.abilityToTimesUsed.isEmpty() UniqueType.ConditionalInTiles -> relevantTile?.matchesFilter(condition.params[0], state.civInfo) == true diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt index 00fbfc987c..adc9f00ebb 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActions.kt @@ -751,8 +751,7 @@ object UnitActions { val extraTimes = unit.getMatchingUniques(actionUnique.type!!) .filter { it.text.removeConditionals() == actionUnique.text.removeConditionals() } .flatMap { unique -> unique.conditionals.filter { it.type == UniqueType.UnitActionExtraLimitedTimes } } - .map { it.params[0].toInt() } - .sum() + .sumOf { it.params[0].toInt() } val times = actionUnique.conditionals .filter { it.type == UniqueType.UnitActionLimitedTimes } diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt index 5678bd289a..76569c9fa1 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionsGreatPerson.kt @@ -15,7 +15,8 @@ object UnitActionsGreatPerson { internal fun addGreatPersonActions(unit: MapUnit, actionList: ArrayList, tile: Tile) { - if (unit.currentMovement > 0) for (unique in unit.getUniques()) when (unique.type) { + if (unit.currentMovement <= 0) return + for (unique in unit.getUniques()) when (unique.type) { UniqueType.CanHurryResearch -> { actionList += UnitAction( UnitActionType.HurryResearch,