diff --git a/core/src/com/unciv/logic/civilization/Civilization.kt b/core/src/com/unciv/logic/civilization/Civilization.kt index 2dff2717f3..2ac8b11ae9 100644 --- a/core/src/com/unciv/logic/civilization/Civilization.kt +++ b/core/src/com/unciv/logic/civilization/Civilization.kt @@ -5,6 +5,7 @@ import com.unciv.Constants import com.unciv.json.HashMapVector2 import com.unciv.logic.GameInfo import com.unciv.logic.IsPartOfGameInfoSerialization +import com.unciv.logic.MultiFilter import com.unciv.logic.UncivShowableException import com.unciv.logic.automation.ai.TacticalAI import com.unciv.logic.automation.unit.WorkerAutomation @@ -491,6 +492,10 @@ class Civilization : IsPartOfGameInfoSerialization { } fun matchesFilter(filter: String): Boolean { + return MultiFilter.multiFilter(filter, ::matchesSingleFilter) + } + + fun matchesSingleFilter(filter: String): Boolean { return when (filter) { "Human player" -> isHuman() "AI player" -> isAI() diff --git a/core/src/com/unciv/models/ruleset/nation/Nation.kt b/core/src/com/unciv/models/ruleset/nation/Nation.kt index 178de9f76b..d7b108e6c7 100644 --- a/core/src/com/unciv/models/ruleset/nation/Nation.kt +++ b/core/src/com/unciv/models/ruleset/nation/Nation.kt @@ -2,6 +2,7 @@ package com.unciv.models.ruleset.nation import com.badlogic.gdx.graphics.Color import com.unciv.Constants +import com.unciv.logic.MultiFilter import com.unciv.models.ruleset.Ruleset import com.unciv.models.ruleset.RulesetObject import com.unciv.models.ruleset.unique.UniqueTarget @@ -253,6 +254,10 @@ class Nation : RulesetObject() { fun getContrastRatio() = getContrastRatio(getInnerColor(), getOuterColor()) fun matchesFilter(filter: String): Boolean { + return MultiFilter.multiFilter(filter, ::matchesSingleFilter) + } + + fun matchesSingleFilter(filter: String): Boolean { return when (filter) { "All" -> true name -> true diff --git a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt index 6118444bc6..cc4e9116d7 100644 --- a/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt +++ b/core/src/com/unciv/models/ruleset/unique/UniqueParameterType.kt @@ -206,8 +206,15 @@ enum class UniqueParameterType( private val knownValues = setOf("AI player", "Human player") override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueParameterErrorSeverity? { - if (parameterText in knownValues) return null - return NationFilter.getErrorSeverity(parameterText, ruleset) + 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 (NationFilter.isKnownValue(parameterText, ruleset)) return true + return false } }, @@ -219,11 +226,17 @@ enum class UniqueParameterType( parameterText: String, ruleset: Ruleset ): UniqueType.UniqueParameterErrorSeverity? { - if (parameterText in knownValues) return null - if (ruleset.nations.containsKey(parameterText)) return null - if (ruleset.nations.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 (ruleset.nations.containsKey(parameterText)) return true + if (ruleset.nations.values.any { it.hasUnique(parameterText) }) return true + return false + } }, /** Implemented by [City.matchesFilter][com.unciv.logic.city.City.matchesFilter] */