UnitFilter accepts NationFilter of the civ (e.g. "vs [England] units")

chore: Constants for "Embarked" and "Wounded"
This commit is contained in:
Yair Morgenstern 2023-04-19 10:50:56 +03:00
parent 2b1f2513fc
commit 26a155351e
6 changed files with 13 additions and 8 deletions

View File

@ -74,6 +74,10 @@ object Constants {
const val barbarians = "Barbarians"
const val spectator = "Spectator"
const val embarked = "Embarked"
const val wounded = "Wounded"
const val rising = "Rising"
const val lowering = "Lowering"
const val remove = "Remove "

View File

@ -1,5 +1,6 @@
package com.unciv.logic.civilization.managers
import com.unciv.Constants
import com.unciv.logic.IsPartOfGameInfoSerialization
import com.unciv.logic.city.City
import com.unciv.logic.civilization.AlertType
@ -486,8 +487,8 @@ class TechManager : IsPartOfGameInfoSerialization {
val enterOceanUniques = civInfo.getMatchingUniques(UniqueType.UnitsMayEnterOcean)
allUnitsCanEnterOcean = enterOceanUniques.any { it.params[0] == "All" }
embarkedUnitsCanEnterOcean = allUnitsCanEnterOcean ||
enterOceanUniques.any { it.params[0] == "Embarked" }
specificUnitsCanEnterOcean = enterOceanUniques.any { it.params[0] != "All" && it.params[0] != "Embarked" }
enterOceanUniques.any { it.params[0] == Constants.embarked }
specificUnitsCanEnterOcean = enterOceanUniques.any { it.params[0] != "All" && it.params[0] != Constants.embarked }
movementSpeedOnRoads = if (civInfo.hasUnique(UniqueType.RoadMovementSpeed))
RoadStatus.Road.movementImproved else RoadStatus.Road.movement

View File

@ -305,9 +305,8 @@ class Nation : RulesetObject() {
"All" -> true
name -> true
"Major" -> isMajorCiv
// To be deprecated, replaced by "City-States"
"CityState" -> isCityState
Constants.cityStates -> isCityState
// "CityState" to be deprecated, replaced by "City-States"
"CityState", Constants.cityStates -> isCityState
else -> uniques.contains(filter)
}
}

View File

@ -217,7 +217,7 @@ class Unique(val text: String, val sourceObjectType: UniqueTarget? = null, val s
UniqueType.ConditionalVsCity -> state.theirCombatant?.matchesCategory("City") == true
UniqueType.ConditionalVsUnits -> state.theirCombatant?.matchesCategory(condition.params[0]) == true
UniqueType.ConditionalOurUnit ->
UniqueType.ConditionalOurUnit, UniqueType.ConditionalOurUnitOnUnit ->
relevantUnit?.matchesFilter(condition.params[0]) == true
UniqueType.ConditionalUnitWithPromotion -> relevantUnit?.promotions?.promotions?.contains(condition.params[0]) == true
UniqueType.ConditionalUnitWithoutPromotion -> relevantUnit?.promotions?.promotions?.contains(condition.params[0]) == false

View File

@ -71,8 +71,8 @@ enum class UniqueParameterType(
},
/** Implemented by [MapUnit.matchesFilter][com.unciv.logic.map.MapUnit.matchesFilter] */
MapUnitFilter("mapUnitFilter", "Wounded", null, "Map Unit Filters") {
private val knownValues = setOf("Wounded", Constants.barbarians, "City-State", "Embarked", "Non-City")
MapUnitFilter("mapUnitFilter", Constants.wounded, null, "Map Unit Filters") {
private val knownValues = setOf(Constants.wounded, Constants.barbarians, "City-State", Constants.embarked, "Non-City")
override fun getErrorSeverity(parameterText: String, ruleset: Ruleset):
UniqueType.UniqueComplianceErrorSeverity? {
if (parameterText.startsWith('{')) // "{filter} {filter}" for and logic

View File

@ -680,6 +680,7 @@ enum class UniqueType(val text: String, vararg targets: UniqueTarget, val flags:
/////// unit conditionals
ConditionalOurUnit("for [mapUnitFilter] units", UniqueTarget.Conditional),
ConditionalOurUnitOnUnit("when [mapUnitFilter]", UniqueTarget.Conditional), // Same but for the unit itself
ConditionalUnitWithPromotion("for units with [promotion]", UniqueTarget.Conditional),
ConditionalUnitWithoutPromotion("for units without [promotion]", UniqueTarget.Conditional),
ConditionalVsCity("vs cities", UniqueTarget.Conditional),