sokoban
Diffstat (limited to 'LoadingScreen.gd')
-rw-r--r--LoadingScreen.gd77
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))