summaryrefslogtreecommitdiffstats
path: root/ps_curve.gd
blob: ae349777d1dd629d8eb70a5e785b0c93c6c51dce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class_name PlayerStateCurve
extends PlayerState

var t: float = 0
var target: Curve2D
var speed: float
var dir: int

func _to_string() -> String:
	return "PlayerStateCurve"

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