Speed up tryHeadTowardsEncampment

This commit is contained in:
WhoIsJohannes 2023-04-23 22:19:43 +02:00
parent 14cc0f21ff
commit d3841a233b

View File

@ -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
}