From fa7d075cde965df7453f37e5b1e8e5e3f061c681 Mon Sep 17 00:00:00 2001 From: SeventhM <127357473+SeventhM@users.noreply.github.com> Date: Tue, 15 Jul 2025 01:52:08 -0700 Subject: [PATCH] Add upon entering combat trigger (#13614) * Add upon entering combat trigger * whoops * temporarily revert getMatchingUnique changes as out of scope * Last rename in functions --- core/src/com/unciv/logic/battle/Battle.kt | 17 +++++++++++++++++ .../com/unciv/logic/battle/MapUnitCombatant.kt | 4 ++-- .../unciv/models/ruleset/unique/UniqueType.kt | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index fbc5658e21..6747de18de 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -138,6 +138,8 @@ object Battle { val isAlreadyDefeatedCity = defender is CityCombatant && defender.isDefeated() + triggerCombatUniques(attacker, defender, attackedTile) + val damageDealt = takeDamage(attacker, defender) // check if unit is captured by the attacker (prize ships unique) @@ -215,6 +217,21 @@ object Battle { return damageDealt + interceptDamage } + + private fun triggerCombatUniques(attacker: ICombatant, defender: ICombatant, attackedTile: Tile) { + val attackerContext = GameContext(attacker.getCivInfo(), + ourCombatant = attacker, theirCombatant = defender, tile = attackedTile, combatAction = CombatAction.Attack) + if (attacker is MapUnitCombatant) + for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponCombat, attackerContext)) { + UniqueTriggerActivation.triggerUnique(unique, attacker.unit) + } + val defenderContext = GameContext(defender.getCivInfo(), + ourCombatant = defender, theirCombatant = attacker, tile = attackedTile, combatAction = CombatAction.Defend) + if (defender is MapUnitCombatant) + for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponCombat, defenderContext)) { + UniqueTriggerActivation.triggerUnique(unique, defender.unit) + } + } private fun triggerVictoryUniques(ourUnit: MapUnitCombatant, enemy: MapUnitCombatant, attackedTile: Tile) { diff --git a/core/src/com/unciv/logic/battle/MapUnitCombatant.kt b/core/src/com/unciv/logic/battle/MapUnitCombatant.kt index 923ffd9d55..0e914252ce 100644 --- a/core/src/com/unciv/logic/battle/MapUnitCombatant.kt +++ b/core/src/com/unciv/logic/battle/MapUnitCombatant.kt @@ -46,8 +46,8 @@ class MapUnitCombatant(val unit: MapUnit) : ICombatant { return unit.name+" of "+unit.civ.civName } - fun getMatchingUniques(uniqueType: UniqueType, conditionalState: GameContext, checkCivUniques: Boolean): Sequence = - unit.getMatchingUniques(uniqueType, conditionalState, checkCivUniques) + fun getMatchingUniques(uniqueType: UniqueType, gameContext: GameContext, checkCivUniques: Boolean): Sequence = + unit.getMatchingUniques(uniqueType, gameContext, checkCivUniques) fun hasUnique(uniqueType: UniqueType, conditionalState: GameContext? = null): Boolean = if (conditionalState == null) unit.hasUnique(uniqueType) diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index ec826fd327..d9bd01ddd1 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( ///////////////////////////////////////// region 11 UNIT TRIGGERS ///////////////////////////////////////// + TriggerUponCombat("upon entering combat", UniqueTarget.UnitTriggerCondition), TriggerUponDamagingUnit("upon damaging a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition, docDescription = "Can apply triggers to to damaged unit by setting the first parameter to 'Target Unit'"), TriggerUponDefeatingUnit("upon defeating a [mapUnitFilter] unit", UniqueTarget.UnitTriggerCondition),