summaryrefslogtreecommitdiff
path: root/ui/chat_window.gd
blob: 640a2578efe1c8a65d5b751fbea71ce2beae18b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
extends PanelContainer


@export var player_color: Color = Color8(255, 255, 255)


func _ready() -> void:
	# clear test label
	%ChatWindow.remove_child(%ChatWindow.get_child(0))
	
	if Network.map_server:
		initialize()


func initialize() -> void:
	Network.map_server.received_server_message.connect(_on_server_message_packet_received)
	Network.map_server.received_broadcast_formatted_message.connect(_on_broadcast_formatted_message_packet_received)


func add_message(message: String, format: ChatMessageFormat):
	var label = Label.new()
	label.text = message
	
	if format.color:
		label.add_theme_color_override("font_color", format.color)
	
	if format.size:
		label.add_theme_font_size_override("font_size", format.size)
	
	%ChatWindow.add_child(label)
	
	await get_tree().process_frame # necessary to reach bottom correctly
	%ScrollContainer.scroll_vertical = %ScrollContainer.get_v_scroll_bar().max_value


func _on_line_edit_text_submitted(new_text: String) -> void:
	%LineEdit.text = ""
	
	var send_chat_message_packet := SendChatMessagePacket.new()
	send_chat_message_packet.message = "%s : %s" % [Client.character.name, new_text]
	Network.map_server.send(send_chat_message_packet)


func _on_server_message_packet_received(packet: ServerMessagePacket):
	var format := ChatMessageFormat.new()
	
	if packet.message.begins_with(Client.character.name):
		format.color = player_color
	
	add_message(packet.message, format)


func _on_broadcast_formatted_message_packet_received(packet: BroadcastFormattedMessagePacket):
	var format := ChatMessageFormat.new()
	format.color = packet.get_font_color()
	format.size = packet.font_size
	
	add_message(packet.message, format)


class ChatMessageFormat extends Resource:
	var color: Color
	var size: int