From eb6a11cccb32a20ff2186283acf5ab0cb49b71fb Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Tue, 19 May 2020 19:21:26 +0300 Subject: [PATCH] Resolved #2638 - Auto-assign of population no longer "double books" tiles --- core/src/com/unciv/logic/city/PopulationManager.kt | 14 +++++++------- .../com/unciv/models/ruleset/tech/Technology.kt | 3 ++- .../com/unciv/ui/cityscreen/CityScreenTileTable.kt | 2 +- core/src/com/unciv/ui/cityscreen/CityTileGroup.kt | 3 +-- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/core/src/com/unciv/logic/city/PopulationManager.kt b/core/src/com/unciv/logic/city/PopulationManager.kt index 8b1443170b..c838993568 100644 --- a/core/src/com/unciv/logic/city/PopulationManager.kt +++ b/core/src/com/unciv/logic/city/PopulationManager.kt @@ -74,22 +74,22 @@ class PopulationManager { // if small city, favor production above all, ignore gold! // if larger city, food should be worth less! internal fun autoAssignPopulation(foodWeight: Float = 1f) { - if(getFreePopulation()==0) return + if (getFreePopulation() == 0) return //evaluate tiles val bestTile: TileInfo? = cityInfo.getTiles() .filter { it.aerialDistanceTo(cityInfo.getCenterTile()) <= 3 } - .filterNot { cityInfo.workedTiles.contains(it.position) || cityInfo.location==it.position} - .maxBy { Automation.rankTileForCityWork(it,cityInfo, foodWeight) } - val valueBestTile = if(bestTile==null) 0f + .filterNot { it.isWorked() || cityInfo.location == it.position } + .maxBy { Automation.rankTileForCityWork(it, cityInfo, foodWeight) } + val valueBestTile = if (bestTile == null) 0f else Automation.rankTileForCityWork(bestTile, cityInfo, foodWeight) //evaluate specialists val maxSpecialistsMap = getMaxSpecialists().toHashMap() val policies = cityInfo.civInfo.policies.adoptedPolicies val bestJob: Stat? = specialists.toHashMap() - .filter {maxSpecialistsMap.containsKey(it.key) && it.value < maxSpecialistsMap[it.key]!!} - .map {it.key} + .filter { maxSpecialistsMap.containsKey(it.key) && it.value < maxSpecialistsMap[it.key]!! } + .map { it.key } .maxBy { Automation.rankSpecialist(cityInfo.cityStats.getStatsOfSpecialist(it, policies), cityInfo) } var valueBestSpecialist = 0f if (bestJob != null) { @@ -110,7 +110,7 @@ class PopulationManager { fun unassignExtraPopulation() { for(tile in cityInfo.workedTiles.map { cityInfo.tileMap[it] }) { - if (tile.getOwner() != cityInfo.civInfo) + if (tile.getOwner() != cityInfo.civInfo || tile.getWorkingCity() != cityInfo) cityInfo.workedTiles = cityInfo.workedTiles.withoutItem(tile.position) if (tile.aerialDistanceTo(cityInfo.getCenterTile()) > 3) cityInfo.workedTiles = cityInfo.workedTiles.withoutItem(tile.position) diff --git a/core/src/com/unciv/models/ruleset/tech/Technology.kt b/core/src/com/unciv/models/ruleset/tech/Technology.kt index 749af27a47..5ff254e601 100644 --- a/core/src/com/unciv/models/ruleset/tech/Technology.kt +++ b/core/src/com/unciv/models/ruleset/tech/Technology.kt @@ -56,7 +56,8 @@ class Technology { lineList += " * " + wonder.name.tr() + " (" + wonder.getShortDescription(ruleset) + ")" } - val revealedResource = ruleset.tileResources.values.filter { it.revealedBy == name }.map { it.name }.firstOrNull() // can only be one + val revealedResource = ruleset.tileResources.values.filter { it.revealedBy == name } + .map { it.name }.firstOrNull() // can only be one if (revealedResource != null) lineList += "Reveals [$revealedResource] on the map".tr() val tileImprovements = ruleset.tileImprovements.values.filter { it.techRequired == name } diff --git a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt index b7e606c0a3..e841fdb8f9 100644 --- a/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt +++ b/core/src/com/unciv/ui/cityscreen/CityScreenTileTable.kt @@ -53,7 +53,7 @@ class CityScreenTileTable(val cityScreen: CityScreen): Table(){ if(city.civInfo.cities.filterNot { it==city } .any { it.workedTiles.contains(selectedTile.position) }) { - innerTable.add("Worked by [${selectedTile.getCity()!!.name}]".toLabel()).row() + innerTable.add("Worked by [${selectedTile.getWorkingCity()!!.name}]".toLabel()).row() } if(city.workedTiles.contains(selectedTile.position)){ diff --git a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt index a253dfd4e5..4c97e9165f 100644 --- a/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt +++ b/core/src/com/unciv/ui/cityscreen/CityTileGroup.kt @@ -39,8 +39,7 @@ class CityTileGroup(private val city: CityInfo, tileInfo: TileInfo, tileSetStrin baseLayerGroup.color.a = 0.5f } - city.civInfo.cities.filterNot { it == city } // worked by another city - .any { it.workedTiles.contains(tileInfo.position) } -> { + tileInfo.isWorked() && tileInfo.getWorkingCity()!=city -> { // Don't fade out, but don't add a population icon either. baseLayerGroup.color.a = 0.5f }