From 3f53502a5907ed1982d28a392c54331f0c1c2c42 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 25 Sep 2025 12:09:50 -0400 Subject: Move the client into the apworld Only works on source right now, not as an apworld. --- apworld/client/messages.gd | 74 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 apworld/client/messages.gd (limited to 'apworld/client/messages.gd') diff --git a/apworld/client/messages.gd b/apworld/client/messages.gd new file mode 100644 index 0000000..ab4f071 --- /dev/null +++ b/apworld/client/messages.gd @@ -0,0 +1,74 @@ +extends CanvasLayer + +var SCRIPT_rainbowText + +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.install_effect(SCRIPT_rainbowText.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 + + if !_ordered_labels.is_empty(): + 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 + + +func clear(): + _message_queue.clear() + + for message_label in _ordered_labels: + message_label.queue_free() + + _ordered_labels.clear() -- cgit 1.4.1