From 5ab535badc483a398a483dd9fcfb72f8a28f6f5c Mon Sep 17 00:00:00 2001 From: Oskar Niesen Date: Sat, 22 Jun 2024 22:29:56 -0500 Subject: [PATCH] Revert "Cache 'majority religion' and uniques, recalc when updating followers (#11804)" (#11815) This reverts commit 2087c36c6d6ce4232c693785fbb99e7b52cfd4f6. --- core/src/com/unciv/logic/city/City.kt | 5 ++- .../city/managers/CityReligionManager.kt | 33 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/core/src/com/unciv/logic/city/City.kt b/core/src/com/unciv/logic/city/City.kt index ec91ba228d..e6dc57d223 100644 --- a/core/src/com/unciv/logic/city/City.kt +++ b/core/src/com/unciv/logic/city/City.kt @@ -492,9 +492,8 @@ class City : IsPartOfGameInfoSerialization, INamed { fun getLocalMatchingUniques(uniqueType: UniqueType, stateForConditionals: StateForConditionals = StateForConditionals(this)): Sequence { val uniques = cityConstructions.builtBuildingUniqueMap.getUniques(uniqueType).filter { it.isLocalEffect } + religion.getUniques().filter { it.type == uniqueType } - return if (uniques.any()) - uniques.filter { !it.isTimedTriggerable && it.conditionalsApply(stateForConditionals) } - .flatMap { it.getMultiplied(stateForConditionals) } + return if (uniques.any()) uniques.filter { !it.isTimedTriggerable && it.conditionalsApply(stateForConditionals) } + .flatMap { it.getMultiplied(stateForConditionals) } else uniques } diff --git a/core/src/com/unciv/logic/city/managers/CityReligionManager.kt b/core/src/com/unciv/logic/city/managers/CityReligionManager.kt index 187c85add5..46e24cfce6 100644 --- a/core/src/com/unciv/logic/city/managers/CityReligionManager.kt +++ b/core/src/com/unciv/logic/city/managers/CityReligionManager.kt @@ -24,9 +24,6 @@ class CityReligionManager : IsPartOfGameInfoSerialization { @Transient private val followers: Counter = Counter() - @Transient - private var majorityReligion: Religion? = null - @delegate:Transient private val pressureFromAdjacentCities: Int by lazy { city.civ.gameInfo.speed.religiousPressureAdjacentCity } @@ -50,7 +47,10 @@ class CityReligionManager : IsPartOfGameInfoSerialization { fun setTransients(city: City) { this.city = city - updateNumberOfFollowers(true) + // We don't need to check for changes in the majority religion, and as this + // loads in the religion, _of course_ the religion changes, but it shouldn't + // have any effect + updateNumberOfFollowers(false) } fun endTurn() { @@ -139,7 +139,11 @@ class CityReligionManager : IsPartOfGameInfoSerialization { religionsAtSomePointAdopted.add(newMajorityReligion) } - private fun updateNumberOfFollowers(initializationPhase: Boolean = false) { + private fun updateNumberOfFollowers(checkForReligionAdoption: Boolean = true) { + val oldMajorityReligion = + if (checkForReligionAdoption) getMajorityReligionName() + else null + val previousFollowers = followers.clone() followers.clear() @@ -171,20 +175,17 @@ class CityReligionManager : IsPartOfGameInfoSerialization { followers.remove(Constants.noReligionName) - val oldMajorityReligion = majorityReligion - val newMajorityReligion = calculateMajorityReligionName() - if (initializationPhase) { - if (oldMajorityReligion?.name != newMajorityReligion && newMajorityReligion != null) { + if (checkForReligionAdoption) { + val newMajorityReligion = getMajorityReligionName() + if (oldMajorityReligion != newMajorityReligion && newMajorityReligion != null) { triggerReligionAdoption(newMajorityReligion) } - if (oldMajorityReligion?.name != newMajorityReligion) + if (oldMajorityReligion != newMajorityReligion) city.civ.cache.updateCivResources() // follower uniques can provide resources if (followers != previousFollowers) city.cityStats.update() } - - majorityReligion = city.civ.gameInfo.religions[newMajorityReligion] } fun getNumberOfFollowers(): Counter { @@ -225,7 +226,7 @@ class CityReligionManager : IsPartOfGameInfoSerialization { updateNumberOfFollowers() } - fun calculateMajorityReligionName(): String? { + fun getMajorityReligionName(): String? { if (followers.isEmpty()) return null val religionWithMaxPressure = pressures.maxByOrNull { it.value }!!.key return when { @@ -235,8 +236,10 @@ class CityReligionManager : IsPartOfGameInfoSerialization { } } - fun getMajorityReligionName(): String? = majorityReligion?.name - fun getMajorityReligion() = majorityReligion + fun getMajorityReligion(): Religion? { + val majorityReligionName = getMajorityReligionName() ?: return null + return city.civ.gameInfo.religions[majorityReligionName] + } private fun getAffectedBySurroundingCities() { if (!city.civ.gameInfo.isReligionEnabled()) return // No religion, no spreading