From 8565762df3c7b1d8252e4ec9f7b0408e2bc8cc8f Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 22 Feb 2023 09:29:32 +0200 Subject: [PATCH] chore: moved citiesConnectedToCapitalToMediums to cache --- core/src/com/unciv/logic/city/City.kt | 2 +- core/src/com/unciv/logic/civilization/Civilization.kt | 6 +----- .../civilization/transients/CivInfoTransientCache.kt | 11 ++++++++--- .../com/unciv/ui/screens/worldscreen/WorldScreen.kt | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/core/src/com/unciv/logic/city/City.kt b/core/src/com/unciv/logic/city/City.kt index c114106920..a418303d24 100644 --- a/core/src/com/unciv/logic/city/City.kt +++ b/core/src/com/unciv/logic/city/City.kt @@ -149,7 +149,7 @@ class City : IsPartOfGameInfoSerialization { } fun isConnectedToCapital(connectionTypePredicate: (Set) -> Boolean = { true }): Boolean { - val mediumTypes = civ.citiesConnectedToCapitalToMediums[this] ?: return false + val mediumTypes = civ.cache.citiesConnectedToCapitalToMediums[this] ?: return false return connectionTypePredicate(mediumTypes) } diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 7084748f45..db35f0fcab 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -99,10 +99,6 @@ class Civilization : IsPartOfGameInfoSerialization { @Transient var viewableInvisibleUnitsTiles = setOf() - /** Contains mapping of cities to travel mediums from ALL civilizations connected by trade routes to the capital */ - @Transient - var citiesConnectedToCapitalToMediums = mapOf>() - /** This is for performance since every movement calculation depends on this, see MapUnit comment */ @Transient var hasActiveEnemyMovementPenalty = false @@ -396,7 +392,7 @@ class Civilization : IsPartOfGameInfoSerialization { return newResourceSupplyList } - fun isCapitalConnectedToCity(city: City): Boolean = citiesConnectedToCapitalToMediums.keys.contains(city) + fun isCapitalConnectedToCity(city: City): Boolean = cache.citiesConnectedToCapitalToMediums.keys.contains(city) /** diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt index f45a34ce76..8bf3c7087a 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt @@ -2,6 +2,7 @@ package com.unciv.logic.civilization.transients import com.unciv.Constants import com.unciv.UncivGame +import com.unciv.logic.city.City import com.unciv.logic.civilization.Civilization import com.unciv.logic.civilization.NotificationCategory import com.unciv.logic.civilization.NotificationIcon @@ -34,6 +35,10 @@ class CivInfoTransientCache(val civInfo: Civilization) { @Transient val uniqueBuildings = hashSetOf() + /** Contains mapping of cities to travel mediums from ALL civilizations connected by trade routes to the capital */ + @Transient + var citiesConnectedToCapitalToMediums = mapOf>() + fun setTransients(){ val ruleset = civInfo.gameInfo.ruleset for (resource in ruleset.tileResources.values.asSequence().filter { it.resourceType == ResourceType.Strategic }.map { it.name }) { @@ -235,20 +240,20 @@ class CivInfoTransientCache(val civInfo: Civilization) { if (!initialSetup) { // In the initial setup we're loading an old game state, so it doesn't really count for (city in citiesReachedToMediums.keys) - if (city !in civInfo.citiesConnectedToCapitalToMediums && city.civ == civInfo && city != civInfo.getCapital()!!) + if (city !in citiesConnectedToCapitalToMediums && city.civ == civInfo && city != civInfo.getCapital()!!) civInfo.addNotification("[${city.name}] has been connected to your capital!", city.location, NotificationCategory.Cities, NotificationIcon.Gold ) // This may still contain cities that have just been destroyed by razing - thus the population test - for (city in civInfo.citiesConnectedToCapitalToMediums.keys) + for (city in citiesConnectedToCapitalToMediums.keys) if (!citiesReachedToMediums.containsKey(city) && city.civ == civInfo && city.population.population > 0) civInfo.addNotification("[${city.name}] has been disconnected from your capital!", city.location, NotificationCategory.Cities, NotificationIcon.Gold ) } - civInfo.citiesConnectedToCapitalToMediums = citiesReachedToMediums + citiesConnectedToCapitalToMediums = citiesReachedToMediums } fun updateCivResources() { diff --git a/core/src/com/unciv/ui/screens/worldscreen/WorldScreen.kt b/core/src/com/unciv/ui/screens/worldscreen/WorldScreen.kt index 09ec8c0e2e..9d4395f7fb 100644 --- a/core/src/com/unciv/ui/screens/worldscreen/WorldScreen.kt +++ b/core/src/com/unciv/ui/screens/worldscreen/WorldScreen.kt @@ -488,7 +488,7 @@ class WorldScreen( "\n Click 'Construct improvement' (above the unit table, bottom left)" + "\n > Choose the farm > \n Leave the worker there until it's finished" if (!completedTasks.contains("Create a trade route") - && viewingCiv.citiesConnectedToCapitalToMediums.any { it.key.civ == viewingCiv }) + && viewingCiv.cache.citiesConnectedToCapitalToMediums.any { it.key.civ == viewingCiv }) game.settings.addCompletedTutorialTask("Create a trade route") if (viewingCiv.cities.size > 1 && !completedTasks.contains("Create a trade route")) return "Create a trade route!\nConstruct roads between your capital and another city" +