Untitled

Anonymous
plain_text
02/24/2026 1:26 AM
1.3 KB
10
Indexable
extends Control

signal finished

@onready var text_label: RichTextLabel = $Center/Text

var _lines: Array[String] = []
var _index: int = 0
var _running: bool = false
var _at_end: bool = false

func _ready() -> void:
	# Make sure this overlay never blocks clicks in other scenes
	mouse_filter = Control.MOUSE_FILTER_IGNORE
	visible = false

func start(lines: Array[String]) -> void:
	_lines = lines
	_index = 0
	_running = true
	_at_end = false

	visible = true
	text_label.text = ""
	_show_current()

func _show_current() -> void:
	if _lines.is_empty():
		_running = false
		_at_end = true
		emit_signal("finished")
		return

	_index = clamp(_index, 0, _lines.size() - 1)
	text_label.text = _lines[_index]

func _unhandled_input(event: InputEvent) -> void:
	if not visible or not _running:
		return

	if event.is_action_pressed("interact"):
		if _at_end:
			_running = false
			emit_signal("finished")
			return

		_index += 1
		if _index >= _lines.size() - 1:
			_index = _lines.size() - 1
			_at_end = true

		_show_current()
Editor is loading...
Leave a Comment