More UniqueType-ing, discovering an overlap this time

This commit is contained in:
yairm210 2021-09-19 21:33:26 +03:00
parent 5fc7d1ce46
commit bd7824cdb9
3 changed files with 9 additions and 6 deletions

View File

@ -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)

View File

@ -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(

View File

@ -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]"),