mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 22:37:02 -04:00
Improve connected to / disconnected from Capital handling (#9545)
* Improve connected to / disconnected from Capital handling * Improve connected to / disconnected from Capital handling - typo
This commit is contained in:
parent
ae74dca074
commit
4bf319b36a
@ -101,6 +101,13 @@ class City : IsPartOfGameInfoSerialization {
|
|||||||
|
|
||||||
internal var flagsCountdown = HashMap<String, Int>()
|
internal var flagsCountdown = HashMap<String, Int>()
|
||||||
|
|
||||||
|
/** Persisted connected-to-capital (by any medium) to allow "disconnected" notifications after loading */
|
||||||
|
// Unknown only exists to support older saves, so those do not generate spurious connected/disconnected messages.
|
||||||
|
// The other names are chosen so serialization is compatible with a Boolean to allow easy replacement in the future.
|
||||||
|
@Suppress("EnumEntryName")
|
||||||
|
enum class ConnectedToCapitalStatus { Unknown, `false`, `true` }
|
||||||
|
var connectedToCapitalStatus = ConnectedToCapitalStatus.Unknown
|
||||||
|
|
||||||
fun hasDiplomaticMarriage(): Boolean = foundingCiv == ""
|
fun hasDiplomaticMarriage(): Boolean = foundingCiv == ""
|
||||||
|
|
||||||
//region pure functions
|
//region pure functions
|
||||||
@ -129,6 +136,7 @@ class City : IsPartOfGameInfoSerialization {
|
|||||||
toReturn.cityAIFocus = cityAIFocus
|
toReturn.cityAIFocus = cityAIFocus
|
||||||
toReturn.avoidGrowth = avoidGrowth
|
toReturn.avoidGrowth = avoidGrowth
|
||||||
toReturn.manualSpecialists = manualSpecialists
|
toReturn.manualSpecialists = manualSpecialists
|
||||||
|
toReturn.connectedToCapitalStatus = connectedToCapitalStatus
|
||||||
return toReturn
|
return toReturn
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,24 +253,33 @@ class CivInfoTransientCache(val civInfo: Civilization) {
|
|||||||
fun updateCitiesConnectedToCapital(initialSetup: Boolean = false) {
|
fun updateCitiesConnectedToCapital(initialSetup: Boolean = false) {
|
||||||
if (civInfo.cities.isEmpty() || civInfo.getCapital() == null) return // eg barbarians
|
if (civInfo.cities.isEmpty() || civInfo.getCapital() == null) return // eg barbarians
|
||||||
|
|
||||||
val citiesReachedToMediums = CapitalConnectionsFinder(civInfo).find()
|
val oldConnectedCities = if (initialSetup)
|
||||||
|
civInfo.cities.filter { it.connectedToCapitalStatus == City.ConnectedToCapitalStatus.`true` }
|
||||||
|
else citiesConnectedToCapitalToMediums.keys
|
||||||
|
val oldMaybeConnectedCities = if (initialSetup)
|
||||||
|
civInfo.cities.filter { it.connectedToCapitalStatus != City.ConnectedToCapitalStatus.`false` }
|
||||||
|
else citiesConnectedToCapitalToMediums.keys
|
||||||
|
|
||||||
if (!initialSetup) { // In the initial setup we're loading an old game state, so it doesn't really count
|
citiesConnectedToCapitalToMediums = CapitalConnectionsFinder(civInfo).find()
|
||||||
for (city in citiesReachedToMediums.keys)
|
|
||||||
if (city !in citiesConnectedToCapitalToMediums && city.civ == civInfo && city != civInfo.getCapital()!!)
|
val newConnectedCities = citiesConnectedToCapitalToMediums.keys
|
||||||
|
|
||||||
|
for (city in newConnectedCities)
|
||||||
|
if (city !in oldMaybeConnectedCities && city.civ == civInfo && city != civInfo.getCapital()!!)
|
||||||
civInfo.addNotification("[${city.name}] has been connected to your capital!",
|
civInfo.addNotification("[${city.name}] has been connected to your capital!",
|
||||||
city.location, NotificationCategory.Cities, NotificationIcon.Gold
|
city.location, NotificationCategory.Cities, NotificationIcon.Gold
|
||||||
)
|
)
|
||||||
|
|
||||||
// This may still contain cities that have just been destroyed by razing - thus the population test
|
// This may still contain cities that have just been destroyed by razing - thus the population test
|
||||||
for (city in citiesConnectedToCapitalToMediums.keys)
|
for (city in oldConnectedCities)
|
||||||
if (!citiesReachedToMediums.containsKey(city) && city.civ == civInfo && city.population.population > 0)
|
if (city !in newConnectedCities && city.civ == civInfo && city.population.population > 0)
|
||||||
civInfo.addNotification("[${city.name}] has been disconnected from your capital!",
|
civInfo.addNotification("[${city.name}] has been disconnected from your capital!",
|
||||||
city.location, NotificationCategory.Cities, NotificationIcon.Gold
|
city.location, NotificationCategory.Cities, NotificationIcon.Gold
|
||||||
)
|
)
|
||||||
}
|
|
||||||
|
|
||||||
citiesConnectedToCapitalToMediums = citiesReachedToMediums
|
for (city in civInfo.cities)
|
||||||
|
city.connectedToCapitalStatus = if (city in newConnectedCities)
|
||||||
|
City.ConnectedToCapitalStatus.`true` else City.ConnectedToCapitalStatus.`false`
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateCivResources() {
|
fun updateCivResources() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user