From d31a2d83ba489831102d7a40517da27b331e77e9 Mon Sep 17 00:00:00 2001 From: SomeTroglodyte <63000004+SomeTroglodyte@users.noreply.github.com> Date: Wed, 17 May 2023 23:37:38 +0200 Subject: [PATCH] Happiness change from bought buildings can reapply citizen focus (#9395) * Happiness change from bought buildings can reapply citizen focus * Fix compilation error --- .../unciv/logic/automation/city/ConstructionAutomation.kt | 3 +-- core/src/com/unciv/models/ruleset/Building.kt | 8 ++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt b/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt index 2e636943c1..dde71e5a5a 100644 --- a/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt +++ b/core/src/com/unciv/logic/automation/city/ConstructionAutomation.kt @@ -314,8 +314,7 @@ class ConstructionAutomation(val cityConstructions: CityConstructions){ private fun addHappinessBuildingChoice() { val happinessBuilding = nonWonders - .filter { (it.isStatRelated(Stat.Happiness) - || it.hasUnique(UniqueType.RemoveAnnexUnhappiness)) + .filter { it.isStatRelated(Stat.Happiness) && Automation.allowAutomatedConstruction(civInfo, cityInfo, it) } .filterBuildable() .minByOrNull { it.cost } diff --git a/core/src/com/unciv/models/ruleset/Building.kt b/core/src/com/unciv/models/ruleset/Building.kt index 131b6ff153..17c856218e 100644 --- a/core/src/com/unciv/models/ruleset/Building.kt +++ b/core/src/com/unciv/models/ruleset/Building.kt @@ -689,6 +689,13 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (isStatRelated(Stat.Science) && civInfo.hasUnique(UniqueType.TechBoostWhenScientificBuildingsBuiltInCapital)) civInfo.tech.addScience(civInfo.tech.scienceOfLast8Turns.sum() / 8) + // Happiness change _may_ invalidate best worked tiles (#9238), but if the building + // isn't bought then reassignPopulation will run later in startTurn anyway + if (boughtWith != null && isStatRelated(Stat.Happiness)) { + cityConstructions.city.reassignPopulation() + cityConstructions.city.updateCitizens = false + } + cityConstructions.city.cityStats.update() // new building, new stats civInfo.cache.updateCivResources() // this building/unit could be a resource-requiring one civInfo.cache.updateCitiesConnectedToCapital(false) // could be a connecting building, like a harbor @@ -721,6 +728,7 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction { if (getMatchingUniques(UniqueType.Stats).any { it.stats[stat] > 0 }) return true if (getMatchingUniques(UniqueType.StatsFromTiles).any { it.stats[stat] > 0 }) return true if (getMatchingUniques(UniqueType.StatsPerPopulation).any { it.stats[stat] > 0 }) return true + if (stat == Stat.Happiness && hasUnique(UniqueType.RemoveAnnexUnhappiness)) return true return false }