From af8b307782cb36ddce01ea1ced195c566d6a244d Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 2 May 2018 08:39:27 +0300 Subject: [PATCH] When capturing a city, the expansion of that city is reset. This leaves a situation where previously worked tiles are outside of the new borders, and so the population that was working there needs to be reassigned. --- core/src/com/unciv/logic/battle/Battle.kt | 5 +++++ core/src/com/unciv/logic/city/CityInfo.kt | 2 +- core/src/com/unciv/logic/city/PopulationManager.kt | 4 ++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/com/unciv/logic/battle/Battle.kt b/core/src/com/unciv/logic/battle/Battle.kt index f97da67511..e3eb8346af 100644 --- a/core/src/com/unciv/logic/battle/Battle.kt +++ b/core/src/com/unciv/logic/battle/Battle.kt @@ -131,6 +131,11 @@ class Battle(val gameInfo:GameInfo) { city.getCenterTile().unit = null city.expansion.cultureStored = 0; city.expansion.reset() + + // now that the tiles have changed, we need to reassign population + city.workedTiles.filterNot { city.tiles.contains(it) } + .forEach { city.workedTiles.remove(it); city.population.autoAssignPopulation() } + if(city.cityConstructions.isBuilt("Palace")){ city.cityConstructions.builtBuildings.remove("Palace") if(enemyCiv.cities.isEmpty()) { diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index 554eb9735b..856c99df0e 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -100,7 +100,7 @@ class CityInfo { if (listOf("Forest", "Jungle", "Marsh").contains(tile.terrainFeature)) tile.terrainFeature = null - population.autoAssignWorker() + population.autoAssignPopulation() cityStats.update() } diff --git a/core/src/com/unciv/logic/city/PopulationManager.kt b/core/src/com/unciv/logic/city/PopulationManager.kt index 6d8923258b..c138d8a899 100644 --- a/core/src/com/unciv/logic/city/PopulationManager.kt +++ b/core/src/com/unciv/logic/city/PopulationManager.kt @@ -54,12 +54,12 @@ class PopulationManager { foodStored -= getFoodToNextPopulation() if (cityInfo.buildingUniques.contains("FoodCarriesOver")) foodStored += (0.4f * getFoodToNextPopulation()).toInt() // Aqueduct special population++ - autoAssignWorker() + autoAssignPopulation() cityInfo.civInfo.addNotification(cityInfo.name + " has grown!", cityInfo.location) } } - internal fun autoAssignWorker() { + internal fun autoAssignPopulation() { val toWork: TileInfo? = cityInfo.getTiles() .filterNot { cityInfo.workedTiles.contains(it.position) || cityInfo.location==it.position} .maxBy { Automation().rankTile(it,cityInfo.civInfo) }