thegates/app/scripts/ui/onboarding/onboarding.gd
2025-08-17 16:47:53 +07:00

67 lines
1.3 KiB
GDScript

extends Control
const SECTION = "onboarding"
const KEY = "shown"
const INITIAL_DELAY = 1.0
const SHOWN = Color(1, 1, 1, 1)
const HIDDEN = Color(1, 1, 1, 0)
@export var ui_events: UiEvents
@export var root: Control
@export var close: Button
@export var fade_in: float = 0.2
@export var fade_out: float = 0.2
@export_group("Debug")
@export var show_always: bool
var tween: Tween
func _ready() -> void:
close.pressed.connect(hide_onboarding)
visible = true
root.visible = false
root.modulate = HIDDEN
try_show_onboarding()
func try_show_onboarding() -> void:
var is_shown = DataSaver.get_value(SECTION, KEY, false)
if is_shown and not show_always: return
ui_events.onboarding_requested_emit()
await get_tree().create_timer(INITIAL_DELAY).timeout
show_onboarding()
func show_onboarding() -> void:
if root.visible: return
root.visible = true
if is_instance_valid(tween): tween.stop()
tween = create_tween()
tween.tween_property(root, "modulate", SHOWN, fade_in)
ui_events.onboarding_started_emit()
func hide_onboarding() -> void:
if not root.visible: return
if is_instance_valid(tween): tween.stop()
tween = create_tween()
tween.tween_property(root, "modulate", HIDDEN, fade_out)
await tween.finished
root.visible = false
DataSaver.set_value(SECTION, KEY, true)
DataSaver.save_data()
ui_events.onboarding_finished_emit()