about summary refs log tree commit diff stats
path: root/Archipelago/textclient.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Archipelago/textclient.gd')
-rw-r--r--Archipelago/textclient.gd100
1 files changed, 100 insertions, 0 deletions
diff --git a/Archipelago/textclient.gd b/Archipelago/textclient.gd new file mode 100644 index 0000000..3abd9e0 --- /dev/null +++ b/Archipelago/textclient.gd
@@ -0,0 +1,100 @@
1extends Node
2
3var panel
4var label
5var entry
6var is_open = false
7
8
9func _ready():
10 pause_mode = PAUSE_MODE_PROCESS
11
12 panel = Panel.new()
13 panel.set_name("Panel")
14 panel.margin_left = 100
15 panel.margin_right = 1820
16 panel.margin_top = 100
17 panel.margin_bottom = 980
18 panel.visible = false
19 add_child(panel)
20
21 label = RichTextLabel.new()
22 label.set_name("Label")
23 label.margin_left = 80
24 label.margin_right = 1640
25 label.margin_top = 80
26 label.margin_bottom = 720
27 label.scroll_following = true
28 label.selection_enabled = true
29 panel.add_child(label)
30
31 var dynamic_font = DynamicFont.new()
32 dynamic_font.font_data = load("res://fonts/Lingo.ttf")
33 dynamic_font.size = 36
34 label.push_font(dynamic_font)
35
36 var entry_style = StyleBoxFlat.new()
37 entry_style.bg_color = Color(0.9, 0.9, 0.9, 1)
38
39 entry = LineEdit.new()
40 entry.set_name("Entry")
41 entry.margin_left = 80
42 entry.margin_right = 1640
43 entry.margin_top = 760
44 entry.margin_bottom = 840
45 entry.add_font_override("font", dynamic_font)
46 entry.add_color_override("font_color", Color(0, 0, 0, 1))
47 entry.add_color_override("cursor_color", Color(0, 0, 0, 1))
48 entry.add_stylebox_override("focus", entry_style)
49 panel.add_child(entry)
50 entry.connect("text_entered", self, "text_entered")
51
52
53func _input(event):
54 if event is InputEventKey and event.pressed:
55 if event.scancode == 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_tree().set_input_as_handled()
63 else:
64 dismiss()
65 elif event.scancode == KEY_ESCAPE:
66 if is_open:
67 dismiss()
68 get_tree().set_input_as_handled()
69
70
71func 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
79func parse_printjson(text):
80 if !label.text.empty():
81 label.append_bbcode("\n")
82
83 label.append_bbcode(text)
84
85
86func text_entered(text):
87 var apclient = global.get_node("Archipelago")
88 var cmd = text.trim_suffix("\n")
89 if cmd.begins_with("/say "):
90 if apclient.enable_multiplayer:
91 var msg = cmd.trim_prefix("/say ")
92 parse_printjson(
93 "[LOCAL] [color=#ee00ee]%s[/color]: %s" % [apclient.get_player_name(), msg]
94 )
95 get_tree().get_root().get_node("Spatial/Multiplayer").say(msg)
96 else:
97 parse_printjson("Multiplayer must be enabled to use /say")
98 else:
99 apclient.say(cmd)
100 entry.text = ""