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