diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index 32595b3954..d4dccfb6db 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -572,30 +572,7 @@ class CivilizationInfo { else -> getCivUnits().none() } - fun getEra(): Era { - if (gameInfo.ruleSet.technologies.isEmpty() || tech.researchedTechnologies.isEmpty()) - return Era() - val maxEraOfResearchedTechs = tech.researchedTechnologies - .asSequence() - .map { it.column!! } - .maxByOrNull { it.columnNumber }!! - .era - val maxEra = gameInfo.ruleSet.eras[maxEraOfResearchedTechs]!! - - val researchedTechsHashset = tech.researchedTechnologies.toHashSet() - val minEraOfNonResearchedTechs = gameInfo.ruleSet.technologies.values - .asSequence() - .filter { it !in researchedTechsHashset } - .map { it.column!! } - .minByOrNull { it.columnNumber } - ?.era - ?: return maxEra - - val minEra = gameInfo.ruleSet.eras[minEraOfNonResearchedTechs]!! - - return if (minEra.eraNumber > maxEra.eraNumber) minEra - else maxEra - } + fun getEra(): Era = tech.era fun getEraNumber(): Int = getEra().eraNumber diff --git a/core/src/com/unciv/logic/civilization/TechManager.kt b/core/src/com/unciv/logic/civilization/TechManager.kt index 7ed8374951..73ce340473 100644 --- a/core/src/com/unciv/logic/civilization/TechManager.kt +++ b/core/src/com/unciv/logic/civilization/TechManager.kt @@ -4,6 +4,7 @@ import com.unciv.logic.city.CityInfo import com.unciv.logic.map.MapSize import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.TileInfo +import com.unciv.models.ruleset.Era import com.unciv.models.ruleset.unique.UniqueMap import com.unciv.models.ruleset.unique.UniqueTriggerActivation import com.unciv.models.ruleset.tech.Technology @@ -20,6 +21,9 @@ import kotlin.math.max import kotlin.math.min class TechManager { + @Transient + var era: Era = Era() + @Transient lateinit var civInfo: CivilizationInfo /** This is the Transient list of Technologies */ @@ -326,6 +330,37 @@ class TechManager { if (unique.params[1] != techName) continue civInfo.addNotification("You have unlocked [The Long Count]!", MayaLongCountAction(), MayaCalendar.notificationIcon) } + + updateEra() + } + + fun updateEra() { + val ruleset = civInfo.gameInfo.ruleSet + if (ruleset.technologies.isEmpty() || researchedTechnologies.isEmpty()) + return + + val maxEraOfResearchedTechs = researchedTechnologies + .asSequence() + .map { it.column!! } + .maxByOrNull { it.columnNumber }!! + .era + val maxEra = ruleset.eras[maxEraOfResearchedTechs]!! + + val minEraOfNonResearchedTechs = ruleset.technologies.values + .asSequence() + .filter { it !in researchedTechnologies } + .map { it.column!! } + .minByOrNull { it.columnNumber } + ?.era + if (minEraOfNonResearchedTechs == null) { + era = maxEra + return + } + + val minEra = ruleset.eras[minEraOfNonResearchedTechs]!! + + era = if (minEra.eraNumber <= maxEra.eraNumber) maxEra + else minEra } fun addTechToTransients(tech: Technology) { @@ -337,6 +372,7 @@ class TechManager { researchedTechnologies.addAll(techsResearched.map { getRuleset().technologies[it]!! }) researchedTechnologies.forEach { addTechToTransients(it) } updateTransientBooleans() + updateEra() } private fun updateTransientBooleans() {