72 lines
2.5 KiB
GDScript
72 lines
2.5 KiB
GDScript
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])
|