OLD | NEW |
1 -- Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 -- Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 -- Use of this source code is governed by a BSD-style license that can be | 2 -- Use of this source code is governed by a BSD-style license that can be |
3 -- found in the LICENSE file. | 3 -- found in the LICENSE file. |
4 | 4 |
5 -- Functions for validating game data files (.def files). | 5 -- Functions for validating game data files (.def files). |
6 -- This module provides a single global called 'validate' which | 6 -- This module provides a single global called 'validate' which |
7 -- contains two function: | 7 -- contains two function: |
8 -- ValidateGameDef | 8 -- ValidateGameDef |
9 -- ValidateLevelDef | 9 -- ValidateLevelDef |
10 -- | 10 -- |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 Error(filename, message) | 86 Error(filename, message) |
87 end | 87 end |
88 | 88 |
89 if type(leveldef) ~= 'table' then | 89 if type(leveldef) ~= 'table' then |
90 return Err("file does not evaluate to an object of type 'table'") | 90 return Err("file does not evaluate to an object of type 'table'") |
91 end | 91 end |
92 | 92 |
93 CheckValidKeys(filename, leveldef, { 'num_stars', 'shapes', 'sprites', 'scri
pt' }) | 93 CheckValidKeys(filename, leveldef, { 'num_stars', 'shapes', 'sprites', 'scri
pt' }) |
94 | 94 |
95 if leveldef.shapes then | 95 if leveldef.shapes then |
96 local valid_keys = { 'start', 'finish', 'color', 'type', 'anchor', 'tag'
, 'dynamic' } | 96 local valid_keys = { 'pos', 'children', 'start', 'finish', 'color', 'typ
e', 'anchor', 'tag', 'dynamic' } |
97 local valid_types = { 'line', 'edge' } | 97 local valid_types = { 'compound', 'line', 'edge' } |
98 local required_keys = { 'type' } | 98 local required_keys = { 'type' } |
99 for _, shape in pairs(leveldef.shapes) do | 99 |
100 CheckValidKeys(filename, shape, valid_keys) | 100 local function ValidateShapeList(shapes) |
101 CheckRequiredKeys(filename, shape, required_keys, 'shape') | 101 for _, shape in pairs(shapes) do |
102 if not ListContains(valid_types, shape.type) then | 102 if #shape > 0 then |
103 Err('invalid shape type: ' .. shape.type) | 103 ValidateShapeList(shape) |
| 104 else |
| 105 CheckValidKeys(filename, shape, valid_keys) |
| 106 CheckRequiredKeys(filename, shape, required_keys, 'shape') |
| 107 if not ListContains(valid_types, shape.type) then |
| 108 Err('invalid shape type: ' .. shape.type) |
| 109 end |
| 110 end |
104 end | 111 end |
105 end | 112 end |
| 113 |
| 114 ValidateShapeList(leveldef.shapes) |
106 end | 115 end |
107 | 116 |
108 if leveldef.sprites then | 117 if leveldef.sprites then |
109 local valid_keys = { 'pos', 'tag', 'image', 'script', 'sensor' } | 118 local valid_keys = { 'pos', 'tag', 'image', 'script', 'sensor' } |
110 local required_keys = { 'pos', 'image' } | 119 local required_keys = { 'pos', 'image' } |
111 for _, sprite in pairs(leveldef.sprites) do | 120 for _, sprite in pairs(leveldef.sprites) do |
112 CheckValidKeys(filename, sprite, valid_keys) | 121 CheckValidKeys(filename, sprite, valid_keys) |
113 CheckRequiredKeys(filename, sprite, required_keys, 'sprite') | 122 CheckRequiredKeys(filename, sprite, required_keys, 'sprite') |
114 if gamedef.assets[sprite.image] == nil then | 123 if gamedef.assets[sprite.image] == nil then |
115 Err('invalid image asset: ' .. sprite.image) | 124 Err('invalid image asset: ' .. sprite.image) |
(...skipping 14 matching lines...) Expand all Loading... |
130 for _, level in ipairs(gamedef.levels) do | 139 for _, level in ipairs(gamedef.levels) do |
131 filename = path.join(gamedef.root, level) | 140 filename = path.join(gamedef.root, level) |
132 level = util.LoadYaml(filename) | 141 level = util.LoadYaml(filename) |
133 validate.ValidateLevelDef(filename, gamedef, level) | 142 validate.ValidateLevelDef(filename, gamedef, level) |
134 end | 143 end |
135 | 144 |
136 print("Validation successful!") | 145 print("Validation successful!") |
137 end | 146 end |
138 | 147 |
139 return validate | 148 return validate |
OLD | NEW |