diff --git a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt index 5182d1f1ed..9aac403808 100644 --- a/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/UnitAutomation.kt @@ -353,15 +353,16 @@ object UnitAutomation { private fun tryHeadTowardsEncampment(unit: MapUnit): Boolean { if (unit.hasUnique(UniqueType.SelfDestructs)) return false // don't use single-use units against barbarians... + val maxDistanceToConsider = 10 + val tilesToConsider = unit.getTile().getTilesInDistance(maxDistanceToConsider) val knownEncampments = unit.civ.gameInfo.tileMap.values.asSequence() - .filter { it.improvement == Constants.barbarianEncampment && unit.civ.hasExplored(it) } - val cities = unit.civ.cities - val encampmentsCloseToCities = knownEncampments - .filter { cities.any { city -> city.getCenterTile().aerialDistanceTo(it) < 6 } } - .sortedBy { it.aerialDistanceTo(unit.currentTile) } - val encampmentToHeadTowards = encampmentsCloseToCities.firstOrNull { unit.movement.canReach(it) } - ?: return false - unit.movement.headTowards(encampmentToHeadTowards) + .filter { it in tilesToConsider && it.improvement == Constants.barbarianEncampment && unit.civ.hasExplored(it) } + val encampmentCloseToCity = knownEncampments + .filter { encampment -> + encampment.getTilesInDistance(6).any { tile -> tile.owningCity?.civ == unit.civ } + && unit.movement.canReach(encampment) } + .firstOrNull() ?: return false + unit.movement.headTowards(encampmentCloseToCity) return true }