52 lines
1.2 KiB
Plaintext
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);
|
|
|