From 8235d4f5324e665239d803cfe2847248062988d1 Mon Sep 17 00:00:00 2001
From: User <>
Date: Tue, 30 Jul 2019 19:26:29 +0200
Subject: [PATCH] partial loader script
---
TypeGraph.project.gmx | 4 ++-
objects/Debug.object.gmx | 24 ++++++++++++++++
objects/LevelLoader.object.gmx | 23 +++++++++++++++
scripts/loadLevel.gml | 51 ++++++++++++++++++++++++++++++++++
4 files changed, 101 insertions(+), 1 deletion(-)
create mode 100644 objects/LevelLoader.object.gmx
create mode 100644 scripts/loadLevel.gml
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 @@
+
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 @@
+
+
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);
+