add chat
This commit is contained in:
64
scripts/ui/chat.gd
Normal file
64
scripts/ui/chat.gd
Normal file
@@ -0,0 +1,64 @@
|
||||
class_name Chat
|
||||
extends CanvasLayer
|
||||
|
||||
var open: bool = false
|
||||
|
||||
var _chat_message_scene := preload("res://scenes/ui/chat_message.tscn")
|
||||
|
||||
@onready var _messages_container: Container = $Root/VBox/MsgScroll/MsgMargin/MsgContainer
|
||||
@onready var _message_edit: LineEdit = $Root/VBox/MessageEdit
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_message_edit.text_submitted.connect(_on_message_edit_text_submitted)
|
||||
_message_edit.visible = false
|
||||
Referencer.chat = self
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
Referencer.chat = null
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event.is_action_pressed("menu"):
|
||||
call_deferred("_close")
|
||||
|
||||
|
||||
func _unhandled_input(event: InputEvent) -> void:
|
||||
if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
|
||||
return
|
||||
|
||||
if event.is_action_pressed("chat") and not open:
|
||||
open = true
|
||||
_message_edit.visible = true
|
||||
_message_edit.grab_focus()
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
|
||||
func _close() -> void:
|
||||
open = false
|
||||
_message_edit.release_focus()
|
||||
_message_edit.visible = false
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
|
||||
|
||||
@rpc("any_peer", "call_local", "reliable", 1)
|
||||
func _send_message(message: String) -> void:
|
||||
var player_name := (
|
||||
Networker.players[multiplayer.get_remote_sender_id()]["name"] as String
|
||||
)
|
||||
var message_node := _make_message_node(player_name, message)
|
||||
_messages_container.add_child(message_node)
|
||||
print(player_name + ": " + message)
|
||||
|
||||
|
||||
func _make_message_node(player_name: String, message: String) -> RichTextLabel:
|
||||
var node := _chat_message_scene.instantiate() as RichTextLabel
|
||||
node.text = "[b]" + player_name + ":[/b]\t" + message
|
||||
|
||||
return node
|
||||
|
||||
|
||||
func _on_message_edit_text_submitted(message: String) -> void:
|
||||
_message_edit.text = ""
|
||||
_send_message.rpc(message)
|
||||
Reference in New Issue
Block a user