From 96211e016a9d25af63f932742dd115f0c80070d8 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 29 Aug 2025 15:53:32 -0400 Subject: [Client] Added textclient --- client/Archipelago/manager.gd | 42 ++++++++++++++++ client/Archipelago/pauseMenu.gd | 6 +++ client/Archipelago/settings_screen.gd | 7 +++ client/Archipelago/textclient.gd | 90 +++++++++++++++++++++++++++++++++++ 4 files changed, 145 insertions(+) create mode 100644 client/Archipelago/pauseMenu.gd create mode 100644 client/Archipelago/textclient.gd (limited to 'client/Archipelago') diff --git a/client/Archipelago/manager.gd b/client/Archipelago/manager.gd index 6b34bdf..10c4096 100644 --- a/client/Archipelago/manager.gd +++ b/client/Archipelago/manager.gd @@ -51,6 +51,7 @@ func _ready(): client.SCRIPT_uuid = SCRIPT_uuid client.connect("item_received", _process_item) + client.connect("message_received", _process_message) client.connect("could_not_connect", _client_could_not_connect) client.connect("connect_status", _client_connect_status) client.connect("client_connected", _client_connected) @@ -171,6 +172,8 @@ func _process_item(item, index, from, flags): func _process_message(message): + parse_printjson_for_textclient(message) + if ( !message.has("receiving") or !message.has("item") @@ -215,6 +218,45 @@ func _process_message(message): global.get_node("Messages").showMessage(sentMsg) +func parse_printjson_for_textclient(message): + var parts = [] + for message_part in message["data"]: + if !message_part.has("type") and message_part.has("text"): + parts.append(message_part["text"]) + elif message_part["type"] == "player_id": + if int(message_part["text"]) == client._slot: + parts.append( + "[color=#ee00ee]%s[/color]" % client._player_name_by_slot[client._slot] + ) + else: + var from = float(message_part["text"]) + parts.append("[color=#fafad2]%s[/color]" % client._player_name_by_slot[from]) + elif message_part["type"] == "item_id": + var item_name = "Unknown" + var item_player_game = client._game_by_player[message_part["player"]] + if client._item_id_to_name[item_player_game].has(int(message_part["text"])): + item_name = client._item_id_to_name[item_player_game][int(message_part["text"])] + + parts.append( + "[color=%s]%s[/color]" % [colorForItemType(message_part["flags"]), item_name] + ) + elif message_part["type"] == "location_id": + var location_name = "Unknown" + var location_player_game = client._game_by_player[message_part["player"]] + if client._location_id_to_name[location_player_game].has(int(message_part["text"])): + location_name = client._location_id_to_name[location_player_game][int( + message_part["text"] + )] + + parts.append("[color=#00ff7f]%s[/color]" % location_name) + elif message_part.has("text"): + parts.append(message_part["text"]) + + var textclient_node = global.get_node("Textclient") + if textclient_node != null: + textclient_node.parse_printjson("".join(parts)) + + func _client_could_not_connect(): emit_signal("could_not_connect") diff --git a/client/Archipelago/pauseMenu.gd b/client/Archipelago/pauseMenu.gd new file mode 100644 index 0000000..6c013a5 --- /dev/null +++ b/client/Archipelago/pauseMenu.gd @@ -0,0 +1,6 @@ +extends "res://scripts/ui/pauseMenu.gd" + + +func _pause_game(): + global.get_node("Textclient").dismiss() + super._pause_game() diff --git a/client/Archipelago/settings_screen.gd b/client/Archipelago/settings_screen.gd index 0611bab..3697466 100644 --- a/client/Archipelago/settings_screen.gd +++ b/client/Archipelago/settings_screen.gd @@ -39,6 +39,7 @@ func _ready(): installScriptExtension(ResourceLoader.load("user://maps/Archipelago/animationListener.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/door.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/painting.gd")) + installScriptExtension(ResourceLoader.load("user://maps/Archipelago/pauseMenu.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/player.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/saver.gd")) installScriptExtension(ResourceLoader.load("user://maps/Archipelago/teleportListener.gd")) @@ -58,6 +59,11 @@ func _ready(): messages_instance.name = "Messages" global.add_child(messages_instance) + var textclient_script = load("user://maps/Archipelago/textclient.gd") + var textclient_instance = textclient_script.new() + textclient_instance.name = "Textclient" + global.add_child(textclient_instance) + var ap = global.get_node("Archipelago") ap.connect("ap_connected", connectionSuccessful) ap.connect("could_not_connect", connectionUnsuccessful) @@ -149,6 +155,7 @@ func connectionSuccessful(): clearResourceCache("res://objects/nodes/listeners/worldportListener.tscn") clearResourceCache("res://objects/nodes/player.tscn") clearResourceCache("res://objects/nodes/saver.tscn") + clearResourceCache("res://objects/scenes/menus/pause_menu.tscn") var paintings_dir = DirAccess.open("res://objects/meshes/paintings") if paintings_dir: diff --git a/client/Archipelago/textclient.gd b/client/Archipelago/textclient.gd new file mode 100644 index 0000000..6a0aa95 --- /dev/null +++ b/client/Archipelago/textclient.gd @@ -0,0 +1,90 @@ +extends CanvasLayer + +var panel +var label +var entry +var is_open = false + + +func _ready(): + process_mode = ProcessMode.PROCESS_MODE_ALWAYS + + 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 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): + if !label.text.is_empty(): + #label.newline() + pass + + label.append_text("[p]" + text + "[/p]") + + +func text_entered(text): + var ap = global.get_node("Archipelago") + var cmd = text.trim_suffix("\n") + ap.client.say(cmd) + entry.text = "" -- cgit 1.4.1