mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-14 09:48:12 +07:00
Resolved #12687 - Flank attack unique works with 'vs' conditionals
This commit is contained in:
@ -33,13 +33,8 @@ object BattleDamage {
|
|||||||
private fun getGeneralModifiers(combatant: ICombatant, enemy: ICombatant, combatAction: CombatAction, tileToAttackFrom: Tile): Counter<String> {
|
private fun getGeneralModifiers(combatant: ICombatant, enemy: ICombatant, combatAction: CombatAction, tileToAttackFrom: Tile): Counter<String> {
|
||||||
val modifiers = Counter<String>()
|
val modifiers = Counter<String>()
|
||||||
|
|
||||||
|
val conditionalState = getStateForConditionals(combatAction, combatant, enemy)
|
||||||
val civInfo = combatant.getCivInfo()
|
val civInfo = combatant.getCivInfo()
|
||||||
val attackedTile =
|
|
||||||
if (combatAction == CombatAction.Attack) enemy.getTile()
|
|
||||||
else combatant.getTile()
|
|
||||||
|
|
||||||
val conditionalState = StateForConditionals(civInfo, city = (combatant as? CityCombatant)?.city, ourCombatant = combatant, theirCombatant = enemy,
|
|
||||||
attackedTile = attackedTile, combatAction = combatAction)
|
|
||||||
|
|
||||||
if (combatant is MapUnitCombatant) {
|
if (combatant is MapUnitCombatant) {
|
||||||
|
|
||||||
@ -73,6 +68,26 @@ object BattleDamage {
|
|||||||
return modifiers
|
return modifiers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun getStateForConditionals(
|
||||||
|
combatAction: CombatAction,
|
||||||
|
combatant: ICombatant,
|
||||||
|
enemy: ICombatant,
|
||||||
|
): StateForConditionals {
|
||||||
|
val attackedTile =
|
||||||
|
if (combatAction == CombatAction.Attack) enemy.getTile()
|
||||||
|
else combatant.getTile()
|
||||||
|
|
||||||
|
val conditionalState = StateForConditionals(
|
||||||
|
combatant.getCivInfo(),
|
||||||
|
city = (combatant as? CityCombatant)?.city,
|
||||||
|
ourCombatant = combatant,
|
||||||
|
theirCombatant = enemy,
|
||||||
|
attackedTile = attackedTile,
|
||||||
|
combatAction = combatAction
|
||||||
|
)
|
||||||
|
return conditionalState
|
||||||
|
}
|
||||||
|
|
||||||
private fun addUnitUniqueModifiers(combatant: MapUnitCombatant, enemy: ICombatant, conditionalState: StateForConditionals,
|
private fun addUnitUniqueModifiers(combatant: MapUnitCombatant, enemy: ICombatant, conditionalState: StateForConditionals,
|
||||||
tileToAttackFrom: Tile, modifiers: Counter<String>) {
|
tileToAttackFrom: Tile, modifiers: Counter<String>) {
|
||||||
val civInfo = combatant.getCivInfo()
|
val civInfo = combatant.getCivInfo()
|
||||||
@ -143,7 +158,8 @@ object BattleDamage {
|
|||||||
var flankingBonus = BattleConstants.BASE_FLANKING_BONUS
|
var flankingBonus = BattleConstants.BASE_FLANKING_BONUS
|
||||||
|
|
||||||
// e.g., Discipline policy - https://civilization.fandom.com/wiki/Discipline_(Civ5)
|
// e.g., Discipline policy - https://civilization.fandom.com/wiki/Discipline_(Civ5)
|
||||||
for (unique in attacker.unit.getMatchingUniques(UniqueType.FlankAttackBonus, checkCivInfoUniques = true))
|
for (unique in attacker.unit.getMatchingUniques(UniqueType.FlankAttackBonus, checkCivInfoUniques = true,
|
||||||
|
stateForConditionals = getStateForConditionals(CombatAction.Attack, attacker, defender)))
|
||||||
flankingBonus *= unique.params[0].toPercent()
|
flankingBonus *= unique.params[0].toPercent()
|
||||||
modifiers["Flanking"] =
|
modifiers["Flanking"] =
|
||||||
(flankingBonus * numberOfOtherAttackersSurroundingDefender).toInt()
|
(flankingBonus * numberOfOtherAttackersSurroundingDefender).toInt()
|
||||||
|
Reference in New Issue
Block a user