Added unit trigger for 'upon defeat'

This commit is contained in:
Yair Morgenstern
2023-02-26 21:57:52 +02:00
parent a47864ecac
commit 67f4704ca2
2 changed files with 16 additions and 5 deletions

View File

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

View File

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