From 6fd6d493cd16b41bf88742ff6f4b7635ec3fa67c Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 28 Aug 2025 14:25:50 -0400 Subject: Client is starting to work! --- client/Archipelago/gamedata.gd | 78 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 client/Archipelago/gamedata.gd (limited to 'client/Archipelago/gamedata.gd') 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 @@ +extends Node + +var SCRIPT_proto + +var objects +var door_id_by_map_node_path = {} +var painting_id_by_map_node_path = {} +var door_id_by_ap_id = {} +var map_id_by_name = {} + + +func _init(proto_script): + SCRIPT_proto = proto_script + + +func load(data_bytes): + objects = SCRIPT_proto.AllObjects.new() + + var result_code = objects.from_bytes(data_bytes) + if result_code != SCRIPT_proto.PB_ERR.NO_ERRORS: + print("Could not load generated data: %d" % result_code) + return + + for map in objects.get_maps(): + map_id_by_name[map.get_name()] = map.get_id() + + for door in objects.get_doors(): + var map = objects.get_maps()[door.get_map_id()] + + if not map.get_name() in door_id_by_map_node_path: + door_id_by_map_node_path[map.get_name()] = {} + + var map_data = door_id_by_map_node_path[map.get_name()] + for receiver in door.get_receivers(): + map_data[receiver] = door.get_id() + + for painting_id in door.get_move_paintings(): + var painting = objects.get_paintings()[painting_id] + map_data[painting.get_path()] = door.get_id() + + if door.has_ap_id(): + door_id_by_ap_id[door.get_ap_id()] = door.get_id() + + for painting in objects.get_paintings(): + var room = objects.get_rooms()[painting.get_room_id()] + var map = objects.get_maps()[room.get_map_id()] + + if not map.get_name() in painting_id_by_map_node_path: + painting_id_by_map_node_path[map.get_name()] = {} + + var _map_data = painting_id_by_map_node_path[map.get_name()] + + +func get_door_for_map_node_path(map_name, node_path): + if not door_id_by_map_node_path.has(map_name): + return null + + var map_data = door_id_by_map_node_path[map_name] + return map_data.get(node_path, null) + + +func get_door_ap_id(door_id): + var door = objects.get_doors()[door_id] + if door.has_ap_id(): + return door.get_ap_id() + else: + return null + + +func get_door_receivers(door_id): + var door = objects.get_doors()[door_id] + return door.get_receivers() + + +func get_door_map_name(door_id): + var door = objects.get_doors()[door_id] + var map = objects.get_maps()[door.get_map_id()] + return map.get_name() -- cgit 1.4.1