extends Control @onready var bg: ColorRect = %Bg @onready var v_label: Label = %VLabel @onready var panel_label: Label = %PanelLabel @onready var transition_overlay: ColorRect = %TransitionOverlay @onready var vbox: VBoxContainer = %VBox var _v_start: int var _v_end: int var _p_start: int var _p_end: int func _ready() -> void: if not Engine.is_editor_hint(): get_window().mode = Window.MODE_FULLSCREEN var screen_size: Vector2 = get_viewport_rect().size # Background color from config if ConfigManager.has_method("get_color"): bg.color = ConfigManager.get_color("background_color", Color(0.08, 0.08, 0.12)) # Compute end font sizes as a large fraction of screen height. _v_end = maxi(1, int(screen_size.y * 0.28)) _p_end = maxi(1, int(screen_size.y * 0.15)) _v_start = 4 _p_start = 4 _set_v_size(_v_start) _set_p_size(_p_start) vbox.modulate = Color(1, 1, 1, 0) transition_overlay.color = Color(0, 0, 0, 1) await get_tree().process_frame # Reveal background (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: Animate font sizes up + fade in 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: Crossfade to dashboard # The splash and dashboard share the same background color, so the # transition is seamless — splash text fades out while dashboard # modules materialise out of the same dark backdrop. var dashboard := preload("res://scenes/dashboard.tscn").instantiate() add_child(dashboard) dashboard.modulate = Color(1, 1, 1, 0) var crossfade := create_tween() crossfade.set_parallel(true) crossfade.tween_property(vbox, "modulate", Color(1, 1, 1, 0), 1.0).set_ease(Tween.EASE_IN) crossfade.tween_property(dashboard, "modulate", Color(1, 1, 1, 1), 1.0).set_ease(Tween.EASE_OUT).set_delay(0.2) await crossfade.finished # Reparent dashboard from splash to root, then free splash. remove_child(dashboard) get_tree().root.add_child(dashboard) queue_free() func _set_v_size(px: int) -> void: v_label.set("theme_override_font_sizes/font_size", px) func _set_p_size(px: int) -> void: panel_label.set("theme_override_font_sizes/font_size", px) func _set_sizes(progress: float) -> void: var v_size: int = maxi(1, int(round(_v_start + progress * (_v_end - _v_start)))) var p_size: int = maxi(1, int(round(_p_start + progress * (_p_end - _p_start)))) _set_v_size(v_size) _set_p_size(p_size)