diff --git a/core/src/com/unciv/logic/automation/UnitAutomation.kt b/core/src/com/unciv/logic/automation/UnitAutomation.kt index 8f76daf3d3..05afd0dc2d 100644 --- a/core/src/com/unciv/logic/automation/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/UnitAutomation.kt @@ -92,15 +92,6 @@ class UnitAutomation{ // if both failed, then... there aren't any reachable tiles. Which is possible. } - fun rankTileForHealing(tileInfo: TileInfo, unit: MapUnit): Int { - val tileOwner = tileInfo.getOwner() - when{ - tileInfo.isCityCenter() -> return 3 - tileOwner!=null && !unit.civInfo.isAtWarWith(tileOwner)-> return 2 - tileOwner==null -> return 1 - else -> return 0 - } - } fun healUnit(unit: MapUnit, unitDistanceToTiles: HashMap) { val tilesInDistance = unitDistanceToTiles.keys.filter { unit.canMoveTo(it) } @@ -108,13 +99,15 @@ class UnitAutomation{ if (pillageImprovement(unit, unitDistanceToTiles)) return - val tilesByHealingRate = tilesInDistance.groupBy { rankTileForHealing(it,unit) } + val tilesByHealingRate = tilesInDistance.groupBy { unit.rankTileForHealing(it) } if(tilesByHealingRate.isEmpty()) return val bestTilesForHealing = tilesByHealingRate.maxBy { it.key }!!.value // within the tiles with best healing rate, we'll prefer one which has defensive bonuses val bestTileForHealing = bestTilesForHealing.maxBy { it.getDefensiveBonus() }!! - if(unitTile!=bestTileForHealing && rankTileForHealing(bestTileForHealing,unit)>rankTileForHealing(unitTile,unit)) + + if(unitTile!=bestTileForHealing && unit.rankTileForHealing(bestTileForHealing)>unit.rankTileForHealing(unitTile)) unit.moveToTile(bestTileForHealing) + if(unit.currentMovement>0 && unit.canFortify()){ unit.action="Fortify 0" } diff --git a/core/src/com/unciv/logic/map/MapUnit.kt b/core/src/com/unciv/logic/map/MapUnit.kt index 25621c7c13..01c6f6f432 100644 --- a/core/src/com/unciv/logic/map/MapUnit.kt +++ b/core/src/com/unciv/logic/map/MapUnit.kt @@ -330,14 +330,18 @@ class MapUnit { } private fun heal(){ - val tile = getTile() - health += when{ - tile.isCityCenter() -> 20 - tile.getOwner()?.civName == owner -> 15 // home territory - tile.getOwner() == null -> 10 // no man's land (neutral) + health += rankTileForHealing(getTile()) + if(health>100) health=100 + } + + fun rankTileForHealing(tileInfo:TileInfo): Int { + if(isEmbarked()) return 0 // embarked units can't heal + return when{ + tileInfo.getOwner() == null -> 10 // no man's land (neutral) + tileInfo.isCityCenter() -> 20 + !civInfo.isAtWarWith(tileInfo.getOwner()!!) -> 15 // home or allied territory else -> 5 // enemy territory } - if(health>100) health=100 } /**