From d3841a233b0212ea9fd3cf053f70abb090fbc241 Mon Sep 17 00:00:00 2001 From: WhoIsJohannes Date: Sun, 23 Apr 2023 22:19:43 +0200 Subject: [PATCH] Speed up tryHeadTowardsEncampment --- .../logic/automation/unit/UnitAutomation.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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 }