@@ -64,12 +64,10 @@ class BarbarianAutomation(val civInfo: CivilizationInfo) {
6464 val possibleHeal = unit.rankTileForHealing(unit.currentTile)
6565 if (possibleDamage > possibleHeal) {
6666 // run
67- val furthestTile = findFurthestTile(unit, unitDistanceToTiles, nearEnemyTiles)
68- unit.movement.moveToTile(furthestTile)
69- } else {
70- // heal
71- unit.fortifyIfCan()
67+ val furthestTile = findFurthestTileCanMoveTo(unit, unitDistanceToTiles, nearEnemyTiles)
68+ if (furthestTile!= null ) unit.movement.moveToTile(furthestTile)
7269 }
70+ unit.fortifyIfCan()
7371 return
7472 }
7573
@@ -101,8 +99,8 @@ class BarbarianAutomation(val civInfo: CivilizationInfo) {
10199 // 1 - heal or run if death is near
102100 if (unit.health < 50 ) {
103101 if (nearEnemyTiles.isNotEmpty()) {
104- val furthestTile = findFurthestTile (unit, unitDistanceToTiles, nearEnemyTiles)
105- unit.movement.moveToTile(furthestTile)
102+ val furthestTile = findFurthestTileCanMoveTo (unit, unitDistanceToTiles, nearEnemyTiles)
103+ if (furthestTile != null ) unit.movement.moveToTile(furthestTile)
106104 }
107105 unit.fortifyIfCan()
108106
@@ -125,12 +123,13 @@ class BarbarianAutomation(val civInfo: CivilizationInfo) {
125123 UnitAutomation ().wander(unit, unitDistanceToTiles)
126124 }
127125
128- private fun findFurthestTile (
126+ private fun findFurthestTileCanMoveTo (
129127 unit : MapUnit ,
130128 unitDistanceToTiles : PathsToTilesWithinTurn ,
131129 nearEnemyTiles : List <AttackableTile >
132- ): TileInfo {
130+ ): TileInfo ? {
133131 val possibleTiles = unitDistanceToTiles.keys.filter { unit.movement.canMoveTo(it) }
132+ if (possibleTiles.isEmpty()) return null
134133 val enemies = nearEnemyTiles.mapNotNull { it.tileToAttack.militaryUnit }
135134 var furthestTile: Pair <TileInfo , Float > = possibleTiles.random() to 0f
136135 for (enemy in enemies) {
0 commit comments