mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-16 10:49:17 +07:00
Show average damage in battle calculations (#10738)
Change BattleTable to calulate average damage and show alongside the min and max for easier calculations when planning to attack with multiple units such as when sieging a city Unfortunately for min-maxers the randomness is still turn dependent for a given defending unit, so the damage randomness will not average out across multiple attacks on a given turn but they will all be more or all be less depending on the luck that turn.
This commit is contained in:
@ -202,9 +202,11 @@ class BattleTable(val worldScreen: WorldScreen) : Table() {
|
|||||||
|
|
||||||
val maxDamageToDefender = BattleDamage.calculateDamageToDefender(attacker, defender, tileToAttackFrom, 1f)
|
val maxDamageToDefender = BattleDamage.calculateDamageToDefender(attacker, defender, tileToAttackFrom, 1f)
|
||||||
val minDamageToDefender = BattleDamage.calculateDamageToDefender(attacker, defender, tileToAttackFrom, 0f)
|
val minDamageToDefender = BattleDamage.calculateDamageToDefender(attacker, defender, tileToAttackFrom, 0f)
|
||||||
|
val avgDamageToDefender = arrayOf(maxDamageToDefender, minDamageToDefender).average().roundToInt()
|
||||||
|
|
||||||
val maxDamageToAttacker = BattleDamage.calculateDamageToAttacker(attacker, defender, tileToAttackFrom, 1f)
|
val maxDamageToAttacker = BattleDamage.calculateDamageToAttacker(attacker, defender, tileToAttackFrom, 1f)
|
||||||
val minDamageToAttacker = BattleDamage.calculateDamageToAttacker(attacker, defender, tileToAttackFrom, 0f)
|
val minDamageToAttacker = BattleDamage.calculateDamageToAttacker(attacker, defender, tileToAttackFrom, 0f)
|
||||||
|
val avgDamageToAttacker = arrayOf(maxDamageToAttacker, minDamageToAttacker).average().roundToInt()
|
||||||
|
|
||||||
if (attacker.isMelee() &&
|
if (attacker.isMelee() &&
|
||||||
(defender.isCivilian() || defender is CityCombatant && defender.isDefeated())) {
|
(defender.isCivilian() || defender is CityCombatant && defender.isDefeated())) {
|
||||||
@ -228,12 +230,12 @@ class BattleTable(val worldScreen: WorldScreen) : Table() {
|
|||||||
add(getHealthBar(defender.getMaxHealth(), defender.getHealth(), maxRemainingLifeDefender, minRemainingLifeDefender)).row()
|
add(getHealthBar(defender.getMaxHealth(), defender.getHealth(), maxRemainingLifeDefender, minRemainingLifeDefender)).row()
|
||||||
|
|
||||||
if (minRemainingLifeAttacker == attackerHealth) add(attackerHealth.toLabel())
|
if (minRemainingLifeAttacker == attackerHealth) add(attackerHealth.toLabel())
|
||||||
else if (maxRemainingLifeAttacker == minRemainingLifeAttacker) add("$attackerHealth → $maxRemainingLifeAttacker".toLabel())
|
else if (maxRemainingLifeAttacker == minRemainingLifeAttacker) add("$attackerHealth → $maxRemainingLifeAttacker ($avgDamageToAttacker)".toLabel())
|
||||||
else add("$attackerHealth → $minRemainingLifeAttacker-$maxRemainingLifeAttacker".toLabel())
|
else add("$attackerHealth → $minRemainingLifeAttacker-$maxRemainingLifeAttacker (~$avgDamageToAttacker)".toLabel())
|
||||||
|
|
||||||
|
|
||||||
if (minRemainingLifeDefender == maxRemainingLifeDefender) add("$defenderHealth → $maxRemainingLifeDefender".toLabel())
|
if (minRemainingLifeDefender == maxRemainingLifeDefender) add("$defenderHealth → $maxRemainingLifeDefender ($avgDamageToDefender)".toLabel())
|
||||||
else add("$defenderHealth → $minRemainingLifeDefender-$maxRemainingLifeDefender".toLabel())
|
else add("$defenderHealth → $minRemainingLifeDefender-$maxRemainingLifeDefender (~$avgDamageToDefender)".toLabel())
|
||||||
}
|
}
|
||||||
|
|
||||||
row().pad(5f)
|
row().pad(5f)
|
||||||
|
Reference in New Issue
Block a user