Resolved #8888 - Added trigger condition notification for several unit triggers

This commit is contained in:
Yair Morgenstern 2023-03-15 19:08:50 +02:00
parent 855a818a84
commit 6aef2ff3c6
4 changed files with 14 additions and 9 deletions

View File

@ -965,6 +965,10 @@ due to entering the [eraName] =
due to constructing [buildingName] =
due to founding a city =
due to discovering a Natural Wonder =
due to our [unitName] defeating a [unitName] =
due to our [unitName] being defeated by a [unitName] =
due to our [unitName] losing [amount] HP =
due to our [unitName] being promoted =
from the ruins =
# World Screen UI

View File

@ -155,7 +155,7 @@ object Battle {
for (unique in ourUnit.unit.getTriggeredUniques(UniqueType.TriggerUponDefeatingUnit, stateForConditionals))
if (unique.conditionals.any { it.type == UniqueType.TriggerUponDefeatingUnit
&& enemy.unit.matchesFilter(it.params[0]) })
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit)
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit, triggerNotificationText = "due to our [${ourUnit.getName()}] defeating a [${enemy.getName()}]")
}
@ -197,7 +197,7 @@ object Battle {
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)
UniqueTriggerActivation.triggerUnitwideUnique(unique, ourUnit.unit, triggerNotificationText = "due to our [${ourUnit.getName()}] being defeated by a [${enemy.getName()}]")
}
private fun tryEarnFromKilling(civUnit: ICombatant, defeatedUnit: MapUnitCombatant) {
@ -368,14 +368,14 @@ object Battle {
val attackerDamageDealt = defenderHealthBefore - defender.getHealth()
if (attacker is MapUnitCombatant)
for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponPromotion))
for (unique in attacker.unit.getTriggeredUniques(UniqueType.TriggerUponLosingHealth))
if (unique.conditionals.any { it.params[0].toInt() <= defenderDamageDealt })
UniqueTriggerActivation.triggerUnitwideUnique(unique, attacker.unit)
UniqueTriggerActivation.triggerUnitwideUnique(unique, attacker.unit, "due to losing [$defenderDamageDealt] HP")
if (defender is MapUnitCombatant)
for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponPromotion))
for (unique in defender.unit.getTriggeredUniques(UniqueType.TriggerUponLosingHealth))
if (unique.conditionals.any { it.params[0].toInt() <= attackerDamageDealt })
UniqueTriggerActivation.triggerUnitwideUnique(unique, defender.unit)
UniqueTriggerActivation.triggerUnitwideUnique(unique, defender.unit, "due to losing [$attackerDamageDealt] HP")
plunderFromDamage(attacker, defender, attackerDamageDealt)
return DamageDealt(attackerDamageDealt, defenderDamageDealt)

View File

@ -91,7 +91,7 @@ class UnitPromotions : IsPartOfGameInfoSerialization {
for (unique in promotion.uniqueObjects)
if (unique.conditionalsApply(StateForConditionals(civInfo = unit.civ, unit = unit))
&& unique.conditionals.none { it.type?.targetTypes?.contains(UniqueTarget.TriggerCondition) == true })
UniqueTriggerActivation.triggerUnitwideUnique(unique, unit)
UniqueTriggerActivation.triggerUnitwideUnique(unique, unit, "due to our [${unit.name}] being promoted")
}
/** Gets all promotions this unit could currently "buy" with enough [XP]

View File

@ -608,7 +608,8 @@ object UniqueTriggerActivation {
fun triggerUnitwideUnique(
unique: Unique,
unit: MapUnit,
notification: String? = null
notification: String? = null,
triggerNotificationText:String? = null
): Boolean {
when (unique.type) {
UniqueType.OneTimeUnitHeal -> {
@ -649,7 +650,7 @@ object UniqueTriggerActivation {
unit.civ.addNotification(notification, unit.getTile().position, NotificationCategory.Units, unit.name)
return true
}
else -> return triggerCivwideUnique(unique, civInfo = unit.civ, tile=unit.currentTile)
else -> return triggerCivwideUnique(unique, civInfo = unit.civ, tile=unit.currentTile, triggerNotificationText = triggerNotificationText)
}
}
}