From 3f53502a5907ed1982d28a392c54331f0c1c2c42 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 25 Sep 2025 12:09:50 -0400 Subject: Move the client into the apworld Only works on source right now, not as an apworld. --- apworld/client/textclient.gd | 95 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 apworld/client/textclient.gd (limited to 'apworld/client/textclient.gd') diff --git a/apworld/client/textclient.gd b/apworld/client/textclient.gd new file mode 100644 index 0000000..26831b4 --- /dev/null +++ b/apworld/client/textclient.gd @@ -0,0 +1,95 @@ +extends CanvasLayer + +var panel +var label +var entry +var is_open = false + + +func _ready(): + process_mode = ProcessMode.PROCESS_MODE_ALWAYS + layer = 2 + + panel = Panel.new() + panel.set_name("Panel") + panel.offset_left = 100 + panel.offset_right = 1820 + panel.offset_top = 100 + panel.offset_bottom = 980 + panel.visible = false + add_child(panel) + + label = RichTextLabel.new() + label.set_name("Label") + label.offset_left = 80 + label.offset_right = 1640 + label.offset_top = 80 + label.offset_bottom = 720 + label.scroll_following = true + label.selection_enabled = true + panel.add_child(label) + + label.push_font(load("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.offset_left = 80 + entry.offset_right = 1640 + entry.offset_top = 760 + entry.offset_bottom = 840 + entry.add_theme_font_override("font", load("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) + panel.add_child(entry) + entry.connect("text_submitted", text_entered) + + +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) + panel.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) + panel.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) -- cgit 1.4.1