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()