Added "in other cities" as a cityFilter (#5131)

This commit is contained in:
Xander Lenstra
2021-09-08 20:41:57 +02:00
committed by GitHub
parent 3722fab38d
commit d247cacbca
4 changed files with 19 additions and 9 deletions

View File

@ -301,6 +301,7 @@
"requiredBuilding": "Monument",
"maintenance": 2,
"hurryCostModifier": 25,
"uniques": ["Destroyed when the city is captured"],
"requiredTech": "Drama and Poetry"
},
{

View File

@ -624,7 +624,8 @@ class CityInfo {
fun matchesFilter(filter: String, viewingCiv: CivilizationInfo = civInfo): Boolean {
return when (filter) {
"in this city" -> true
"in all cities" -> true
"in all cities" -> true // Filtered by the way uniques our found
"in other cities" -> true // Filtered by the way uniques our found
"in all coastal cities" -> isCoastal()
"in capital" -> isCapital()
"in all non-occupied cities" -> !cityStats.hasExtraAnnexUnhappiness() || isPuppet
@ -671,12 +672,16 @@ class CityInfo {
// The localUniques might not be filtered when passed as a parameter, so we filter it anyway
// The time loss shouldn't be that large I don't think
return civInfo.getMatchingUniques(placeholderText, this) +
localUniques.filter { it.placeholderText == placeholderText }
localUniques.filter {
it.placeholderText == placeholderText
&& it.params.none { param -> param == "in other cities" }
}
}
// Matching uniques provided by sources in the city itself
fun getLocalMatchingUniques(placeholderText: String): Sequence<Unique> {
return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText) +
return cityConstructions.builtBuildingUniqueMap.getUniques(placeholderText)
.filter { it.params.none { param -> param == "in other cities" } } +
religion.getMatchingUniques(placeholderText)
}

View File

@ -420,7 +420,7 @@ class CityStats(val cityInfo: CityInfo) {
newHappinessList["National ability"] = getStatsFromUniques(cityInfo.civInfo.nation.uniqueObjects.asSequence()).happiness
newHappinessList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques()).happiness
newHappinessList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques(cityInfo)).happiness
newHappinessList["Religion"] = getStatsFromUniques(cityInfo.religion.getUniques()).happiness
@ -445,7 +445,7 @@ class CityStats(val cityInfo: CityInfo) {
newBaseStatList["Buildings"] = cityInfo.cityConstructions.getStats()
newBaseStatList["Policies"] = getStatsFromUniques(civInfo.policies.policyUniques.getAllUniques())
newBaseStatList["National ability"] = getStatsFromNationUnique()
newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques())
newBaseStatList["Wonders"] = getStatsFromUniques(civInfo.getCivWideBuildingUniques(cityInfo))
newBaseStatList["City-States"] = getStatsFromCityStates()
newBaseStatList["Religion"] = getStatsFromUniques(cityInfo.religion.getUniques())
@ -459,7 +459,7 @@ class CityStats(val cityInfo: CityInfo) {
newStatPercentBonusList["Policies"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.policies.policyUniques.getAllUniques())
newStatPercentBonusList["Buildings"] = getStatPercentBonusesFromUniques(currentConstruction, localBuildingUniques)
.plus(cityInfo.cityConstructions.getStatPercentBonuses()) // This function is to be deprecated but it'll take a while.
newStatPercentBonusList["Wonders"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.getCivWideBuildingUniques())
newStatPercentBonusList["Wonders"] = getStatPercentBonusesFromUniques(currentConstruction, cityInfo.civInfo.getCivWideBuildingUniques(cityInfo))
newStatPercentBonusList["Railroads"] = getStatPercentBonusesFromRailroad() // Name chosen same as tech, for translation, but theoretically independent
newStatPercentBonusList["Resources"] = getStatPercentBonusesFromResources(currentConstruction)
newStatPercentBonusList["National ability"] = getStatPercentBonusesFromNationUnique(currentConstruction)

View File

@ -276,9 +276,13 @@ class CivilizationInfo {
fun hasResource(resourceName: String): Boolean = getCivResourcesByName()[resourceName]!! > 0
fun getCivWideBuildingUniques(): Sequence<Unique> = cities.asSequence().flatMap {
city -> city.getAllUniquesWithNonLocalEffects()
}
fun getCivWideBuildingUniques(cityItIsFor: CityInfo?): Sequence<Unique> =
cities.asSequence().flatMap {
city ->
if (cityItIsFor != null && city == cityItIsFor)
city.getAllUniquesWithNonLocalEffects().filter { it.params.none { param -> param == "in other cities" } }
else city.getAllUniquesWithNonLocalEffects()
}
fun hasUnique(unique: String) = getMatchingUniques(unique).any()