Files
scrap-signal/levels/intro.gd

54 lines
1.4 KiB
GDScript

extends Node
const LOGS: Array[String] = [
"INITIALIZING SYSTEM...",
"LAST SAVE: 847 DAYS AGO.",
"MISSING DATA: 847 DAYS.",
"UNIT SCRAP-09... BACK ONLINE.",
]
const CHAR_DELAY: float = 0.04
const LINE_PAUSE: float = 2.0
const CURSOR: String = "_"
var _full_text: String = ""
var _cursor_visible: bool = true
@onready var log_label: RichTextLabel = $CanvasLayer/LogLabel
@onready var background: ColorRect = $CanvasLayer/Background
func _ready() -> void:
log_label.text = ""
_start_cursor_blink()
_play_sequence()
func _start_cursor_blink() -> void:
var t: Tween = create_tween().set_loops()
t.tween_callback(_toggle_cursor).set_delay(0.5)
func _toggle_cursor() -> void:
_cursor_visible = !_cursor_visible
log_label.text = _full_text + (CURSOR if _cursor_visible else " ")
func _play_sequence() -> void:
for line in LOGS:
await _type_line(line)
await get_tree().create_timer(LINE_PAUSE).timeout
_full_text += "\n"
await get_tree().create_timer(1).timeout
# Fade out
var tween: Tween = create_tween()
tween.tween_property(background, "modulate:a", 0.0, 1.2)
await tween.finished
if OS.get_name() == "Web":
JavaScriptBridge.eval("document.querySelector('canvas').focus()")
get_tree().change_scene_to_file("res://levels/entrepot/entrepot.tscn")
func _type_line(line: String) -> void:
for i in line.length():
_full_text += line[i]
log_label.text = _full_text + CURSOR
await get_tree().create_timer(CHAR_DELAY).timeout