Add upon entering combat trigger (#13614)

* Add upon entering combat trigger

* whoops

* temporarily revert getMatchingUnique changes as out of scope

* Last rename in functions
This commit is contained in:
SeventhM 2025-07-15 01:52:08 -07:00 committed by GitHub
parent dc937f91d2
commit fa7d075cde
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 20 additions and 2 deletions

View File

@ -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) {

View File

@ -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<Unique> =
unit.getMatchingUniques(uniqueType, conditionalState, checkCivUniques)
fun getMatchingUniques(uniqueType: UniqueType, gameContext: GameContext, checkCivUniques: Boolean): Sequence<Unique> =
unit.getMatchingUniques(uniqueType, gameContext, checkCivUniques)
fun hasUnique(uniqueType: UniqueType, conditionalState: GameContext? = null): Boolean =
if (conditionalState == null) unit.hasUnique(uniqueType)

View File

@ -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),