Modding: Added "non-[filter]" and multi-value filtering to Nation and Civ filters

This commit is contained in:
Yair Morgenstern
2023-11-18 22:20:47 +02:00
parent dc6413d707
commit 68fd3d74b3
3 changed files with 28 additions and 5 deletions

View File

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

View File

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

View File

@ -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] */