From bd7824cdb994f0d67d71906536afa223d44599bb Mon Sep 17 00:00:00 2001 From: yairm210 Date: Sun, 19 Sep 2021 21:33:26 +0300 Subject: [PATCH] More UniqueType-ing, discovering an overlap this time --- core/src/com/unciv/logic/city/CityConstructions.kt | 6 ++---- core/src/com/unciv/logic/city/CityInfo.kt | 4 ++-- core/src/com/unciv/models/ruleset/unique/UniqueType.kt | 5 +++++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/src/com/unciv/logic/city/CityConstructions.kt b/core/src/com/unciv/logic/city/CityConstructions.kt index a1beef55be..2e61348d30 100644 --- a/core/src/com/unciv/logic/city/CityConstructions.kt +++ b/core/src/com/unciv/logic/city/CityConstructions.kt @@ -7,6 +7,7 @@ import com.unciv.logic.civilization.PopupAlert import com.unciv.models.ruleset.Building import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.unique.UniqueMap +import com.unciv.models.ruleset.unique.UniqueType import com.unciv.models.ruleset.unit.BaseUnit import com.unciv.models.stats.Stat import com.unciv.models.stats.Stats @@ -75,9 +76,6 @@ class CityConstructions { fun getConstructableUnits() = cityInfo.getRuleset().units.values .asSequence().filter { it.isBuildable(this) } - fun getBasicCultureBuildings() = cityInfo.getRuleset().buildings.values - .asSequence().filter { it.culture > 0f && !it.isAnyWonder() && it.replaces == null } - fun getBasicStatBuildings(stat: Stat) = cityInfo.getRuleset().buildings.values .asSequence() .filter { !it.isAnyWonder() && it.replaces == null && it.getStats(null)[stat] > 0f } @@ -164,7 +162,7 @@ class CityConstructions { fun addFreeBuildings() { // "Provides a free [buildingName] [cityFilter]" - for (unique in cityInfo.getMatchingUniques("Provides a free [] []")) { + for (unique in cityInfo.getMatchingUniques(UniqueType.ProvidesFreeBuildings)) { val freeBuildingName = cityInfo.civInfo.getEquivalentBuilding(unique.params[0]).name val citiesThatApply = when (unique.params[1]) { "in this city" -> listOf(cityInfo) diff --git a/core/src/com/unciv/logic/city/CityInfo.kt b/core/src/com/unciv/logic/city/CityInfo.kt index ccff711db6..a10d38762e 100644 --- a/core/src/com/unciv/logic/city/CityInfo.kt +++ b/core/src/com/unciv/logic/city/CityInfo.kt @@ -288,7 +288,7 @@ class CityInfo { if (tileInfo.improvement == null) continue val tileImprovement = tileInfo.getTileImprovement() for (unique in tileImprovement!!.uniqueObjects) { - if (unique.placeholderText == "Provides [] []") { + if (unique.matches(UniqueType.ProvidesResources, getRuleset())) { val resource = getRuleset().tileResources[unique.params[1]] ?: continue cityResources.add( resource, @@ -314,7 +314,7 @@ class CityInfo { } } - for (unique in getLocalMatchingUniques("Provides [] []")) { // E.G "Provides [1] [Iron]" + for (unique in getLocalMatchingUniques(UniqueType.ProvidesResources)) { // E.G "Provides [1] [Iron]" val resource = getRuleset().tileResources[unique.params[1]] if (resource != null) { cityResources.add( diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt index 8d90ea34b0..6ed97f9bd5 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueType.kt @@ -18,6 +18,7 @@ enum class UniqueType(val text:String, val replacedBy: UniqueType? = null) { StatsPerCity("[stats] [cityFilter]"), ConsumesResources("Consumes [amount] [resource]"), // No conditional support as of yet + ProvidesResources("Provides [amount] [resource]"), FreeUnits("[amount] units cost no maintenance"), UnitMaintenanceDiscount("[amount]% maintenance costs for [mapUnitFilter] units"), @@ -27,7 +28,11 @@ enum class UniqueType(val text:String, val replacedBy: UniqueType? = null) { DecreasedUnitMaintenanceCostsGlobally("-[amount]% unit upkeep costs", UnitMaintenanceDiscount), // No conditional support @Deprecated("As of 3.16.16", ReplaceWith("Stats <>")) StatBonusForNumberOfSpecialists("[stats] if this city has at least [amount] specialists"), // No conditional support + + // TODO: Unify these (I'm in favor of "gain a free" above "provides" because it fits more cases) + ProvidesFreeBuildings("Provides a free [buildingName] [cityFilter]"), GainFreeBuildings("Gain a free [buildingName] [cityFilter]"), + CityStateStatsPerTurn("Provides [stats] per turn"), // Should not be Happiness! CityStateStatsPerCity("Provides [stats] [cityFilter]"),