mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-09 23:39:40 +07:00
Modding: Added "non-[filter]" and multi-value filtering to Terrain filter
This commit is contained in:
@ -4,6 +4,7 @@ import com.badlogic.gdx.math.Vector2
|
|||||||
import com.unciv.Constants
|
import com.unciv.Constants
|
||||||
import com.unciv.GUI
|
import com.unciv.GUI
|
||||||
import com.unciv.logic.IsPartOfGameInfoSerialization
|
import com.unciv.logic.IsPartOfGameInfoSerialization
|
||||||
|
import com.unciv.logic.MultiFilter
|
||||||
import com.unciv.logic.city.City
|
import com.unciv.logic.city.City
|
||||||
import com.unciv.logic.civilization.Civilization
|
import com.unciv.logic.civilization.Civilization
|
||||||
import com.unciv.logic.civilization.PlayerType
|
import com.unciv.logic.civilization.PlayerType
|
||||||
@ -477,8 +478,12 @@ open class Tile : IsPartOfGameInfoSerialization {
|
|||||||
return improvement == null && filter == "unimproved"
|
return improvement == null && filter == "unimproved"
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Implements [UniqueParameterType.TerrainFilter][com.unciv.models.ruleset.unique.UniqueParameterType.TerrainFilter] */
|
|
||||||
fun matchesTerrainFilter(filter: String, observingCiv: Civilization? = null): Boolean {
|
fun matchesTerrainFilter(filter: String, observingCiv: Civilization? = null): Boolean {
|
||||||
|
return MultiFilter.multiFilter(filter, {matchesSingleTerrainFilter(it, observingCiv)})
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Implements [UniqueParameterType.TerrainFilter][com.unciv.models.ruleset.unique.UniqueParameterType.TerrainFilter] */
|
||||||
|
fun matchesSingleTerrainFilter(filter: String, observingCiv: Civilization? = null): Boolean {
|
||||||
return when (filter) {
|
return when (filter) {
|
||||||
"All" -> true
|
"All" -> true
|
||||||
baseTerrain -> true
|
baseTerrain -> true
|
||||||
|
@ -321,22 +321,35 @@ enum class UniqueParameterType(
|
|||||||
|
|
||||||
/** Implemented by [Tile.matchesTerrainFilter][com.unciv.logic.map.tile.Tile.matchesTerrainFilter] */
|
/** Implemented by [Tile.matchesTerrainFilter][com.unciv.logic.map.tile.Tile.matchesTerrainFilter] */
|
||||||
TerrainFilter("terrainFilter", Constants.freshWaterFilter, null, "Terrain Filters") {
|
TerrainFilter("terrainFilter", Constants.freshWaterFilter, null, "Terrain Filters") {
|
||||||
private val knownValues = setOf("All",
|
private val knownValues = setOf(
|
||||||
|
"All",
|
||||||
Constants.coastal, Constants.river, "Open terrain", "Rough terrain", "Water resource",
|
Constants.coastal, Constants.river, "Open terrain", "Rough terrain", "Water resource",
|
||||||
"Foreign Land", "Foreign", "Friendly Land", "Friendly", "Enemy Land", "Enemy",
|
"Foreign Land", "Foreign", "Friendly Land", "Friendly", "Enemy Land", "Enemy",
|
||||||
"Featureless", Constants.freshWaterFilter, "non-fresh water", "Natural Wonder",
|
"Featureless", Constants.freshWaterFilter, "non-fresh water", "Natural Wonder",
|
||||||
"Impassable", "Land", "Water") +
|
"Impassable", "Land", "Water"
|
||||||
|
) +
|
||||||
ResourceType.values().map { it.name + " resource" }
|
ResourceType.values().map { it.name + " resource" }
|
||||||
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset) = when(parameterText) {
|
|
||||||
in knownValues -> null
|
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset): UniqueType.UniqueParameterErrorSeverity? {
|
||||||
in ruleset.terrains -> null
|
val isKnown = MultiFilter.multiFilter(parameterText, {isKnownValue(it, ruleset)}, true)
|
||||||
in ruleset.tileResources -> null
|
if (isKnown) return null
|
||||||
in ruleset.terrains.values.asSequence().flatMap { it.uniques } -> null
|
return UniqueType.UniqueParameterErrorSeverity.PossibleFilteringUnique
|
||||||
in ruleset.tileResources.values.asSequence().flatMap { it.uniques } -> null
|
|
||||||
else -> UniqueType.UniqueParameterErrorSeverity.PossibleFilteringUnique
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isKnownValue(parameterText: String, ruleset: Ruleset): Boolean {
|
||||||
|
return when (parameterText) {
|
||||||
|
in knownValues -> true
|
||||||
|
in ruleset.terrains -> true
|
||||||
|
in ruleset.tileResources -> true
|
||||||
|
in ruleset.terrains.values.asSequence().flatMap { it.uniques } -> true
|
||||||
|
in ruleset.tileResources.values.asSequence().flatMap { it.uniques } -> true
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
|
override fun isTranslationWriterGuess(parameterText: String, ruleset: Ruleset) =
|
||||||
parameterText in ruleset.terrains || parameterText != "All" && parameterText in knownValues
|
parameterText in ruleset.terrains || parameterText != "All" && parameterText in knownValues
|
||||||
|
|
||||||
override fun getTranslationWriterStringsForOutput() = knownValues
|
override fun getTranslationWriterStringsForOutput() = knownValues
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user