mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-27 13:55:54 -04:00
Resolved #4963 - stat updates propagate where they didn't before
This commit is contained in:
parent
b51374859b
commit
61f7b14f04
@ -22,11 +22,11 @@ import com.unciv.models.ruleset.unit.BaseUnit
|
||||
import com.unciv.models.stats.Stat
|
||||
import com.unciv.models.stats.Stats
|
||||
import com.unciv.models.translations.tr
|
||||
import com.unciv.ui.screens.civilopediascreen.CivilopediaCategories
|
||||
import com.unciv.ui.screens.civilopediascreen.FormattedLine
|
||||
import com.unciv.ui.components.Fonts
|
||||
import com.unciv.ui.components.extensions.withItem
|
||||
import com.unciv.ui.components.extensions.withoutItem
|
||||
import com.unciv.ui.screens.civilopediascreen.CivilopediaCategories
|
||||
import com.unciv.ui.screens.civilopediascreen.FormattedLine
|
||||
import com.unciv.ui.screens.worldscreen.unit.actions.UnitActions
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.roundToInt
|
||||
@ -462,6 +462,7 @@ class CityConstructions : IsPartOfGameInfoSerialization {
|
||||
builtBuildingUniqueMap.clear()
|
||||
for (building in getBuiltBuildings())
|
||||
builtBuildingUniqueMap.addUniques(building.uniqueObjects)
|
||||
city.cityStats.update()
|
||||
}
|
||||
|
||||
fun addFreeBuildings() {
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.unciv.logic.city
|
||||
|
||||
import com.unciv.Constants
|
||||
import com.unciv.UncivGame
|
||||
import com.unciv.logic.map.tile.RoadStatus
|
||||
import com.unciv.models.Counter
|
||||
import com.unciv.models.ruleset.Building
|
||||
@ -475,7 +474,8 @@ class CityStats(val city: City) {
|
||||
}
|
||||
|
||||
fun update(currentConstruction: IConstruction = city.cityConstructions.getCurrentConstruction(),
|
||||
updateTileStats:Boolean = true) {
|
||||
updateTileStats:Boolean = true,
|
||||
updateCivStats:Boolean = true) {
|
||||
if (updateTileStats) updateTileStats()
|
||||
|
||||
// We need to compute Tile yields before happiness
|
||||
@ -491,7 +491,7 @@ class CityStats(val city: City) {
|
||||
for (stat in finalStatList.values) newCurrentCityStats.add(stat)
|
||||
currentCityStats = newCurrentCityStats
|
||||
|
||||
city.civ.updateStatsForNextTurn()
|
||||
if (updateCivStats) city.civ.updateStatsForNextTurn()
|
||||
}
|
||||
|
||||
private fun updateFinalStatList(currentConstruction: IConstruction) {
|
||||
|
@ -43,6 +43,7 @@ class CityFounder {
|
||||
city.expansion.reset()
|
||||
|
||||
city.tryUpdateRoadStatus()
|
||||
civInfo.cache.updateCitiesConnectedToCapital() // Carthage cities can connect immediately
|
||||
|
||||
val tile = city.getCenterTile()
|
||||
for (terrainFeature in tile.terrainFeatures.filter {
|
||||
@ -90,6 +91,7 @@ class CityFounder {
|
||||
))
|
||||
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo, city, triggerNotificationText = "due to founding a city")
|
||||
|
||||
|
||||
return city
|
||||
}
|
||||
|
||||
|
@ -253,6 +253,7 @@ class CityPopulationManager : IsPartOfGameInfoSerialization {
|
||||
}
|
||||
}
|
||||
|
||||
city.cityStats.update()
|
||||
}
|
||||
|
||||
fun getMaxSpecialists(): Counter<String> {
|
||||
|
@ -146,7 +146,9 @@ class CityReligionManager : IsPartOfGameInfoSerialization {
|
||||
if (checkForReligionAdoption) getMajorityReligionName()
|
||||
else null
|
||||
|
||||
val previousFollowers = followers.clone()
|
||||
followers.clear()
|
||||
|
||||
if (city.population.population <= 0) return
|
||||
|
||||
val remainders = HashMap<String, Float>()
|
||||
@ -175,6 +177,9 @@ class CityReligionManager : IsPartOfGameInfoSerialization {
|
||||
|
||||
followers.remove(Constants.noReligionName)
|
||||
|
||||
if (followers != previousFollowers)
|
||||
city.cityStats.update()
|
||||
|
||||
if (checkForReligionAdoption) {
|
||||
val newMajorityReligion = getMajorityReligionName()
|
||||
if (oldMajorityReligion != newMajorityReligion && newMajorityReligion != null) {
|
||||
|
@ -364,7 +364,10 @@ class Civilization : IsPartOfGameInfoSerialization {
|
||||
val cache = CivInfoTransientCache(this)
|
||||
|
||||
fun updateStatsForNextTurn() {
|
||||
val previousHappiness = stats.happiness
|
||||
stats.happiness = stats.getHappinessBreakdown().values.sum().roundToInt()
|
||||
if (stats.happiness != previousHappiness)
|
||||
for (city in cities) city.cityStats.update(updateCivStats = false)
|
||||
stats.statsForNextTurn = stats.getStatMapForNextTurn().values.reduce { a, b -> a + b }
|
||||
}
|
||||
|
||||
|
@ -45,6 +45,7 @@ class GoldenAgeManager : IsPartOfGameInfoSerialization {
|
||||
|
||||
for (unique in civInfo.getTriggeredUniques(UniqueType.TriggerUponEnteringGoldenAge))
|
||||
UniqueTriggerActivation.triggerCivwideUnique(unique, civInfo)
|
||||
civInfo.updateStatsForNextTurn()
|
||||
}
|
||||
|
||||
fun endTurn(happiness: Int) {
|
||||
|
@ -271,10 +271,11 @@ class TechManager : IsPartOfGameInfoSerialization {
|
||||
|
||||
updateTransientBooleans()
|
||||
for (city in civInfo.cities) {
|
||||
city.cityStats.update()
|
||||
city.updateCitizens = true
|
||||
}
|
||||
|
||||
if(!civInfo.isSpectator())
|
||||
if (!civInfo.isSpectator())
|
||||
civInfo.addNotification("Research of [$techName] has completed!", TechAction(techName),
|
||||
NotificationCategory.General,
|
||||
NotificationIcon.Science, techName)
|
||||
@ -392,7 +393,7 @@ class TechManager : IsPartOfGameInfoSerialization {
|
||||
for (policyBranch in getRuleset().policyBranches.values.filter {
|
||||
it.era == currentEra.name && civInfo.policies.isAdoptable(it)
|
||||
}) {
|
||||
if(!civInfo.isSpectator())
|
||||
if (!civInfo.isSpectator())
|
||||
civInfo.addNotification(
|
||||
"[${policyBranch.name}] policy branch unlocked!",
|
||||
NotificationCategory.General,
|
||||
|
@ -133,6 +133,7 @@ object UnitActions {
|
||||
else "Do you really want to disband this unit?".tr()
|
||||
ConfirmPopup(worldScreen, disbandText, "Disband unit") {
|
||||
unit.disband()
|
||||
unit.civ.updateStatsForNextTurn() // less upkeep!
|
||||
GUI.setUpdateWorldOnNextRender()
|
||||
if (GUI.getSettings().autoUnitCycle)
|
||||
worldScreen.switchToNextUnit()
|
||||
|
Loading…
x
Reference in New Issue
Block a user