Tighten RulesetValidator for Terrain (#10355)

* Tighten RulesetValidator for Terrain

* Fix unintended indentation (say that fast repeatedly)
This commit is contained in:
SomeTroglodyte 2023-10-29 18:00:34 +01:00 committed by GitHub
parent 5dde55a34b
commit 74cfda9854
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -328,9 +328,23 @@ class RulesetValidator(val ruleset: Ruleset) {
if (ruleset.terrains.values.none { it.type == TerrainType.Land && !it.impassable })
lines += "No passable land terrains exist!"
for (terrain in ruleset.terrains.values) {
for (baseTerrain in terrain.occursOn)
if (!ruleset.terrains.containsKey(baseTerrain))
lines += "${terrain.name} occurs on terrain $baseTerrain which does not exist!"
for (baseTerrainName in terrain.occursOn) {
val baseTerrain = ruleset.terrains[baseTerrainName]
if (baseTerrain == null)
lines += "${terrain.name} occurs on terrain $baseTerrainName which does not exist!"
else if (baseTerrain.type == TerrainType.NaturalWonder)
lines.add("${terrain.name} occurs on natural wonder $baseTerrainName: Unsupported.", RulesetErrorSeverity.WarningOptionsOnly)
}
if (terrain.type == TerrainType.NaturalWonder) {
if (terrain.turnsInto == null)
lines += "Natural Wonder ${terrain.name} is missing the turnsInto attribute!"
val baseTerrain = ruleset.terrains[terrain.turnsInto]
if (baseTerrain == null)
lines += "${terrain.name} turns into terrain ${terrain.turnsInto} which does not exist!"
else if (!baseTerrain.type.isBaseTerrain)
// See https://github.com/hackedpassword/Z2/blob/main/HybridTileTech.md for a clever exploit
lines.add("${terrain.name} turns into terrain ${terrain.turnsInto} which is not a base terrain!", RulesetErrorSeverity.Warning)
}
uniqueValidator.checkUniques(terrain, lines, rulesetSpecific, tryFixUnknownUniques)
}
}