extends CanvasLayer var tabs var panel var label var entry var tracker_label var is_open = false func _ready(): process_mode = ProcessMode.PROCESS_MODE_ALWAYS layer = 2 tabs = TabContainer.new() tabs.name = "Tabs" tabs.offset_left = 100 tabs.offset_right = 1820 tabs.offset_top = 100 tabs.offset_bottom = 980 tabs.visible = false tabs.theme = preload("res://assets/themes/baseUI.tres") tabs.add_theme_font_size_override("font_size", 36) add_child(tabs) panel = MarginContainer.new() panel.name = "Text Client" panel.add_theme_constant_override("margin_top", 60) panel.add_theme_constant_override("margin_left", 60) panel.add_theme_constant_override("margin_right", 60) panel.add_theme_constant_override("margin_bottom", 60) tabs.add_child(panel) label = RichTextLabel.new() label.set_name("Label") label.scroll_following = true label.selection_enabled = true label.size_flags_horizontal = Control.SIZE_EXPAND_FILL label.size_flags_vertical = Control.SIZE_EXPAND_FILL label.push_font(preload("res://assets/fonts/Lingo2.ttf")) label.push_font_size(36) var entry_style = StyleBoxFlat.new() entry_style.bg_color = Color(0.9, 0.9, 0.9, 1) entry = LineEdit.new() entry.set_name("Entry") entry.add_theme_font_override("font", preload("res://assets/fonts/Lingo2.ttf")) entry.add_theme_font_size_override("font_size", 36) entry.add_theme_color_override("font_color", Color(0, 0, 0, 1)) entry.add_theme_color_override("cursor_color", Color(0, 0, 0, 1)) entry.add_theme_stylebox_override("focus", entry_style) entry.text_submitted.connect(text_entered) var tc_arranger = VBoxContainer.new() tc_arranger.add_child(label) tc_arranger.add_child(entry) tc_arranger.add_theme_constant_override("separation", 40) panel.add_child(tc_arranger) var tracker_margins = MarginContainer.new() tracker_margins.name = "Locations" tracker_margins.add_theme_constant_override("margin_top", 60) tracker_margins.add_theme_constant_override("margin_left", 60) tracker_margins.add_theme_constant_override("margin_right", 60) tracker_margins.add_theme_constant_override("margin_bottom", 60) tabs.add_child(tracker_margins) tracker_label = RichTextLabel.new() tracker_margins.add_child(tracker_label) func _input(event): if global.loaded and event is InputEventKey and event.pressed: if event.keycode == KEY_TAB and !Input.is_key_pressed(KEY_SHIFT): if !get_tree().paused: is_open = true get_tree().paused = true Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) tabs.visible = true entry.grab_focus() get_viewport().set_input_as_handled() else: dismiss() elif event.keycode == KEY_ESCAPE: if is_open: dismiss() get_viewport().set_input_as_handled() func dismiss(): if is_open: get_tree().paused = false Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) tabs.visible = false is_open = false func parse_printjson(text): label.append_text("[p]" + text + "[/p]") func text_entered(text): var ap = global.get_node("Archipelago") var cmd = text.trim_suffix("\n") entry.text = "" if OS.is_debug_build(): if cmd.begins_with("/tp_map "): var new_map = cmd.substr(8) global.map = new_map global.sets_entry_point = false switcher.switch_map("res://objects/scenes/%s.tscn" % new_map) return ap.client.say(cmd) func update_locations(): var ap = global.get_node("Archipelago") var gamedata = global.get_node("Gamedata") tracker_label.clear() tracker_label.push_font(preload("res://assets/fonts/Lingo2.ttf")) tracker_label.push_font_size(24) var location_names = [] for location_id in ap.client._accessible_locations: if not ap.client._checked_locations.has(location_id): var location_name = gamedata.location_name_by_id.get(location_id, "(Unknown)") location_names.append(location_name) location_names.sort() for location_name in location_names: tracker_label.append_text("[p]%s[/p]" % location_name)