moved chat to new ChatPanel and added smooth bottom scrolling when new message is received
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
class_name ChatPanel
|
||||
extends VBoxContainer
|
||||
|
||||
@onready var _chat_message_scene: PackedScene = preload("uid://docnx7algl78k")
|
||||
|
||||
@export_range(0.1, 1.0, 0.05) var auto_scroll_duration: float = 0.2
|
||||
@export var message_container: VBoxContainer
|
||||
@export var scroll_container: ScrollContainer
|
||||
|
||||
func put_chat_message(sender: String, message: String) -> void:
|
||||
var scene: ChatMessage = _chat_message_scene.instantiate()
|
||||
scene.set_message("<{sender}> {message}".format({
|
||||
"sender": sender,
|
||||
"message": message,
|
||||
}))
|
||||
message_container.add_child(scene)
|
||||
|
||||
# Wait a short time so that ScrollLayout receives new height because of newly added child
|
||||
await get_tree().create_timer(0.05).timeout
|
||||
_scroll_to_bottom()
|
||||
|
||||
func _scroll_to_bottom() -> void:
|
||||
create_tween().set_trans(Tween.TRANS_QUAD).set_ease(Tween.EASE_OUT).tween_property(scroll_container, "scroll_vertical", scroll_container.get_v_scroll_bar().max_value - scroll_container.get_v_scroll_bar().size.y, auto_scroll_duration)
|
||||
|
||||
func _on_web_client_user_message_received(sender: String, message: String) -> void:
|
||||
put_chat_message(sender, message)
|
||||
Reference in New Issue
Block a user