mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 06:16:37 -04:00
Fixed crash due to ranged unit trying to capture civilian but being unable to reach the tile
Resolves #11062 Resolves #11044 Resolves #11040 @tuvus
This commit is contained in:
parent
875da6cd48
commit
67a7fb7d22
@ -5,8 +5,8 @@ import com.unciv.logic.battle.Battle
|
|||||||
import com.unciv.logic.battle.BattleDamage
|
import com.unciv.logic.battle.BattleDamage
|
||||||
import com.unciv.logic.battle.CityCombatant
|
import com.unciv.logic.battle.CityCombatant
|
||||||
import com.unciv.logic.battle.MapUnitCombatant
|
import com.unciv.logic.battle.MapUnitCombatant
|
||||||
import com.unciv.logic.city.City
|
|
||||||
import com.unciv.logic.battle.TargetHelper
|
import com.unciv.logic.battle.TargetHelper
|
||||||
|
import com.unciv.logic.city.City
|
||||||
import com.unciv.logic.map.mapunit.MapUnit
|
import com.unciv.logic.map.mapunit.MapUnit
|
||||||
import com.unciv.models.ruleset.unique.UniqueType
|
import com.unciv.models.ruleset.unique.UniqueType
|
||||||
|
|
||||||
@ -14,6 +14,7 @@ object BattleHelper {
|
|||||||
|
|
||||||
fun tryAttackNearbyEnemy(unit: MapUnit, stayOnTile: Boolean = false): Boolean {
|
fun tryAttackNearbyEnemy(unit: MapUnit, stayOnTile: Boolean = false): Boolean {
|
||||||
if (unit.hasUnique(UniqueType.CannotAttack)) return false
|
if (unit.hasUnique(UniqueType.CannotAttack)) return false
|
||||||
|
val distanceToTiles = unit.movement.getDistanceToTiles()
|
||||||
val attackableEnemies = TargetHelper.getAttackableEnemies(unit, unit.movement.getDistanceToTiles(), stayOnTile=stayOnTile)
|
val attackableEnemies = TargetHelper.getAttackableEnemies(unit, unit.movement.getDistanceToTiles(), stayOnTile=stayOnTile)
|
||||||
// Only take enemies we can fight without dying or are made to die
|
// Only take enemies we can fight without dying or are made to die
|
||||||
.filter {unit.hasUnique(UniqueType.SelfDestructs) ||
|
.filter {unit.hasUnique(UniqueType.SelfDestructs) ||
|
||||||
@ -27,7 +28,8 @@ object BattleHelper {
|
|||||||
|
|
||||||
if (enemyTileToAttack != null) {
|
if (enemyTileToAttack != null) {
|
||||||
if (enemyTileToAttack.tileToAttack.militaryUnit == null && unit.baseUnit.isRanged()
|
if (enemyTileToAttack.tileToAttack.militaryUnit == null && unit.baseUnit.isRanged()
|
||||||
&& unit.movement.canMoveTo(enemyTileToAttack.tileToAttack)) {
|
&& unit.movement.canMoveTo(enemyTileToAttack.tileToAttack)
|
||||||
|
&& distanceToTiles.containsKey(enemyTileToAttack.tileToAttack)) { // Since the 'getAttackableEnemies' could return a tile we attack at range but cannot reach
|
||||||
// Ranged units should move to caputre a civilian unit instead of attacking it
|
// Ranged units should move to caputre a civilian unit instead of attacking it
|
||||||
unit.movement.moveToTile(enemyTileToAttack.tileToAttack)
|
unit.movement.moveToTile(enemyTileToAttack.tileToAttack)
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user