- Clear all unit movement caches upon a road being pillaged
- Log when this happens
- Minor whitespace fixes
This commit is contained in:
Will Allen 2023-11-30 11:13:39 -06:00 committed by GitHub
parent 01636c27f0
commit 70bbfe14d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 10 deletions

View File

@ -275,7 +275,6 @@ object UnitAutomation {
val ourDistanceToClosestEnemy = unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(),6, false)
if (otherUnit.health > 80
&& ourDistanceToClosestEnemy < otherUnit.civ.threatManager.getDistanceToClosestEnemyUnit(otherUnit.getTile(),6,false)) {
if (otherUnit.baseUnit.isRanged()) {
// Don't swap ranged units closer than they have to be
val range = otherUnit.baseUnit.range

View File

@ -27,6 +27,7 @@ import com.unciv.models.ruleset.unique.UniqueType
import com.unciv.ui.components.extensions.withItem
import com.unciv.ui.components.extensions.withoutItem
import com.unciv.utils.DebugUtils
import com.unciv.utils.Log
import kotlin.math.abs
import kotlin.math.min
import kotlin.random.Random
@ -895,8 +896,10 @@ open class Tile : IsPartOfGameInfoSerialization {
// otherwise use pillage/repair systems
if (canPillageTileImprovement())
improvementIsPillaged = true
else
else {
roadIsPillaged = true
clearAllPathfindingCaches()
}
}
owningCity?.reassignPopulationDeferred()
@ -904,6 +907,16 @@ open class Tile : IsPartOfGameInfoSerialization {
owningCity!!.civ.cache.updateCivResources()
}
private fun clearAllPathfindingCaches() {
val units = tileMap.gameInfo.civilizations.asSequence()
.filter { it.isAlive() }
.flatMap { it.units.getCivUnits() }
Log.debug("%s: road pillaged, clearing cache for %d units", this, { units.count() })
for (otherUnit in units) {
otherUnit.movement.clearPathfindingCache()
}
}
fun isPillaged(): Boolean = improvementIsPillaged || roadIsPillaged
fun setRepaired() {