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 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( private fun addConditionalErrors(
conditional: Unique, conditional: Unique,
rulesetErrors: RulesetErrorList, rulesetErrors: RulesetErrorList,
@ -162,6 +168,14 @@ class UniqueValidator(val ruleset: Ruleset) {
RulesetErrorSeverity.Warning, uniqueContainer, unique 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 = val conditionalComplianceErrors =
getComplianceErrors(conditional) getComplianceErrors(conditional)