mirror of
https://github.com/yairm210/Unciv.git
synced 2025-03-03 22:22:51 +07:00
Resolved "dead population working tiles" bug
When removing a worked tile, remove it from locked tiles
This commit is contained in:
parent
34815eb296
commit
4642c1a576
@ -138,11 +138,9 @@ class CityExpansionManager : IsPartOfGameInfoSerialization {
|
||||
city.tiles = city.tiles.withoutItem(tile.position)
|
||||
for (city in city.civ.cities) {
|
||||
if (city.isWorked(tile)) {
|
||||
city.workedTiles = city.workedTiles.withoutItem(tile.position)
|
||||
city.population.stopWorkingTile(tile.position)
|
||||
city.population.autoAssignPopulation()
|
||||
}
|
||||
if (city.lockedTiles.contains(tile.position))
|
||||
city.lockedTiles.remove(tile.position)
|
||||
}
|
||||
|
||||
tile.improvementFunctions.removeCreatesOneImprovementMarker()
|
||||
|
@ -3,8 +3,8 @@
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.logic.battle.Battle
|
||||
import com.unciv.logic.city.CityFlags
|
||||
import com.unciv.logic.city.City
|
||||
import com.unciv.logic.city.CityFlags
|
||||
import com.unciv.logic.civilization.Civilization
|
||||
import com.unciv.logic.civilization.NotificationCategory
|
||||
import com.unciv.logic.civilization.NotificationIcon
|
||||
@ -14,7 +14,6 @@ import com.unciv.logic.trade.TradeLogic
|
||||
import com.unciv.logic.trade.TradeOffer
|
||||
import com.unciv.logic.trade.TradeType
|
||||
import com.unciv.models.ruleset.unique.UniqueType
|
||||
import com.unciv.ui.utils.extensions.withoutItem
|
||||
import com.unciv.utils.debug
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
@ -287,8 +286,8 @@ class CityInfoConquestFunctions(val city: City){
|
||||
previousOwner = oldCiv.civName
|
||||
|
||||
// now that the tiles have changed, we need to reassign population
|
||||
for (it in workedTiles.filterNot { tiles.contains(it) }) {
|
||||
workedTiles = workedTiles.withoutItem(it)
|
||||
for (workedTile in workedTiles.filterNot { tiles.contains(it) }) {
|
||||
population.stopWorkingTile(workedTile)
|
||||
population.autoAssignPopulation()
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.unciv.logic.city.managers
|
||||
|
||||
import com.badlogic.gdx.math.Vector2
|
||||
import com.unciv.logic.IsPartOfGameInfoSerialization
|
||||
import com.unciv.logic.automation.Automation
|
||||
import com.unciv.logic.city.City
|
||||
@ -185,11 +186,16 @@ class CityPopulationManager : IsPartOfGameInfoSerialization {
|
||||
city.cityStats.update()
|
||||
}
|
||||
|
||||
fun stopWorkingTile(position: Vector2){
|
||||
city.workedTiles = city.workedTiles.withoutItem(position)
|
||||
city.lockedTiles.remove(position)
|
||||
}
|
||||
|
||||
fun unassignExtraPopulation() {
|
||||
for (tile in city.workedTiles.map { city.tileMap[it] }) {
|
||||
if (tile.getOwner() != city.civ || tile.getWorkingCity() != city
|
||||
|| tile.aerialDistanceTo(city.getCenterTile()) > 3)
|
||||
city.workedTiles = city.workedTiles.withoutItem(tile.position)
|
||||
city.population.stopWorkingTile(tile.position)
|
||||
}
|
||||
|
||||
// unassign specialists that cannot be (e.g. the city was captured and one of the specialist buildings was destroyed)
|
||||
@ -227,13 +233,14 @@ class CityPopulationManager : IsPartOfGameInfoSerialization {
|
||||
when {
|
||||
worstAutoJob != null && worstWorkedTile != null -> {
|
||||
// choose between removing a specialist and removing a tile
|
||||
if (valueWorstTile < valueWorstSpecialist)
|
||||
city.workedTiles = city.workedTiles.withoutItem(worstWorkedTile.position)
|
||||
if (valueWorstTile < valueWorstSpecialist) {
|
||||
stopWorkingTile(worstWorkedTile.position)
|
||||
}
|
||||
else
|
||||
specialistAllocations.add(worstAutoJob, -1)
|
||||
}
|
||||
worstAutoJob != null -> specialistAllocations.add(worstAutoJob, -1)
|
||||
worstWorkedTile != null -> city.workedTiles = city.workedTiles.withoutItem(worstWorkedTile.position)
|
||||
worstWorkedTile != null -> stopWorkingTile(worstWorkedTile.position)
|
||||
else -> {
|
||||
// It happens when "cityInfo.manualSpecialists == true"
|
||||
// and population goes below the number of specialists, e.g. city is razing.
|
||||
|
Loading…
Reference in New Issue
Block a user