diff options
Diffstat (limited to 'apworld/client/textclient.gd')
| -rw-r--r-- | apworld/client/textclient.gd | 95 |
1 files changed, 95 insertions, 0 deletions
| 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 @@ | |||
| 1 | extends CanvasLayer | ||
| 2 | |||
| 3 | var panel | ||
| 4 | var label | ||
| 5 | var entry | ||
| 6 | var is_open = false | ||
| 7 | |||
| 8 | |||
| 9 | func _ready(): | ||
| 10 | process_mode = ProcessMode.PROCESS_MODE_ALWAYS | ||
| 11 | layer = 2 | ||
| 12 | |||
| 13 | panel = Panel.new() | ||
| 14 | panel.set_name("Panel") | ||
| 15 | panel.offset_left = 100 | ||
| 16 | panel.offset_right = 1820 | ||
| 17 | panel.offset_top = 100 | ||
| 18 | panel.offset_bottom = 980 | ||
| 19 | panel.visible = false | ||
| 20 | add_child(panel) | ||
| 21 | |||
| 22 | label = RichTextLabel.new() | ||
| 23 | label.set_name("Label") | ||
| 24 | label.offset_left = 80 | ||
| 25 | label.offset_right = 1640 | ||
| 26 | label.offset_top = 80 | ||
| 27 | label.offset_bottom = 720 | ||
| 28 | label.scroll_following = true | ||
| 29 | label.selection_enabled = true | ||
| 30 | panel.add_child(label) | ||
| 31 | |||
| 32 | label.push_font(load("res://assets/fonts/Lingo2.ttf")) | ||
| 33 | label.push_font_size(36) | ||
| 34 | |||
| 35 | var entry_style = StyleBoxFlat.new() | ||
| 36 | entry_style.bg_color = Color(0.9, 0.9, 0.9, 1) | ||
| 37 | |||
| 38 | entry = LineEdit.new() | ||
| 39 | entry.set_name("Entry") | ||
| 40 | entry.offset_left = 80 | ||
| 41 | entry.offset_right = 1640 | ||
| 42 | entry.offset_top = 760 | ||
| 43 | entry.offset_bottom = 840 | ||
| 44 | entry.add_theme_font_override("font", load("res://assets/fonts/Lingo2.ttf")) | ||
| 45 | entry.add_theme_font_size_override("font_size", 36) | ||
| 46 | entry.add_theme_color_override("font_color", Color(0, 0, 0, 1)) | ||
| 47 | entry.add_theme_color_override("cursor_color", Color(0, 0, 0, 1)) | ||
| 48 | entry.add_theme_stylebox_override("focus", entry_style) | ||
| 49 | panel.add_child(entry) | ||
| 50 | entry.connect("text_submitted", text_entered) | ||
| 51 | |||
| 52 | |||
| 53 | func _input(event): | ||
| 54 | if global.loaded and event is InputEventKey and event.pressed: | ||
| 55 | if event.keycode == KEY_TAB and !Input.is_key_pressed(KEY_SHIFT): | ||
| 56 | if !get_tree().paused: | ||
| 57 | is_open = true | ||
| 58 | get_tree().paused = true | ||
| 59 | Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) | ||
| 60 | panel.visible = true | ||
| 61 | entry.grab_focus() | ||
| 62 | get_viewport().set_input_as_handled() | ||
| 63 | else: | ||
| 64 | dismiss() | ||
| 65 | elif event.keycode == KEY_ESCAPE: | ||
| 66 | if is_open: | ||
| 67 | dismiss() | ||
| 68 | get_viewport().set_input_as_handled() | ||
| 69 | |||
| 70 | |||
| 71 | func dismiss(): | ||
| 72 | if is_open: | ||
| 73 | get_tree().paused = false | ||
| 74 | Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) | ||
| 75 | panel.visible = false | ||
| 76 | is_open = false | ||
| 77 | |||
| 78 | |||
| 79 | func parse_printjson(text): | ||
| 80 | label.append_text("[p]" + text + "[/p]") | ||
| 81 | |||
| 82 | |||
| 83 | func text_entered(text): | ||
| 84 | var ap = global.get_node("Archipelago") | ||
| 85 | var cmd = text.trim_suffix("\n") | ||
| 86 | entry.text = "" | ||
| 87 | if OS.is_debug_build(): | ||
| 88 | if cmd.begins_with("/tp_map "): | ||
| 89 | var new_map = cmd.substr(8) | ||
| 90 | global.map = new_map | ||
| 91 | global.sets_entry_point = false | ||
| 92 | switcher.switch_map("res://objects/scenes/%s.tscn" % new_map) | ||
| 93 | return | ||
| 94 | |||
| 95 | ap.client.say(cmd) | ||
