V-Panel/scenes/splash.gd

69 lines
2.2 KiB
GDScript3
Raw Normal View History

extends Control
@onready var vbox: VBoxContainer = %VBox
@onready var v_label: Label = %VLabel
@onready var panel_label: Label = %PanelLabel
@onready var transition_overlay: ColorRect = %TransitionOverlay
const V_START_SIZE: int = 48
const V_END_SIZE: int = 512
const P_START_SIZE: int = 28
const P_END_SIZE: int = 288
func _ready() -> void:
if not Engine.is_editor_hint():
get_window().mode = Window.MODE_FULLSCREEN
# Start invisible and at tiny font size
vbox.modulate = Color(1, 1, 1, 0)
v_label.add_theme_font_size_override("normal_font_size", V_START_SIZE)
panel_label.add_theme_font_size_override("normal_font_size", P_START_SIZE)
transition_overlay.color = Color(0, 0, 0, 1)
await get_tree().process_frame
# Fade overlay away
var reveal := create_tween()
reveal.tween_property(transition_overlay, "color", Color(0, 0, 0, 0), 0.4)
await reveal.finished
# Phase 1: Grow font sizes + fade in (parallel)
var grow := create_tween()
grow.set_parallel(true)
grow.tween_method(_set_sizes, 0.0, 1.0, 2.0).set_ease(Tween.EASE_OUT).set_trans(Tween.TRANS_BACK)
grow.tween_property(vbox, "modulate", Color(1, 1, 1, 1), 1.8).set_ease(Tween.EASE_OUT)
await grow.finished
# Phase 2: Hold
await get_tree().create_timer(1.0).timeout
# Phase 3: Fade out
var fade_out := create_tween()
fade_out.tween_property(vbox, "modulate", Color(1, 1, 1, 0), 0.8).set_ease(Tween.EASE_IN)
await fade_out.finished
# Phase 4: Crossfade to dashboard
var to_black := create_tween()
to_black.tween_property(transition_overlay, "color", Color(0, 0, 0, 1), 0.3)
await to_black.finished
var dashboard := preload("res://scenes/dashboard.tscn").instantiate()
add_child(dashboard)
var from_black := create_tween()
from_black.tween_property(transition_overlay, "color", Color(0, 0, 0, 0), 0.6)
await from_black.finished
remove_child(dashboard)
get_tree().root.add_child(dashboard)
queue_free()
func _set_sizes(progress: float) -> void:
var v_size: int = int(round(V_START_SIZE + progress * (V_END_SIZE - V_START_SIZE)))
var p_size: int = int(round(P_START_SIZE + progress * (P_END_SIZE - P_START_SIZE)))
v_label.add_theme_font_size_override("normal_font_size", v_size)
panel_label.add_theme_font_size_override("normal_font_size", p_size)