extends CanvasLayer var _message_queue = [] var _font var _container var _ordered_labels = [] func _ready(): _container = VBoxContainer.new() _container.set_name("Container") _container.anchor_bottom = 1 _container.offset_left = 20.0 _container.offset_right = 1920.0 _container.offset_top = 0.0 _container.offset_bottom = -20.0 _container.alignment = BoxContainer.ALIGNMENT_END _container.mouse_filter = Control.MOUSE_FILTER_IGNORE self.add_child(_container) _font = load("res://assets/fonts/Lingo2.ttf") func _add_message(text): var new_label = RichTextLabel.new() new_label.push_font(_font) new_label.push_font_size(36) new_label.push_outline_color(Color(0, 0, 0, 1)) new_label.push_outline_size(2) new_label.append_text(text) new_label.fit_content = true _container.add_child(new_label) _ordered_labels.push_back(new_label) func showMessage(text): if _ordered_labels.size() >= 9: _message_queue.append(text) return _add_message(text) if _ordered_labels.size() > 1: return var timeout = 10.0 while !_ordered_labels.is_empty(): await get_tree().create_timer(timeout).timeout var to_remove = _ordered_labels.pop_front() var to_tween = get_tree().create_tween().bind_node(to_remove) to_tween.tween_property(to_remove, "modulate:a", 0.0, 0.5) to_tween.tween_callback(to_remove.queue_free) if !_message_queue.is_empty(): var next_msg = _message_queue.pop_front() _add_message(next_msg) if timeout > 4: timeout -= 3