diary/user_interface/chat_panel/message_feed.gd
2022-06-28 21:51:50 +02:00

58 lines
1.7 KiB
GDScript

extends PanelContainer
onready var scroll_container = get_node("MarginContainer/ScrollContainer")
onready var v_scroll = get_node("MarginContainer/ScrollContainer/_v_scroll")
onready var margin_container = get_node("MarginContainer/ScrollContainer/MarginContainer")
onready var message_feed_container = get_node("MarginContainer/ScrollContainer/MarginContainer/MessageFeedContainer")
var cling_to_end = true
func _ready():
# warning-ignore:return_value_discarded
Data.messages.connect(
"message_added", self, "_on_data_message_added"
)
# warning-ignore:return_value_discarded
Data.messages.connect(
"message_group_added", self, "_on_data_message_group_added"
)
# warning-ignore:return_value_discarded
v_scroll.connect("value_changed", self, "_on_scroll_value_changed")
func scroll_to_newest():
yield(get_tree(), "idle_frame")
v_scroll.value = margin_container.rect_size.y
func _on_message_box_confirmed(content):
if PingSystem.unhandled_ping_list.size() == 0 and not content.empty():
Data.messages.add_message(
content, Time.get_current_time(), Users.get_current()
)
Data.miscellaneous.big_interaction = Time.get_current_time()
func _on_data_message_added(message):
var node = message.create_node()
message.associated_message_group.get_ref().associated_container.add(node)
if not message.content.empty():
scroll_to_newest()
func _on_data_message_group_added(message_group):
var container = message_group.create_container()
message_feed_container.add_child(container)
func _on_content_resized():
if cling_to_end:
scroll_to_newest()
func _on_scroll_value_changed(value):
var scroll_end = scroll_container.get_rect().size.y + value
cling_to_end = scroll_end == margin_container.get_rect().size.y