From 67f4704ca273d7fe01df5bd50526d93611d5157f Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sun, 26 Feb 2023 21:57:52 +0200 Subject: [PATCH] Added unit trigger for 'upon defeat' --- core/src/com/unciv/logic/battle/Battle.kt | 15 ++++++++++++--- .../com/unciv/models/ruleset/unique/UniqueType.kt | 6 ++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index 5acf75fc4b..1ec18ebb73 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -149,7 +149,7 @@ object Battle { if (!defender.isDefeated() && defender is MapUnitCombatant && defender.unit.isExploring()) defender.unit.action = null - fun triggerUniques(ourUnit:MapUnitCombatant, enemy:MapUnitCombatant){ + fun triggerVictoryUniques(ourUnit:MapUnitCombatant, enemy:MapUnitCombatant){ val stateForConditionals = StateForConditionals(civInfo = ourUnit.getCivInfo(), ourCombatant = ourUnit, theirCombatant=enemy, tile = attackedTile) for (unique in ourUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDefeatingUnit, stateForConditionals)) @@ -158,19 +158,28 @@ object Battle { UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit) } + fun triggerDefeatUniques(ourUnit: MapUnitCombatant, enemy: ICombatant){ + val stateForConditionals = StateForConditionals(civInfo = ourUnit.getCivInfo(), + ourCombatant = ourUnit, theirCombatant=enemy, tile = attackedTile) + for (unique in ourUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDefeat, stateForConditionals)) + UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit) + } + // Add culture when defeating a barbarian when Honor policy is adopted, gold from enemy killed when honor is complete // or any enemy military unit with Sacrificial captives unique (can be either attacker or defender!) if (defender.isDefeated() && defender is MapUnitCombatant && !defender.unit.isCivilian()) { tryEarnFromKilling(attacker, defender) tryHealAfterKilling(attacker) - if (attacker is MapUnitCombatant) triggerUniques(attacker, defender) + if (attacker is MapUnitCombatant) triggerVictoryUniques(attacker, defender) + triggerDefeatUniques(defender, attacker) } else if (attacker.isDefeated() && attacker is MapUnitCombatant && !attacker.unit.isCivilian()) { tryEarnFromKilling(defender, attacker) tryHealAfterKilling(defender) - if (defender is MapUnitCombatant) triggerUniques(defender, attacker) + if (defender is MapUnitCombatant) triggerVictoryUniques(defender, attacker) + triggerDefeatUniques(attacker, defender) } if (attacker is MapUnitCombatant) { diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 8cb7252af8..a43e55642a 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -52,7 +52,8 @@ enum class UniqueTarget(val inheritsFrom: UniqueTarget? = null) { CityState(Global), ModOptions, Conditional, - TriggerCondition(Global) + TriggerCondition(Global), + UnitTriggerCondition(TriggerCondition) ; fun canAcceptUniqueTarget(uniqueTarget: UniqueTarget): Boolean { @@ -730,7 +731,8 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags: ///////////////////////////////////////// region UNIT TRIGGERS ///////////////////////////////////////// - TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.TriggerCondition), + TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition), + TriggerUponDefeat("upon defeat", UniqueTarget.UnitTriggerCondition), //endregion