diff --git a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt index f2f1638ff0..a97055e500 100644 --- a/core/src/com/unciv/logic/civilization/CivilizationInfo.kt +++ b/core/src/com/unciv/logic/civilization/CivilizationInfo.kt @@ -651,13 +651,7 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { questManager.justMet(otherCiv) // Include them in war with major pseudo-quest } - fun discoverNaturalWonder(naturalWonderName: String) { - naturalWonders.add(naturalWonderName) - } - - override fun toString(): String { - return civName - } // for debug + override fun toString(): String = civName // for debug /** * Determine loss conditions. @@ -689,15 +683,6 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { fun isAtWar() = diplomacy.values.any { it.diplomaticStatus == DiplomaticStatus.War && !it.otherCiv().isDefeated() } - fun canEnterBordersOf(otherCiv: CivilizationInfo): Boolean { - if (otherCiv == this) return true // own borders are always open - if (otherCiv.isBarbarian() || isBarbarian()) return false // barbarians blocks the routes - val diplomacyManager = diplomacy[otherCiv.civName] - ?: return false // not encountered yet - if (otherCiv.isCityState() && diplomacyManager.diplomaticStatus != DiplomaticStatus.War) return true - return diplomacyManager.hasOpenBorders - } - fun getEnemyMovementPenalty(enemyUnit: MapUnit): Float { if (enemyMovementPenaltyUniques != null && enemyMovementPenaltyUniques!!.any()) { return enemyMovementPenaltyUniques!!.sumOf { @@ -784,16 +769,6 @@ class CivilizationInfo : IsPartOfGameInfoSerialization { return sum } - - fun getGreatPeople(): HashSet { - val greatPeople = gameInfo.ruleSet.units.values.asSequence() - .filter { it.isGreatPerson() } - .map { getEquivalentUnit(it.name) } - return if (!gameInfo.isReligionEnabled()) - greatPeople.filter { !it.hasUnique(UniqueType.HiddenWithoutReligion) }.toHashSet() - else greatPeople.toHashSet() - } - fun hasTechOrPolicy(techOrPolicyName: String) = tech.isResearched(techOrPolicyName) || policies.isAdopted(techOrPolicyName) diff --git a/core/src/com/unciv/logic/civilization/managers/GreatPersonManager.kt b/core/src/com/unciv/logic/civilization/managers/GreatPersonManager.kt index 699b153ab5..20a30a4558 100644 --- a/core/src/com/unciv/logic/civilization/managers/GreatPersonManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/GreatPersonManager.kt @@ -3,6 +3,8 @@ package com.unciv.logic.civilization.managers import com.unciv.logic.IsPartOfGameInfoSerialization import com.unciv.logic.civilization.CivilizationInfo import com.unciv.models.Counter +import com.unciv.models.ruleset.unique.UniqueType +import com.unciv.models.ruleset.unit.BaseUnit // todo: Great Admiral? // todo: Free GP from policies and wonders should increase threshold according to the wiki @@ -62,4 +64,13 @@ class GreatPersonManager : IsPartOfGameInfoSerialization { } + fun getGreatPeople(): HashSet { + val greatPeople = civInfo.gameInfo.ruleSet.units.values.asSequence() + .filter { it.isGreatPerson() } + .map { civInfo.getEquivalentUnit(it.name) } + return if (!civInfo.gameInfo.isReligionEnabled()) + greatPeople.filter { !it.hasUnique(UniqueType.HiddenWithoutReligion) }.toHashSet() + else greatPeople.toHashSet() + } + } diff --git a/core/src/com/unciv/logic/civilization/managers/QuestManager.kt b/core/src/com/unciv/logic/civilization/managers/QuestManager.kt index 6eb438439c..a5d7451859 100644 --- a/core/src/com/unciv/logic/civilization/managers/QuestManager.kt +++ b/core/src/com/unciv/logic/civilization/managers/QuestManager.kt @@ -755,7 +755,7 @@ class QuestManager : IsPartOfGameInfoSerialization { val challengerGreatPeople = challenger.getCivGreatPeople().map { it.baseUnit.getReplacedUnit(ruleSet) } val cityStateGreatPeople = civInfo.getCivGreatPeople().map { it.baseUnit.getReplacedUnit(ruleSet) } - val greatPeople = challenger.getGreatPeople() + val greatPeople = challenger.greatPeople.getGreatPeople() .map { it.getReplacedUnit(ruleSet) } .distinct() .filterNot { challengerGreatPeople.contains(it) diff --git a/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt b/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt index 7937b38d6a..b9a74de467 100644 --- a/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt +++ b/core/src/com/unciv/logic/civilization/transients/CapitalConnectionsFinder.kt @@ -2,6 +2,7 @@ package com.unciv.logic.civilization.transients import com.unciv.logic.city.CityInfo import com.unciv.logic.civilization.CivilizationInfo +import com.unciv.logic.civilization.diplomacy.DiplomaticStatus import com.unciv.logic.map.BFS import com.unciv.logic.map.RoadStatus import com.unciv.logic.map.TileInfo @@ -13,7 +14,7 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) { private var citiesToCheck = mutableListOf(civInfo.getCapital()!!) private lateinit var newCitiesToCheck: MutableList - private val openBordersCivCities = civInfo.gameInfo.getCities().filter { civInfo.canEnterBordersOf(it.civInfo) } + private val openBordersCivCities = civInfo.gameInfo.getCities().filter { canEnterBordersOf(it.civInfo) } private val harbor = "Harbor" // hardcoding at least centralized for this class for now private val road = RoadStatus.Road.name @@ -96,7 +97,7 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) { val bfs = BFS(cityToConnectFrom.getCenterTile()) { val owner = it.getOwner() - (it.isCityCenter() || tileFilter(it)) && (owner == null || civInfo.canEnterBordersOf(owner)) + (it.isCityCenter() || tileFilter(it)) && (owner == null || canEnterBordersOf(owner)) } bfs.stepToEnd() val reachedCities = openBordersCivCities.filter { @@ -126,4 +127,14 @@ class CapitalConnectionsFinder(private val civInfo: CivilizationInfo) { citiesReachedToMediums[this]!!.add(transportType) } + + private fun canEnterBordersOf(otherCiv: CivilizationInfo): Boolean { + if (otherCiv == civInfo) return true // own borders are always open + if (otherCiv.isBarbarian() || civInfo.isBarbarian()) return false // barbarians blocks the routes + val diplomacyManager = civInfo.diplomacy[otherCiv.civName] + ?: return false // not encountered yet + if (otherCiv.isCityState() && diplomacyManager.diplomaticStatus != DiplomaticStatus.War) return true + return diplomacyManager.hasOpenBorders + } + } diff --git a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt index 5575d30a3d..c9bab87aef 100644 --- a/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt +++ b/core/src/com/unciv/logic/civilization/transients/CivInfoTransientCache.kt @@ -142,7 +142,7 @@ class CivInfoTransientCache(val civInfo: CivilizationInfo) { // GBR could be discovered twice otherwise! if (civInfo.naturalWonders.contains(tile.naturalWonder)) continue - civInfo.discoverNaturalWonder(tile.naturalWonder!!) + civInfo.naturalWonders.add(tile.naturalWonder!!) civInfo.addNotification("We have discovered [${tile.naturalWonder}]!", tile.position, NotificationCategory.General, "StatIcons/Happiness") diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt index 2569776f46..b95f6aee53 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueTriggerActivation.kt @@ -175,7 +175,7 @@ object UniqueTriggerActivation { OneTimeFreeGreatPerson, MayanGainGreatPerson -> { if (civInfo.isSpectator()) return false - val greatPeople = civInfo.getGreatPeople() + val greatPeople = civInfo.greatPeople.getGreatPeople() if (unique.type == MayanGainGreatPerson && civInfo.greatPeople.longCountGPPool.isEmpty()) civInfo.greatPeople.longCountGPPool = greatPeople.map { it.name }.toHashSet() if (civInfo.isHuman()) { diff --git a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt index c2477a6228..8cd0031a46 100644 --- a/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt +++ b/core/src/com/unciv/ui/pickerscreens/GreatPersonPickerScreen.kt @@ -16,7 +16,7 @@ class GreatPersonPickerScreen(val civInfo:CivilizationInfo) : PickerScreen() { closeButton.isVisible = false rightSideButton.setText("Choose a free great person".tr()) - val greatPersonUnits = civInfo.getGreatPeople() + val greatPersonUnits = civInfo.greatPeople.getGreatPeople() val useMayaLongCount = civInfo.greatPeople.mayaLimitedFreeGP > 0 for (unit in greatPersonUnits) {