2025-04-26 21:33:44 +00:00
|
|
|
class_name ChatView extends ScrollContainer
|
|
|
|
|
|
|
|
|
|
@export var messages: Array[ChatMessage]
|
2025-05-26 15:44:11 +00:00
|
|
|
|
|
|
|
|
var v_box: VBoxContainer
|
|
|
|
|
|
|
|
|
|
func _ready() -> void:
|
|
|
|
|
v_box = VBoxContainer.new()
|
|
|
|
|
add_child(v_box, false, Node.INTERNAL_MODE_BACK)
|
|
|
|
|
rebuild()
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
func rebuild():
|
|
|
|
|
for child in v_box.get_children():
|
|
|
|
|
child.free()
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
var text_server: = TextServerManager.get_primary_interface()
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
for message in messages:
|
|
|
|
|
var shaped_tex: RID = text_server.create_shaped_text(TextServer.DIRECTION_AUTO, TextServer.ORIENTATION_HORIZONTAL)
|
|
|
|
|
text_server.shaped_text_add_string(shaped_tex, message.text, [theme.default_font.get_rid()], theme.default_base_scale)
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
text_server.shaped_text_fit_to_width(shaped_tex, size.x)
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
var label: = RichTextLabel.new()
|
|
|
|
|
label.custom_minimum_size = text_server.shaped_text_get_size(shaped_tex) + Vector2( 16, 16 )
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
label.text = message.text
|
|
|
|
|
label.size_flags_horizontal = Control.SIZE_SHRINK_END if message.is_own_message else Control.SIZE_SHRINK_BEGIN
|
2026-03-12 13:14:18 +00:00
|
|
|
|
2025-05-26 15:44:11 +00:00
|
|
|
v_box.add_child(label)
|