extends CanvasLayer onready var animate: AnimationPlayer = $animate onready var progress = $Container/occluder/Progressbar onready var tween = $Container/Tween onready var fade = $fade var queued = false const distance = 150 signal startup_complete func _ready(): setup_curve(center($Container/occluder), $Container/Path) # sets up the curve with the return value from the centering of the occluder func setup_curve(center, path): var curve := Curve2D.new() curve.clear_points() var top_left = center + Vector2(-distance, -distance) var bottom_left = center + Vector2(-distance, distance) var top_right = center + Vector2(distance, -distance) var bottom_right = center + Vector2(distance, distance) for corner in [top_left, top_right, bottom_right, bottom_left, top_left]: curve.add_point(corner) path.set_curve(curve) func center(node): node.position = $Container.get_viewport_rect().size / 2 return node.position func startup(): Utils._set_disable_inputs(true) fade.play("Fadein") animate.play("Animate") yield(fade, "animation_finished") emit_signal("startup_complete") increment_progress() func exit(): if tween.is_active(): queued = true yield(tween, "tween_all_completed") tween_progress(progress.value, 100, Vector2(.1, .5)) yield(tween, "tween_all_completed") fade.play("Fadeout") Utils._set_disable_inputs(false) func _exit_tree(): Utils._set_disable_inputs(false) func tween_progress(old: float, new: float, length_range: Vector2): tween.interpolate_property( progress, "value", old, new, rand_range(length_range.x, length_range.y), Tween.TRANS_LINEAR, Tween.EASE_IN_OUT ) tween.start() func increment_progress(): if not tween.is_active() and not queued: tween_progress(progress.value, progress.value + round(rand_range(5, 25)), Vector2(1, 2))