Modding: Added "non-[filter]" and multi-value filtering to Building filter

This commit is contained in:
Yair Morgenstern 2023-11-18 22:23:22 +02:00
parent 68fd3d74b3
commit 2a862aa895
2 changed files with 16 additions and 4 deletions

View File

@ -1,5 +1,6 @@
package com.unciv.models.ruleset
import com.unciv.logic.MultiFilter
import com.unciv.logic.city.City
import com.unciv.logic.city.CityConstructions
import com.unciv.logic.civilization.Civilization
@ -435,6 +436,10 @@ class Building : RulesetStatsObject(), INonPerpetualConstruction {
/** Implements [UniqueParameterType.BuildingFilter] */
fun matchesFilter(filter: String): Boolean {
return MultiFilter.multiFilter(filter, ::matchesSingleFilter)
}
fun matchesSingleFilter(filter: String): Boolean {
return when (filter) {
"All" -> true
name -> true

View File

@ -283,18 +283,25 @@ enum class UniqueParameterType(
/** Implemented by [Building.matchesFilter][com.unciv.models.ruleset.Building.matchesFilter] */
BuildingFilter("buildingFilter", "Culture") {
private val knownValues = mutableSetOf("All","Building","Buildings","Wonder","Wonders","National Wonder","World Wonder")
private val knownValues = mutableSetOf("All", "Building", "Buildings", "Wonder", "Wonders", "National Wonder", "World Wonder")
.apply { addAll(Stat.names()) }
override fun getErrorSeverity(
parameterText: String,
ruleset: Ruleset
): UniqueType.UniqueParameterErrorSeverity? {
if (parameterText in knownValues) return null
if (BuildingName.getErrorSeverity(parameterText, ruleset) == null) return null
if (ruleset.buildings.values.any { it.hasUnique(parameterText) }) return null
val isKnown = MultiFilter.multiFilter(parameterText, {isKnownValue(it, ruleset)}, true)
if (isKnown) return null
return UniqueType.UniqueParameterErrorSeverity.PossibleFilteringUnique
}
override fun isKnownValue(parameterText: String, ruleset: Ruleset): Boolean {
if (parameterText in knownValues) return true
if (BuildingName.getErrorSeverity(parameterText, ruleset) == null) return true
if (ruleset.buildings.values.any { it.hasUnique(parameterText) }) return true
return false
}
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
parameterText != "All" && getErrorSeverity(parameterText, ruleset) == null
},