mirror of
https://github.com/yairm210/Unciv.git
synced 2025-03-03 22:22:51 +07:00
Speed up tryHeadTowardsEncampment
This commit is contained in:
parent
14cc0f21ff
commit
d3841a233b
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user