extends Node var SCRIPT_proto var objects var door_id_by_map_node_path = {} var painting_id_by_map_node_path = {} var panel_id_by_map_node_path = {} var door_id_by_ap_id = {} var map_id_by_name = {} var progressive_id_by_ap_id = {} var letter_id_by_ap_id = {} var symbol_item_ids = [] var kSYMBOL_ITEMS func _init(proto_script): SCRIPT_proto = proto_script kSYMBOL_ITEMS = { SCRIPT_proto.PuzzleSymbol.SUN: "Sun Symbol", SCRIPT_proto.PuzzleSymbol.SPARKLES: "Sparkles Symbol", SCRIPT_proto.PuzzleSymbol.ZERO: "Zero Symbol", SCRIPT_proto.PuzzleSymbol.EXAMPLE: "Example Symbol", SCRIPT_proto.PuzzleSymbol.BOXES: "Boxes Symbol", SCRIPT_proto.PuzzleSymbol.PLANET: "Planet Symbol", SCRIPT_proto.PuzzleSymbol.PYRAMID: "Pyramid Symbol", SCRIPT_proto.PuzzleSymbol.CROSS: "Cross Symbol", SCRIPT_proto.PuzzleSymbol.SWEET: "Sweet Symbol", SCRIPT_proto.PuzzleSymbol.GENDER: "Gender Symbol", SCRIPT_proto.PuzzleSymbol.AGE: "Age Symbol", SCRIPT_proto.PuzzleSymbol.SOUND: "Sound Symbol", SCRIPT_proto.PuzzleSymbol.ANAGRAM: "Anagram Symbol", SCRIPT_proto.PuzzleSymbol.JOB: "Job Symbol", SCRIPT_proto.PuzzleSymbol.STARS: "Stars Symbol", SCRIPT_proto.PuzzleSymbol.NULL: "Null Symbol", SCRIPT_proto.PuzzleSymbol.EVAL: "Eval Symbol", SCRIPT_proto.PuzzleSymbol.LINGO: "Lingo Symbol", SCRIPT_proto.PuzzleSymbol.QUESTION: "Question Symbol", } 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()] for progressive in objects.get_progressives(): progressive_id_by_ap_id[progressive.get_ap_id()] = progressive.get_id() for letter in objects.get_letters(): letter_id_by_ap_id[letter.get_ap_id()] = letter.get_id() for panel in objects.get_panels(): var room = objects.get_rooms()[panel.get_room_id()] var map = objects.get_maps()[room.get_map_id()] if not map.get_name() in panel_id_by_map_node_path: panel_id_by_map_node_path[map.get_name()] = {} var map_data = panel_id_by_map_node_path[map.get_name()] map_data[panel.get_path()] = panel.get_id() for symbol_name in kSYMBOL_ITEMS.values(): symbol_item_ids.append(objects.get_special_ids()[symbol_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_panel_for_map_node_path(map_name, node_path): if not panel_id_by_map_node_path.has(map_name): return null var map_data = panel_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()