summary refs log tree commit diff stats
path: root/client/Archipelago/gamedata.gd
diff options
context:
space:
mode:
Diffstat (limited to 'client/Archipelago/gamedata.gd')
-rw-r--r--client/Archipelago/gamedata.gd78
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 @@
1extends Node
2
3var SCRIPT_proto
4
5var objects
6var door_id_by_map_node_path = {}
7var painting_id_by_map_node_path = {}
8var door_id_by_ap_id = {}
9var map_id_by_name = {}
10
11
12func _init(proto_script):
13 SCRIPT_proto = proto_script
14
15
16func 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
54func 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
62func 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
70func get_door_receivers(door_id):
71 var door = objects.get_doors()[door_id]
72 return door.get_receivers()
73
74
75func 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()