Added ruleset check for resource uniques with resource conditionals

This commit is contained in:
yairm210 2024-05-31 18:40:50 +03:00
parent bed8d3b176
commit 834567170e

View File

@ -110,6 +110,12 @@ class UniqueValidator(val ruleset: Ruleset) {
return rulesetErrors
}
val resourceUniques = setOf(UniqueType.ProvidesResources, UniqueType.ConsumesResources,
UniqueType.DoubleResourceProduced, UniqueType.StrategicResourcesIncrease)
val resourceConditionals = setOf(UniqueType.ConditionalWithResource, UniqueType.ConditionalWithoutResource,
UniqueType.ConditionalWhenBetweenStatResource, UniqueType.ConditionalWhenAboveAmountStatResource, UniqueType.ConditionalWhenBelowAmountStatResource,
UniqueType.ConditionalWhenAboveAmountStatResourceSpeed, UniqueType.ConditionalWhenBelowAmountStatResourceSpeed, UniqueType.ConditionalWhenBetweenStatResourceSpeed)
private fun addConditionalErrors(
conditional: Unique,
rulesetErrors: RulesetErrorList,
@ -162,6 +168,14 @@ class UniqueValidator(val ruleset: Ruleset) {
RulesetErrorSeverity.Warning, uniqueContainer, unique
)
if (unique.type in resourceUniques && conditional.type in resourceConditionals
&& ruleset.tileResources[conditional.params.last()]?.let { it.hasUnique(UniqueType.CityResource) } == true)
rulesetErrors.add(
"$prefix contains the conditional \"${conditional.text}\"," +
" which references a citywide resource. This is not a valid conditional for a resource uniques, " +
"as it causes a recursive evaluation loop.",
RulesetErrorSeverity.Error, uniqueContainer, unique)
val conditionalComplianceErrors =
getComplianceErrors(conditional)