79 lines
1.7 KiB
GDScript
79 lines
1.7 KiB
GDScript
extends CanvasLayer
|
|
|
|
const _ANIM_LOADING: StringName = &"hover"
|
|
|
|
var fade_in_duration: float = 2.0
|
|
var fade_out_duration: float = 2.0
|
|
var is_fading: bool = false
|
|
var is_loading: bool = false
|
|
|
|
|
|
@onready var interactive_loader: InteractiveLoader = %InteractiveLoader
|
|
@onready var color_rect: ColorRect = %ColorRect
|
|
@onready var loading_hint_animations: AnimationPlayer = %LoadingHintAnimations
|
|
@onready var loading_hint: TextureRect = %LoadingHint
|
|
@onready var loading_label: RichTextLabel = $LoadingLabel
|
|
|
|
|
|
func _ready() -> void:
|
|
loading_label.hide()
|
|
color_rect.hide()
|
|
color_rect.color.a = 0.0
|
|
|
|
|
|
func load_to_path(path: String) -> void:
|
|
if is_loading:
|
|
return
|
|
|
|
is_loading = true
|
|
|
|
await fade_in()
|
|
await get_tree().create_timer(1.0).timeout
|
|
|
|
var scene: PackedScene = await interactive_loader.load_threaded(path)
|
|
|
|
assert(is_instance_valid(scene), "Scene is invalid.")
|
|
|
|
get_tree().change_scene_to_packed(scene)
|
|
get_tree().paused = false
|
|
|
|
fade_out()
|
|
is_loading = false
|
|
|
|
|
|
func fade_in() -> void:
|
|
color_rect.show()
|
|
is_fading = true
|
|
|
|
var tween: Tween = create_tween()
|
|
tween.tween_property(color_rect, ^"color:a", 1.0, fade_in_duration)
|
|
await tween.finished
|
|
|
|
is_fading = false
|
|
|
|
set_loading_hints_visible(true)
|
|
|
|
|
|
func fade_out() -> void:
|
|
set_loading_hints_visible(false)
|
|
|
|
is_fading = true
|
|
|
|
var tween: Tween = create_tween()
|
|
tween.tween_property(color_rect, ^"color:a", 0.0, fade_out_duration)
|
|
await tween.finished
|
|
|
|
color_rect.hide()
|
|
is_fading = false
|
|
|
|
|
|
func set_loading_hints_visible(value: bool) -> void:
|
|
loading_hint.visible = value
|
|
loading_label.visible = value
|
|
|
|
if value:
|
|
loading_label.set_text(loading_label.text) # Restart the effect.
|
|
loading_hint_animations.play(_ANIM_LOADING)
|
|
else:
|
|
loading_hint_animations.stop()
|