Specify acceptable uses of this unique

Later we'll be able to check this in checkRuleset to warn against incorrect usages
This commit is contained in:
yairm210
2021-09-20 16:26:36 +03:00
parent ce5a82c763
commit eedfbe0235

View File

@ -5,45 +5,52 @@ import com.unciv.models.translations.getPlaceholderParameters
import com.unciv.models.translations.getPlaceholderText import com.unciv.models.translations.getPlaceholderText
enum class UniqueTarget{ enum class UniqueTarget{
/** Buildings, units, nations, policies, religions, techs etc. */ /** Buildings, units, nations, policies, religions, techs etc.
* Basically anything caught by CivInfo.getMatchingUniques. */
Global, Global,
Building, Building,
Unit, Unit,
Improvement, Improvement,
CityState
} }
enum class UniqueType(val text:String, val replacedBy: UniqueType? = null) { enum class UniqueType(val text:String, vararg target: UniqueTarget) {
Stats("[stats]"), Stats("[stats]", UniqueTarget.Global),
StatsPerCity("[stats] [cityFilter]"), StatsPerCity("[stats] [cityFilter]", UniqueTarget.Global),
ConsumesResources("Consumes [amount] [resource]"), // No conditional support as of yet ConsumesResources("Consumes [amount] [resource]",
ProvidesResources("Provides [amount] [resource]"), UniqueTarget.Improvement, UniqueTarget.Building, UniqueTarget.Unit), // No conditional support as of yet
ProvidesResources("Provides [amount] [resource]",
UniqueTarget.Improvement, UniqueTarget.Building, UniqueTarget.Unit),
FreeUnits("[amount] units cost no maintenance"), FreeUnits("[amount] units cost no maintenance", UniqueTarget.Global),
UnitMaintenanceDiscount("[amount]% maintenance costs for [mapUnitFilter] units"), UnitMaintenanceDiscount("[amount]% maintenance costs for [mapUnitFilter] units", UniqueTarget.Global),
@Deprecated("As of 3.16.16", ReplaceWith("UnitMaintenanceDiscount"))
DecreasedUnitMaintenanceCostsByFilter("-[amount]% [mapUnitFilter] unit maintenance costs", UnitMaintenanceDiscount), // No conditional support @Deprecated("As of 3.16.16", ReplaceWith("[amount]% maintenance costs for [mapUnitFilter] units"))
@Deprecated("As of 3.16.16", ReplaceWith("UnitMaintenanceDiscount")) DecreasedUnitMaintenanceCostsByFilter("-[amount]% [mapUnitFilter] unit maintenance costs"), // No conditional support
DecreasedUnitMaintenanceCostsGlobally("-[amount]% unit upkeep costs", UnitMaintenanceDiscount), // No conditional support @Deprecated("As of 3.16.16", ReplaceWith("[amount]% maintenance costs for [mapUnitFilter] units"))
@Deprecated("As of 3.16.16", ReplaceWith("Stats <>")) DecreasedUnitMaintenanceCostsGlobally("-[amount]% unit upkeep costs"), // No conditional support
@Deprecated("As of 3.16.16", ReplaceWith("[stats] <if this city has at least [amount] specialists>"))
StatBonusForNumberOfSpecialists("[stats] if this city has at least [amount] specialists"), // No conditional support StatBonusForNumberOfSpecialists("[stats] if this city has at least [amount] specialists"), // No conditional support
// TODO: Unify these (I'm in favor of "gain a free" above "provides" because it fits more cases) // TODO: Unify these (I'm in favor of "gain a free" above "provides" because it fits more cases)
ProvidesFreeBuildings("Provides a free [buildingName] [cityFilter]"), ProvidesFreeBuildings("Provides a free [buildingName] [cityFilter]", UniqueTarget.Global),
GainFreeBuildings("Gain a free [buildingName] [cityFilter]"), GainFreeBuildings("Gain a free [buildingName] [cityFilter]", UniqueTarget.Global),
// I don't like the fact that currently "city state bonuses" are separate from the "global bonuses",
CityStateStatsPerTurn("Provides [stats] per turn"), // Should not be Happiness! // todo: merge city state bonuses into global bonuses
CityStateStatsPerCity("Provides [stats] [cityFilter] per turn"), CityStateStatsPerTurn("Provides [stats] per turn", UniqueTarget.CityState), // Should not be Happiness!
CityStateHappiness("Provides [amount] Happiness"), CityStateStatsPerCity("Provides [stats] [cityFilter] per turn", UniqueTarget.CityState),
CityStateMilitaryUnits("Provides military units every ≈[amount] turns"), // No conditional support as of yet CityStateHappiness("Provides [amount] Happiness", UniqueTarget.CityState),
CityStateUniqueLuxury("Provides a unique luxury"), // No conditional support as of yet CityStateMilitaryUnits("Provides military units every ≈[amount] turns", UniqueTarget.CityState), // No conditional support as of yet
CityStateUniqueLuxury("Provides a unique luxury", UniqueTarget.CityState), // No conditional support as of yet
; ;
/** For uniques that have "special" parameters that can accept multiple types, we can override them manually /** For uniques that have "special" parameters that can accept multiple types, we can override them manually
* For 95% of cases, auto-matching is fine. */ * For 95% of cases, auto-matching is fine. */
val parameterTypeMap = ArrayList<List<UniqueParameterType>>() val parameterTypeMap = ArrayList<List<UniqueParameterType>>()
val replacedBy: UniqueType? = null
init { init {
for (placeholder in text.getPlaceholderParameters()) { for (placeholder in text.getPlaceholderParameters()) {