diff options
Diffstat (limited to 'client/Archipelago/gamedata.gd')
-rw-r--r-- | client/Archipelago/gamedata.gd | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/client/Archipelago/gamedata.gd b/client/Archipelago/gamedata.gd new file mode 100644 index 0000000..16368a9 --- /dev/null +++ b/client/Archipelago/gamedata.gd | |||
@@ -0,0 +1,78 @@ | |||
1 | extends Node | ||
2 | |||
3 | var SCRIPT_proto | ||
4 | |||
5 | var objects | ||
6 | var door_id_by_map_node_path = {} | ||
7 | var painting_id_by_map_node_path = {} | ||
8 | var door_id_by_ap_id = {} | ||
9 | var map_id_by_name = {} | ||
10 | |||
11 | |||
12 | func _init(proto_script): | ||
13 | SCRIPT_proto = proto_script | ||
14 | |||
15 | |||
16 | func load(data_bytes): | ||
17 | objects = SCRIPT_proto.AllObjects.new() | ||
18 | |||
19 | var result_code = objects.from_bytes(data_bytes) | ||
20 | if result_code != SCRIPT_proto.PB_ERR.NO_ERRORS: | ||
21 | print("Could not load generated data: %d" % result_code) | ||
22 | return | ||
23 | |||
24 | for map in objects.get_maps(): | ||
25 | map_id_by_name[map.get_name()] = map.get_id() | ||
26 | |||
27 | for door in objects.get_doors(): | ||
28 | var map = objects.get_maps()[door.get_map_id()] | ||
29 | |||
30 | if not map.get_name() in door_id_by_map_node_path: | ||
31 | door_id_by_map_node_path[map.get_name()] = {} | ||
32 | |||
33 | var map_data = door_id_by_map_node_path[map.get_name()] | ||
34 | for receiver in door.get_receivers(): | ||
35 | map_data[receiver] = door.get_id() | ||
36 | |||
37 | for painting_id in door.get_move_paintings(): | ||
38 | var painting = objects.get_paintings()[painting_id] | ||
39 | map_data[painting.get_path()] = door.get_id() | ||
40 | |||
41 | if door.has_ap_id(): | ||
42 | door_id_by_ap_id[door.get_ap_id()] = door.get_id() | ||
43 | |||
44 | for painting in objects.get_paintings(): | ||
45 | var room = objects.get_rooms()[painting.get_room_id()] | ||
46 | var map = objects.get_maps()[room.get_map_id()] | ||
47 | |||
48 | if not map.get_name() in painting_id_by_map_node_path: | ||
49 | painting_id_by_map_node_path[map.get_name()] = {} | ||
50 | |||
51 | var _map_data = painting_id_by_map_node_path[map.get_name()] | ||
52 | |||
53 | |||
54 | func get_door_for_map_node_path(map_name, node_path): | ||
55 | if not door_id_by_map_node_path.has(map_name): | ||
56 | return null | ||
57 | |||
58 | var map_data = door_id_by_map_node_path[map_name] | ||
59 | return map_data.get(node_path, null) | ||
60 | |||
61 | |||
62 | func get_door_ap_id(door_id): | ||
63 | var door = objects.get_doors()[door_id] | ||
64 | if door.has_ap_id(): | ||
65 | return door.get_ap_id() | ||
66 | else: | ||
67 | return null | ||
68 | |||
69 | |||
70 | func get_door_receivers(door_id): | ||
71 | var door = objects.get_doors()[door_id] | ||
72 | return door.get_receivers() | ||
73 | |||
74 | |||
75 | func get_door_map_name(door_id): | ||
76 | var door = objects.get_doors()[door_id] | ||
77 | var map = objects.get_maps()[door.get_map_id()] | ||
78 | return map.get_name() | ||