sokoban
Diffstat (limited to 'LoadingScreen.gd')
| -rw-r--r-- | LoadingScreen.gd | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/LoadingScreen.gd b/LoadingScreen.gd new file mode 100644 index 0000000..c49c44e --- /dev/null +++ b/LoadingScreen.gd @@ -0,0 +1,77 @@ +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)) |