From 1276036c6417713ec2709f2046616be33fb5fa0c Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Sat, 21 Jan 2023 23:10:37 +0200 Subject: [PATCH] Great general unique accepts conditionals - @SpacedOutChicken #3242 --- core/src/com/unciv/logic/battle/BattleDamage.kt | 2 +- .../logic/battle/GreatGeneralImplementation.kt | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/src/com/unciv/logic/battle/BattleDamage.kt b/core/src/com/unciv/logic/battle/BattleDamage.kt index a4e1784836..52d87ca72b 100644 --- a/core/src/com/unciv/logic/battle/BattleDamage.kt +++ b/core/src/com/unciv/logic/battle/BattleDamage.kt @@ -72,7 +72,7 @@ object BattleDamage { if (civResources[resource]!! < 0 && !civInfo.isBarbarian()) modifiers["Missing resource"] = -25 //todo ModConstants - val (greatGeneralName, greatGeneralBonus) = GreatGeneralImplementation.getGreatGeneralBonus(combatant.unit) + val (greatGeneralName, greatGeneralBonus) = GreatGeneralImplementation.getGreatGeneralBonus(combatant, enemy, combatAction) if (greatGeneralBonus != 0) modifiers[greatGeneralName] = greatGeneralBonus diff --git a/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt b/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt index 9c9ed50773..b39f4da55b 100644 --- a/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt +++ b/core/src/com/unciv/logic/battle/GreatGeneralImplementation.kt @@ -3,6 +3,7 @@ package com.unciv.logic.battle import com.unciv.logic.automation.unit.SpecificUnitAutomation import com.unciv.logic.map.mapunit.MapUnit import com.unciv.logic.map.tile.TileInfo +import com.unciv.models.ruleset.unique.StateForConditionals import com.unciv.models.ruleset.unique.Unique import com.unciv.models.ruleset.unique.UniqueType @@ -25,15 +26,21 @@ object GreatGeneralImplementation { * * @return A pair of unit's name and bonus (percentage) as Int (typically 15), or 0 if no applicable Great General equivalents found */ - fun getGreatGeneralBonus(unit: MapUnit): Pair { - val civInfo = unit.civInfo + fun getGreatGeneralBonus( + ourUnitCombatant: MapUnitCombatant, + enemy: ICombatant, + combatAction: CombatAction + ): Pair { + val unit = ourUnitCombatant.unit + val civInfo = ourUnitCombatant.unit.civInfo val allGenerals = civInfo.units.getCivUnits() .filter { it.hasStrengthBonusInRadiusUnique } if (allGenerals.none()) return Pair("", 0) val greatGeneral = allGenerals .flatMap { general -> - general.getMatchingUniques(UniqueType.StrengthBonusInRadius) + general.getMatchingUniques(UniqueType.StrengthBonusInRadius, + StateForConditionals(unit.civInfo, ourCombatant = ourUnitCombatant, theirCombatant = enemy, combatAction = combatAction)) .map { GeneralBonusData(general, it) } }.filter { // Support the border case when a mod unit has several