partial loader script

This commit is contained in:
User 2019-07-30 19:26:29 +02:00
parent 8b49d564ab
commit 8235d4f532
4 changed files with 101 additions and 1 deletions

View File

@ -159,6 +159,7 @@
<script>scripts\blocks\getConnectionsForCluster.gml</script>
<script>scripts\blocks\layoutCluster.gml</script>
</scripts>
<script>scripts\loadLevel.gml</script>
</scripts>
<objects name="objects">
<objects name="generic">
@ -220,6 +221,7 @@
</objects>
<object>objects\Debug</object>
<object>objects\TypeParser</object>
<object>objects\LevelLoader</object>
</objects>
<rooms name="rooms">
<room>rooms\roomInit</room>
@ -235,4 +237,4 @@
<TutorialName />
<TutorialPage>0</TutorialPage>
</TutorialState>
</assets>
</assets>

View File

@ -133,6 +133,30 @@ ds_map_destroy(objectNames);
</arguments>
</action>
</event>
<event eventtype="7" enumb="4">
<action>
<libid>1</libid>
<id>603</id>
<kind>7</kind>
<userelative>0</userelative>
<isquestion>0</isquestion>
<useapplyto>-1</useapplyto>
<exetype>2</exetype>
<functionname></functionname>
<codestring></codestring>
<whoName>self</whoName>
<relative>0</relative>
<isnot>0</isnot>
<arguments>
<argument>
<kind>1</kind>
<string>if room == roomInit
room_goto(room0)
</string>
</argument>
</arguments>
</action>
</event>
<event eventtype="8" enumb="64">
<action>
<libid>1</libid>

View File

@ -0,0 +1,23 @@
<!--This Document is generated by GameMaker, if you edit it by hand then you do so at your own risk!-->
<object>
<spriteName>&lt;undefined&gt;</spriteName>
<solid>0</solid>
<visible>-1</visible>
<depth>0</depth>
<persistent>0</persistent>
<parentName>&lt;undefined&gt;</parentName>
<maskName>&lt;undefined&gt;</maskName>
<events/>
<PhysicsObject>0</PhysicsObject>
<PhysicsObjectSensor>0</PhysicsObjectSensor>
<PhysicsObjectShape>0</PhysicsObjectShape>
<PhysicsObjectDensity>0.5</PhysicsObjectDensity>
<PhysicsObjectRestitution>0.100000001490116</PhysicsObjectRestitution>
<PhysicsObjectGroup>0</PhysicsObjectGroup>
<PhysicsObjectLinearDamping>0.100000001490116</PhysicsObjectLinearDamping>
<PhysicsObjectAngularDamping>0.100000001490116</PhysicsObjectAngularDamping>
<PhysicsObjectFriction>0.200000002980232</PhysicsObjectFriction>
<PhysicsObjectAwake>-1</PhysicsObjectAwake>
<PhysicsObjectKinematic>0</PhysicsObjectKinematic>
<PhysicsShapePoints/>
</object>

51
scripts/loadLevel.gml Normal file
View File

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