diff options
Diffstat (limited to 'ps_curve.gd')
| -rw-r--r-- | ps_curve.gd | 37 |
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 |
