From 458d35026cf78c7b69c1bacdfbffc5e77c3ec830 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Fri, 3 Mar 2023 15:29:14 +0200 Subject: [PATCH] Added 'once' unit action modifier, effectively equal to '[1] times' --- core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 1 + .../ui/screens/worldscreen/unit/actions/UnitActions.kt | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 0acec65ac0..b1048b9c62 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -509,6 +509,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: UnitActionConsumeUnit("by consuming this unit", UniqueTarget.UnitActionModifier), UnitActionMovementCost("for [amount] movement", UniqueTarget.UnitActionModifier), + UnitActionOnce("once", UniqueTarget.UnitActionModifier), UnitActionLimitedTimes("[amount] times", UniqueTarget.UnitActionModifier), // endregion 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 7bab215a5e..29a07e80b3 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 @@ -653,7 +653,8 @@ object UnitActions { val triggerableTypes = setOf(UniqueTarget.Triggerable, UniqueTarget.UnitTriggerable) for (unique in unit.getUniques()) { if (unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.UnitActionModifier) == true }) continue - if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true) continue + if (unique.type?.targetTypes?.any { it in triggerableTypes }!=true + && unique.conditionals.none { it.type == UniqueType.ConditionalTimedUnique }) continue if (usagesLeft(unit, unique)==0) continue val unitAction = UnitAction(type = UnitActionType.TriggerUnique, @@ -719,9 +720,12 @@ object UnitActions { } fun getMaxUsages(actionUnique: Unique): Int? { - return actionUnique.conditionals + val times = actionUnique.conditionals .filter { it.type == UniqueType.UnitActionLimitedTimes } .maxOfOrNull { it.params[0].toInt() } + if (times != null) return times + if (actionUnique.conditionals.any { it.type == UniqueType.UnitActionOnce }) return 1 + return null } fun actionTextWithSideEffects(originalText:String, actionUnique: Unique, unit: MapUnit): String {