typegraph/scripts/loadLevel.gml

52 lines
1.2 KiB
Plaintext

///loadLevel(json, typeMap, root)
/**
* loadLevel :: JSON -> ()
*
* Fills a level room with a level description from a JSON string.
*
* @param json the json level description
*/
var json = argument0;
var typeMap = argument1;
var root = argument2;
assert(is_string(json), "No JSON string provided.");
assert(ds_exists(typeMap, ds_type_map), "Invalid type map provided.");
assertInstanceof(root, TypeConLink);
var map = json_decode(json);
assert(
ds_exists(map, ds_type_map) &&
ds_exists(map[?"blocks"], ds_type_list) &&
ds_exists(map[?"goal"], ds_type_list) &&
ds_exists(map[?"parameters"], ds_type_list) &&
ds_exists(map[?"start"], ds_type_list) &&
ds_exists(map[?"traits"], ds_type_list),
"Invalid level description."
);
var paramMap = ds_map_create();
var params = map[?"parameters"];
for (var i = 0; i < ds_list_size(params); i++) {
var param = params[|i];
var traits = param[?"traits"];
var inst;
if (param[?"free"])
inst = new(FreeType);
else
inst = new(ConcreteType);
inst.order = param[?"order"];
for (var j = 0; j < ds_list_size(traits); j++)
paramMap[?param[?"name"]] = inst;
}
ds_map_destroy(map);