Closed maliprinc420 closed 1 year ago
In this save, the resistance end in Sidon (so you have to buy a courthouse in it) and the starving problem is in Cape Town.
Didn't we literally just fix this a few commits ago? Yes, but only for the city buying the Courthouse...
Anyway, there's a few other situations where focus should reapply right away, not waiting till next-turn. Plonking down an Academy, or buying a Stable, or...
@yairm210 - By chance I have a local branch already that tries do deal with these cases, maybe some input on some of the questions?
GUI.isMyTurn() && GUI.getViewingPlayer() == City.civ
??? I get confused, is there a better way?City.updateCitizens
gets resolved on City.startTurn
, which happens some way down in TurnManager.startTurn
- how could we make sure there's no automation code before that relying on "optimized" city stats? After all, startTurn runs after endTurn, pretty late...More questions:
// Happiness change _may_ invalidate best worked tiles (#9238), but if the building
// isn't bought (or the AI bought it) then reassignPopulation will run later in startTurn anyway
if (boughtWith != null && isStatRelated(Stat.Happiness)) {
// Happiness is global, so it could affect all cities
for (city in civInfo.cities)
city.reassignPopulationDeferred()
}
What's wrong? Only that this could get waaay more expensive than we like and calls for a) coroutine and b) a test checking whether any happiness boundary was crossed (to avoid the overhead) - and the latter, with moddability, is not trivial. Cached once per Ruleset might be feasible - lazy would need to scan all conditionals on all objects - worth it?
// Buying a building influencing tile yield may change CityFocus decisions
val uniqueTypesModifyingYields = listOf(
UniqueType.StatsFromTiles, UniqueType.StatsFromTilesWithout, UniqueType.StatsFromObject,
UniqueType.StatPercentFromObject, UniqueType.AllStatsPercentFromObject
)
if (boughtWith != null && uniqueTypesModifyingYields.any { hasUnique(it) }) {
cityConstructions.city.reassignPopulationDeferred()
}
What's wrong? Only that a) the List shouldn't be instantiated every time and b) This is not the first time a RulesetObject.hasAnyUnique(foo: Collectible<UniqueType>)
might be handy... Big picture or little kludge?
Platform Windows 11 (64bit)
Version Version 4.6.13 (Build 869)
Describe the bug When buying a courthouse in a city, the hapiness go back to -10 but next turn their are cities that starve. (It's the same bug as https://github.com/yairm210/Unciv/issues/9189)
To Reproduce Steps to reproduce the behavior: