class_name ChatView extends ScrollContainer @export var messages: Array[ChatMessage] var v_box: VBoxContainer func _ready() -> void: v_box = VBoxContainer.new() add_child(v_box, false, Node.INTERNAL_MODE_BACK) rebuild() func rebuild(): for child in v_box.get_children(): child.free() var text_server: = TextServerManager.get_primary_interface() 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) text_server.shaped_text_fit_to_width(shaped_tex, size.x) var label: = RichTextLabel.new() label.custom_minimum_size = text_server.shaped_text_get_size(shaped_tex) + Vector2( 16, 16 ) label.text = message.text label.size_flags_horizontal = Control.SIZE_SHRINK_END if message.is_own_message else Control.SIZE_SHRINK_BEGIN v_box.add_child(label)