extends CanvasLayer @onready var chat_log = $PanelContainer/VBoxContainer/RichTextLabel @onready var input_field = $PanelContainer/VBoxContainer/LineEdit var private_target_id: int = -1 var private_target_name: String = "" func _ready(): NetworkManager.chat_message_received.connect(_on_chat_message_received) NetworkManager.private_chat_message_received.connect(_on_private_message_received) input_field.text_submitted.connect(_on_text_submitted) func _input(event): if event.is_action_pressed("ui_cancel"): # ESC set_private_target(-1, "") input_field.release_focus() elif event.is_action_pressed("ui_accept"): # Enter if not input_field.has_focus(): input_field.grab_focus() get_viewport().set_input_as_handled() func set_private_target(id: int, p_name: String): private_target_id = id private_target_name = p_name if id != -1: input_field.placeholder_text = "[Private] To " + p_name + "..." input_field.add_theme_color_override("font_color", Color(1, 0.5, 1)) # Pink for private # input_field.grab_focus() # Don't grab focus automatically, let user move else: input_field.placeholder_text = "Press Enter to chat..." input_field.remove_theme_color_override("font_color") func _on_text_submitted(new_text): if new_text.strip_edges().is_empty(): input_field.release_focus() return if private_target_id != -1: NetworkManager.send_private_message(private_target_id, new_text) # Show my own private message in log chat_log.append_text("[color=#FF88FF][Private -> %s]: %s[/color]\n" % [private_target_name, new_text]) else: NetworkManager.send_message(new_text) input_field.clear() input_field.release_focus() func _on_chat_message_received(sender_id, text): var sender_name = str(sender_id) print("Chat Debug: Msg from ", sender_id, " (Type: ", typeof(sender_id), ")") print("Known Players: ", NetworkManager.players.keys()) if NetworkManager.players.has(sender_id): sender_name = NetworkManager.players[sender_id].get("name", str(sender_id)) # Debug empty name if sender_name == "": sender_name = "Player_" + str(sender_id) else: print("Chat Debug: Player ID not found in NetworkManager.players") chat_log.append_text("[color=yellow]%s[/color]: %s\n" % [sender_name, text]) func _on_private_message_received(sender_id, text): var sender_name = str(sender_id) if NetworkManager.players.has(sender_id): sender_name = NetworkManager.players[sender_id].get("name", str(sender_id)) chat_log.append_text("[color=#FF88FF][Private From %s]: %s[/color]\n" % [sender_name, text])