summaryrefslogtreecommitdiffstats
path: root/ps_curve.gd
diff options
context:
space:
mode:
authorJan Tuomi <jan@jantuomi.fi>2025-11-28 18:42:41 +0200
committerJan Tuomi <jan@jantuomi.fi>2025-11-28 18:42:41 +0200
commit6173a0c4e1b41628532a37f0638339b0724b445e (patch)
tree56c52754cf2aa93e8678639c0ed7c91595acb40d /ps_curve.gd
parent1723938f22be657cbe8d6bc85e70039622412273 (diff)
Use state machine in Player
Diffstat (limited to 'ps_curve.gd')
-rw-r--r--ps_curve.gd37
1 files changed, 37 insertions, 0 deletions
diff --git a/ps_curve.gd b/ps_curve.gd
new file mode 100644
index 0000000..bf903bd
--- /dev/null
+++ b/ps_curve.gd
@@ -0,0 +1,37 @@
+class_name PlayerStateCurve
+extends PlayerState
+
+var t: float = 0
+var target: Curve2D
+var speed: float
+var dir: int
+
+func initialize(_p: Player, c_target: Curve2D, c_speed: float, c_reverse: bool):
+ target = c_target
+ speed = c_speed
+ if c_reverse:
+ dir = -1
+ t = 1
+ else:
+ dir = 1
+ t = 0
+
+func _handle(_p: Player, _delta: float):
+ pass
+
+func _handle_physics(p: Player, delta: float):
+ t += dir * speed * delta
+ var finished: bool
+ if dir == 1:
+ finished = t >= 1.0
+ else:
+ finished = t <= 0.0
+
+ var new_position = target.sample_baked(t * target.get_baked_length(), true)
+ p.velocity = (new_position - p.position) / delta
+
+ if finished:
+ p.set_movement_normal()
+ return
+
+ p.position = new_position