2022-05-14 20:51:48 +02:00
extends PanelContainer
2022-06-28 21:51:50 +02:00
onready var scroll_container = get_node ( " MarginContainer/ScrollContainer " )
2022-05-14 20:51:48 +02:00
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 " )
2022-06-28 21:51:50 +02:00
var cling_to_end = true
2022-05-14 20:51:48 +02:00
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 "
)
2022-06-28 21:51:50 +02:00
# warning-ignore:return_value_discarded
v_scroll . connect ( " value_changed " , self , " _on_scroll_value_changed " )
2022-05-14 20:51:48 +02:00
func scroll_to_newest ( ) :
yield ( get_tree ( ) , " idle_frame " )
v_scroll . value = margin_container . rect_size . y
func _on_message_box_confirmed ( content ) :
2022-06-06 17:37:28 +02:00
if PingSystem . unhandled_ping_list . size ( ) == 0 and not content . empty ( ) :
2022-05-14 20:51:48 +02:00
Data . messages . add_message (
content , Time . get_current_time ( ) , Users . get_current ( )
)
2022-06-28 21:51:50 +02:00
Data . miscellaneous . big_interaction = Time . get_current_time ( )
2022-05-14 20:51:48 +02:00
func _on_data_message_added ( message ) :
var node = message . create_node ( )
2022-06-04 13:33:00 +02:00
message . associated_message_group . get_ref ( ) . associated_container . add ( node )
2022-06-28 21:51:50 +02:00
if not message . content . empty ( ) :
scroll_to_newest ( )
2022-05-14 20:51:48 +02:00
func _on_data_message_group_added ( message_group ) :
var container = message_group . create_container ( )
message_feed_container . add_child ( container )
2022-06-28 21:51:50 +02:00
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