moved chat to new ChatPanel and added smooth bottom scrolling when new message is received

This commit is contained in:
2025-07-20 13:36:30 +02:00
parent 4fe629d012
commit 3cf036db42
8 changed files with 274 additions and 79 deletions
+2 -7
View File
@@ -19,7 +19,8 @@ extends Control
@export var output: Label
func _write_line(text: String) -> void:
output.text += text + "\n"
#output.text += text + "\n"
pass
func _on_create_lobby_button_pressed() -> void:
client.create_lobby(name_input.text.strip_edges())
@@ -63,12 +64,6 @@ func _on_web_client_tcp_client_joined_lobby(client_name: String, connected_clien
}))
_update_connected_players(connected_client_names)
func _on_web_client_tcp_received_chat_message(client_name: String, message: String) -> void:
_write_line("<{client_name}> {message}".format({
"client_name": client_name,
"message": message,
}))
func _on_web_client_tcp_client_left_lobby(client_name: String, connected_client_names: Array) -> void:
_write_line("{client_name} left the lobby".format({"client_name": client_name}))
_update_connected_players(connected_client_names)
+11 -1
View File
@@ -1,6 +1,9 @@
class_name WebClientTCP
extends Node
## Sender tag for system messages displayed in the chat
const SENDER_SYSTEM: String = "SYSTEM"
#var _tcp := StreamPeerTCP.new()
var _socket := WebSocketPeer.new()
@@ -58,6 +61,10 @@ signal received_end_game_request()
signal request_next_play()
signal request_next_round()
# new signals
## Emitted when a message that needs to be displayed to the player has been received.
signal user_message_received(sender: String, message: String)
enum ConnectionStatus {
DISCONNECTED,
ATTEMPTING_CONNECTION,
@@ -136,8 +143,11 @@ func _handle_response(response: String) -> void:
_connected_client_ids.assign(data["connected_client_ids"])
_connected_client_names.assign(data["connected_client_names"])
client_left_lobby.emit.call_deferred(data["client_name"], _connected_client_names)
## A chat message has been received
"receive_chat_message":
received_chat_message.emit.call_deferred(data["client_name"], data["message"])
# Relay message to be displayed in the chat panel
user_message_received.emit.call_deferred(data["client_name"], data["message"])
"new_round_started":
if data["current_round"] == 1: