diff --git a/TypeGraph.project.gmx b/TypeGraph.project.gmx index cfdee39..a16601f 100644 --- a/TypeGraph.project.gmx +++ b/TypeGraph.project.gmx @@ -159,6 +159,7 @@ + @@ -220,6 +221,7 @@ objects\Debug objects\TypeParser + objects\LevelLoader rooms\roomInit @@ -235,4 +237,4 @@ 0 - \ No newline at end of file + diff --git a/objects/Debug.object.gmx b/objects/Debug.object.gmx index ee06b12..df36c6b 100644 --- a/objects/Debug.object.gmx +++ b/objects/Debug.object.gmx @@ -133,6 +133,30 @@ ds_map_destroy(objectNames); + + + 1 + 603 + 7 + 0 + 0 + -1 + 2 + + + self + 0 + 0 + + + 1 + if room == roomInit +room_goto(room0) + + + + + 1 diff --git a/objects/LevelLoader.object.gmx b/objects/LevelLoader.object.gmx new file mode 100644 index 0000000..eeed8ac --- /dev/null +++ b/objects/LevelLoader.object.gmx @@ -0,0 +1,23 @@ + + + <undefined> + 0 + -1 + 0 + 0 + <undefined> + <undefined> + + 0 + 0 + 0 + 0.5 + 0.100000001490116 + 0 + 0.100000001490116 + 0.100000001490116 + 0.200000002980232 + -1 + 0 + + diff --git a/scripts/loadLevel.gml b/scripts/loadLevel.gml new file mode 100644 index 0000000..a57a474 --- /dev/null +++ b/scripts/loadLevel.gml @@ -0,0 +1,51 @@ +///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); +