mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-24 03:53:12 -04:00
- Clear all unit movement caches upon a road being pillaged - Log when this happens - Minor whitespace fixes
This commit is contained in:
parent
01636c27f0
commit
70bbfe14d6
@ -125,7 +125,7 @@ object UnitAutomation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal fun tryUpgradeUnit(unit: MapUnit): Boolean {
|
internal fun tryUpgradeUnit(unit: MapUnit): Boolean {
|
||||||
if (unit.civ.isHuman() && (!UncivGame.Current.settings.automatedUnitsCanUpgrade
|
if (unit.civ.isHuman() && (!UncivGame.Current.settings.automatedUnitsCanUpgrade
|
||||||
|| UncivGame.Current.settings.autoPlay.isAutoPlayingAndFullAI())) return false
|
|| UncivGame.Current.settings.autoPlay.isAutoPlayingAndFullAI())) return false
|
||||||
if (unit.baseUnit.upgradesTo == null) return false
|
if (unit.baseUnit.upgradesTo == null) return false
|
||||||
val upgradedUnit = unit.upgrade.getUnitToUpgradeTo()
|
val upgradedUnit = unit.upgrade.getUnitToUpgradeTo()
|
||||||
@ -173,18 +173,18 @@ object UnitAutomation {
|
|||||||
CivilianUnitAutomation.automateCivilianUnit(unit)
|
CivilianUnitAutomation.automateCivilianUnit(unit)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (unit.baseUnit.isAirUnit()) {
|
if (unit.baseUnit.isAirUnit()) {
|
||||||
if (unit.canIntercept())
|
if (unit.canIntercept())
|
||||||
return AirUnitAutomation.automateFighter(unit)
|
return AirUnitAutomation.automateFighter(unit)
|
||||||
|
|
||||||
if (!unit.baseUnit.isNuclearWeapon())
|
if (!unit.baseUnit.isNuclearWeapon())
|
||||||
return AirUnitAutomation.automateBomber(unit)
|
return AirUnitAutomation.automateBomber(unit)
|
||||||
|
|
||||||
// Note that not all nukes have to be air units
|
// Note that not all nukes have to be air units
|
||||||
if (unit.baseUnit.isNuclearWeapon())
|
if (unit.baseUnit.isNuclearWeapon())
|
||||||
return AirUnitAutomation.automateNukes(unit)
|
return AirUnitAutomation.automateNukes(unit)
|
||||||
|
|
||||||
if (unit.hasUnique(UniqueType.SelfDestructs))
|
if (unit.hasUnique(UniqueType.SelfDestructs))
|
||||||
return AirUnitAutomation.automateMissile(unit)
|
return AirUnitAutomation.automateMissile(unit)
|
||||||
}
|
}
|
||||||
@ -263,7 +263,7 @@ object UnitAutomation {
|
|||||||
if (unit.isCivilian()) return false
|
if (unit.isCivilian()) return false
|
||||||
// Better to do a more healing oriented move then
|
// Better to do a more healing oriented move then
|
||||||
if (unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(),6, true) > 4) return false
|
if (unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(),6, true) > 4) return false
|
||||||
|
|
||||||
if (unit.baseUnit.isAirUnit()) {
|
if (unit.baseUnit.isAirUnit()) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
@ -273,9 +273,8 @@ object UnitAutomation {
|
|||||||
for (swapTile in swapableTiles) {
|
for (swapTile in swapableTiles) {
|
||||||
val otherUnit = swapTile.militaryUnit!!
|
val otherUnit = swapTile.militaryUnit!!
|
||||||
val ourDistanceToClosestEnemy = unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(),6, false)
|
val ourDistanceToClosestEnemy = unit.civ.threatManager.getDistanceToClosestEnemyUnit(unit.getTile(),6, false)
|
||||||
if (otherUnit.health > 80
|
if (otherUnit.health > 80
|
||||||
&& ourDistanceToClosestEnemy < otherUnit.civ.threatManager.getDistanceToClosestEnemyUnit(otherUnit.getTile(),6,false)) {
|
&& ourDistanceToClosestEnemy < otherUnit.civ.threatManager.getDistanceToClosestEnemyUnit(otherUnit.getTile(),6,false)) {
|
||||||
|
|
||||||
if (otherUnit.baseUnit.isRanged()) {
|
if (otherUnit.baseUnit.isRanged()) {
|
||||||
// Don't swap ranged units closer than they have to be
|
// Don't swap ranged units closer than they have to be
|
||||||
val range = otherUnit.baseUnit.range
|
val range = otherUnit.baseUnit.range
|
||||||
@ -588,6 +587,6 @@ object UnitAutomation {
|
|||||||
unit.civ.addNotification("${unit.shortDisplayName()} finished exploring.", unit.currentTile.position, NotificationCategory.Units, unit.name, "OtherIcons/Sleep")
|
unit.civ.addNotification("${unit.shortDisplayName()} finished exploring.", unit.currentTile.position, NotificationCategory.Units, unit.name, "OtherIcons/Sleep")
|
||||||
unit.action = null
|
unit.action = null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,7 @@ import com.unciv.models.ruleset.unique.UniqueType
|
|||||||
import com.unciv.ui.components.extensions.withItem
|
import com.unciv.ui.components.extensions.withItem
|
||||||
import com.unciv.ui.components.extensions.withoutItem
|
import com.unciv.ui.components.extensions.withoutItem
|
||||||
import com.unciv.utils.DebugUtils
|
import com.unciv.utils.DebugUtils
|
||||||
|
import com.unciv.utils.Log
|
||||||
import kotlin.math.abs
|
import kotlin.math.abs
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
@ -895,8 +896,10 @@ open class Tile : IsPartOfGameInfoSerialization {
|
|||||||
// otherwise use pillage/repair systems
|
// otherwise use pillage/repair systems
|
||||||
if (canPillageTileImprovement())
|
if (canPillageTileImprovement())
|
||||||
improvementIsPillaged = true
|
improvementIsPillaged = true
|
||||||
else
|
else {
|
||||||
roadIsPillaged = true
|
roadIsPillaged = true
|
||||||
|
clearAllPathfindingCaches()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
owningCity?.reassignPopulationDeferred()
|
owningCity?.reassignPopulationDeferred()
|
||||||
@ -904,6 +907,16 @@ open class Tile : IsPartOfGameInfoSerialization {
|
|||||||
owningCity!!.civ.cache.updateCivResources()
|
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 isPillaged(): Boolean = improvementIsPillaged || roadIsPillaged
|
||||||
|
|
||||||
fun setRepaired() {
|
fun setRepaired() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user