///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);