diff --git a/core/src/com/unciv/logic/automation/unit/SpecificUnitAutomation.kt b/core/src/com/unciv/logic/automation/unit/SpecificUnitAutomation.kt index f13830dec4..ff2b333972 100644 --- a/core/src/com/unciv/logic/automation/unit/SpecificUnitAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/SpecificUnitAutomation.kt @@ -144,11 +144,17 @@ object SpecificUnitAutomation { if (bestCityLocation == null) { // Find the best tile that is within - bestCityLocation = bestTilesInfo.tileRankMap.filter { bestTilesInfo.bestTile == null || it.value >= bestTilesInfo.tileRankMap[bestTilesInfo.bestTile]!! - 5 }.asSequence().sortedByDescending { it.value }.firstOrNull { - if (it.key in dangerousTiles && it != unit.getTile()) return@firstOrNull false + fun isTileRankOK(it: Map.Entry): Boolean { + if (it.key in dangerousTiles && it.key != unit.getTile()) return false val pathSize = unit.movement.getShortestPath(it.key).size - return@firstOrNull pathSize in 1..3 - }?.key + return pathSize in 1..3 + } + + bestCityLocation = bestTilesInfo.tileRankMap.entries.asSequence() + .filter { bestTilesInfo.bestTile == null || it.value >= bestTilesInfo.tileRankMap[bestTilesInfo.bestTile]!! - 5 } + .sortedByDescending { it.value } + .firstOrNull(::isTileRankOK) + ?.key } // We still haven't found a best city tile within 3 turns so lets just head to the best tile diff --git a/core/src/com/unciv/logic/automation/unit/WorkerAutomation.kt b/core/src/com/unciv/logic/automation/unit/WorkerAutomation.kt index 373ac9298e..2598247165 100644 --- a/core/src/com/unciv/logic/automation/unit/WorkerAutomation.kt +++ b/core/src/com/unciv/logic/automation/unit/WorkerAutomation.kt @@ -169,7 +169,7 @@ class WorkerAutomation( */ private fun findTileToWork(unit: MapUnit, tilesToAvoid: Set): Tile { val currentTile = unit.getTile() - if (currentTile != tilesToAvoid && getBasePriority(currentTile, unit) >= 5 + if (currentTile !in tilesToAvoid && getBasePriority(currentTile, unit) >= 5 && (tileHasWorkToDo(currentTile, unit) || currentTile.isPillaged() || currentTile.hasFalloutEquivalent())) { return currentTile } diff --git a/core/src/com/unciv/logic/civilization/CivRankingHistory.kt b/core/src/com/unciv/logic/civilization/CivRankingHistory.kt index 6e2d66282d..d725992ea3 100644 --- a/core/src/com/unciv/logic/civilization/CivRankingHistory.kt +++ b/core/src/com/unciv/logic/civilization/CivRankingHistory.kt @@ -6,7 +6,7 @@ import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.ui.screens.victoryscreen.RankingType /** Records for each turn (key of outer map) what the score (value of inner map) was for each RankingType. */ -open class CivRankingHistory : HashMap>(), +class CivRankingHistory : HashMap>(), IsPartOfGameInfoSerialization { /** diff --git a/core/src/com/unciv/logic/map/mapunit/movement/UnitMovement.kt b/core/src/com/unciv/logic/map/mapunit/movement/UnitMovement.kt index 43a9d67002..53b890e10e 100644 --- a/core/src/com/unciv/logic/map/mapunit/movement/UnitMovement.kt +++ b/core/src/com/unciv/logic/map/mapunit/movement/UnitMovement.kt @@ -108,7 +108,7 @@ class UnitMovement(val unit: MapUnit) { return cachedPath val currentTile = unit.getTile() - if (currentTile.position == destination) { + if (currentTile.position == destination.position) { // edge case that's needed, so that workers will know that they can reach their own tile. *sigh* pathfindingCache.setShortestPathCache(destination, listOf(currentTile)) return listOf(currentTile) diff --git a/core/src/com/unciv/logic/map/tile/Tile.kt b/core/src/com/unciv/logic/map/tile/Tile.kt index 6be6ff6d1b..3241639b37 100644 --- a/core/src/com/unciv/logic/map/tile/Tile.kt +++ b/core/src/com/unciv/logic/map/tile/Tile.kt @@ -33,7 +33,7 @@ import kotlin.math.abs import kotlin.math.min import kotlin.random.Random -open class Tile : IsPartOfGameInfoSerialization { +class Tile : IsPartOfGameInfoSerialization { @Transient lateinit var tileMap: TileMap diff --git a/core/src/com/unciv/logic/map/tile/TileHistory.kt b/core/src/com/unciv/logic/map/tile/TileHistory.kt index a8bd2843bd..db95c82d9a 100644 --- a/core/src/com/unciv/logic/map/tile/TileHistory.kt +++ b/core/src/com/unciv/logic/map/tile/TileHistory.kt @@ -13,7 +13,7 @@ import java.util.TreeMap * * @see com.unciv.ui.screens.victoryscreen.ReplayMap */ -open class TileHistory : IsPartOfGameInfoSerialization { +class TileHistory : IsPartOfGameInfoSerialization { class TileHistoryState( /** The name of the civilization owning this tile or `null` if there is no owner. */