mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-21 21:30:20 +07:00
Modding: Added "non-[filter]" and multi-value filtering to Nation and Civ filters
This commit is contained in:
@ -5,6 +5,7 @@ import com.unciv.Constants
|
|||||||
import com.unciv.json.HashMapVector2
|
import com.unciv.json.HashMapVector2
|
||||||
import com.unciv.logic.GameInfo
|
import com.unciv.logic.GameInfo
|
||||||
import com.unciv.logic.IsPartOfGameInfoSerialization
|
import com.unciv.logic.IsPartOfGameInfoSerialization
|
||||||
|
import com.unciv.logic.MultiFilter
|
||||||
import com.unciv.logic.UncivShowableException
|
import com.unciv.logic.UncivShowableException
|
||||||
import com.unciv.logic.automation.ai.TacticalAI
|
import com.unciv.logic.automation.ai.TacticalAI
|
||||||
import com.unciv.logic.automation.unit.WorkerAutomation
|
import com.unciv.logic.automation.unit.WorkerAutomation
|
||||||
@ -491,6 +492,10 @@ class Civilization : IsPartOfGameInfoSerialization {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun matchesFilter(filter: String): Boolean {
|
fun matchesFilter(filter: String): Boolean {
|
||||||
|
return MultiFilter.multiFilter(filter, ::matchesSingleFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun matchesSingleFilter(filter: String): Boolean {
|
||||||
return when (filter) {
|
return when (filter) {
|
||||||
"Human player" -> isHuman()
|
"Human player" -> isHuman()
|
||||||
"AI player" -> isAI()
|
"AI player" -> isAI()
|
||||||
|
@ -2,6 +2,7 @@ package com.unciv.models.ruleset.nation
|
|||||||
|
|
||||||
import com.badlogic.gdx.graphics.Color
|
import com.badlogic.gdx.graphics.Color
|
||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
|
import com.unciv.logic.MultiFilter
|
||||||
import com.unciv.models.ruleset.Ruleset
|
import com.unciv.models.ruleset.Ruleset
|
||||||
import com.unciv.models.ruleset.RulesetObject
|
import com.unciv.models.ruleset.RulesetObject
|
||||||
import com.unciv.models.ruleset.unique.UniqueTarget
|
import com.unciv.models.ruleset.unique.UniqueTarget
|
||||||
@ -253,6 +254,10 @@ class Nation : RulesetObject() {
|
|||||||
fun getContrastRatio() = getContrastRatio(getInnerColor(), getOuterColor())
|
fun getContrastRatio() = getContrastRatio(getInnerColor(), getOuterColor())
|
||||||
|
|
||||||
fun matchesFilter(filter: String): Boolean {
|
fun matchesFilter(filter: String): Boolean {
|
||||||
|
return MultiFilter.multiFilter(filter, ::matchesSingleFilter)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun matchesSingleFilter(filter: String): Boolean {
|
||||||
return when (filter) {
|
return when (filter) {
|
||||||
"All" -> true
|
"All" -> true
|
||||||
name -> true
|
name -> true
|
||||||
|
@ -206,8 +206,15 @@ enum class UniqueParameterType(
|
|||||||
private val knownValues = setOf("AI player", "Human player")
|
private val knownValues = setOf("AI player", "Human player")
|
||||||
|
|
||||||
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueParameterErrorSeverity? {
|
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueParameterErrorSeverity? {
|
||||||
if (parameterText in knownValues) return null
|
val isKnown = MultiFilter.multiFilter(parameterText, {isKnownValue(it, ruleset)}, true)
|
||||||
return NationFilter.getErrorSeverity(parameterText, ruleset)
|
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,
|
parameterText: String,
|
||||||
ruleset: Ruleset
|
ruleset: Ruleset
|
||||||
): UniqueType.UniqueParameterErrorSeverity? {
|
): UniqueType.UniqueParameterErrorSeverity? {
|
||||||
if (parameterText in knownValues) return null
|
val isKnown = MultiFilter.multiFilter(parameterText, {isKnownValue(it, ruleset)}, true)
|
||||||
if (ruleset.nations.containsKey(parameterText)) return null
|
if (isKnown) return null
|
||||||
if (ruleset.nations.values.any { it.hasUnique(parameterText) }) return null
|
|
||||||
return UniqueType.UniqueParameterErrorSeverity.PossibleFilteringUnique
|
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] */
|
/** Implemented by [City.matchesFilter][com.unciv.logic.city.City.matchesFilter] */
|
||||||
|
Reference in New Issue
Block a user