From 7f45ccd7b7e6e1b6eb911041d69e675d1f107e0f Mon Sep 17 00:00:00 2001 From: yairm210 Date: Sat, 28 Sep 2024 21:24:42 +0300 Subject: [PATCH] chore: Added unit.removeStatus helper function --- core/src/com/unciv/logic/map/mapunit/MapUnit.kt | 7 +++++++ core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt | 2 +- .../unciv/models/ruleset/unique/UniqueTriggerActivation.kt | 4 ++-- .../worldscreen/unit/actions/UnitActionModifiers.kt | 6 +++--- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt index 46239e954d..ded7dee476 100644 --- a/core/src/com/unciv/logic/map/mapunit/MapUnit.kt +++ b/core/src/com/unciv/logic/map/mapunit/MapUnit.kt @@ -1041,6 +1041,13 @@ class MapUnit : IsPartOfGameInfoSerialization { statuses.add(status) updateUniques() } + + fun removeStatus(name:String){ + val wereRemoved = statuses.removeAll { it.name == name } + if (wereRemoved){ + updateUniques() + } + } fun isNuclearWeapon() = hasUnique(UniqueType.NuclearWeapon) diff --git a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt index 5ee79aef79..977f5296b7 100644 --- a/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt +++ b/core/src/com/unciv/logic/map/mapunit/UnitTurnManager.kt @@ -169,7 +169,7 @@ class UnitTurnManager(val unit: MapUnit) { for (status in unit.statuses.toList()){ status.turnsLeft-- - if (status.turnsLeft <= 0) unit.statuses.remove(status) + if (status.turnsLeft <= 0) unit.removeStatus(status.name) } unit.updateUniques() } diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index 055e3021dd..ae6a365961 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -985,9 +985,9 @@ object UniqueTriggerActivation { } UniqueType.OneTimeUnitLoseStatus -> { if (unit == null) return null - val unitStatus = unit.statuses.firstOrNull { it.name == unique.params[1] } ?: return null + if (unit.statuses.none { it.name == unique.params[1] }) return null return { - unit.statuses.remove(unitStatus) + unit.removeStatus(unique.params[1]) true } } diff --git a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt index 917a03a53c..2dcb713a36 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/unit/actions/UnitActionModifiers.kt @@ -120,9 +120,9 @@ object UnitActionModifiers { UniqueType.UnitActionRemovingPromotion -> { val promotionName = conditional.params[0] // if has a status, remove that instead - the promotion is 'safe' - val unitStatus = unit.statuses.firstOrNull { it.name == promotionName } - if (unitStatus != null) { - unit.statuses.remove(unitStatus) + val unitStatus = + if (unit.statuses.any { it.name == promotionName }) { + unit.removeStatus(promotionName) } else { // check for real promotion unit.promotions.removePromotion(promotionName) }