mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-14 17:59:11 +07:00
Great general unique accepts conditionals - @SpacedOutChicken #3242
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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<String, Int> {
|
||||
val civInfo = unit.civInfo
|
||||
fun getGreatGeneralBonus(
|
||||
ourUnitCombatant: MapUnitCombatant,
|
||||
enemy: ICombatant,
|
||||
combatAction: CombatAction
|
||||
): Pair<String, Int> {
|
||||
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
|
||||
|
Reference in New Issue
Block a user