diff options
| author | Jan Tuomi <jan@jantuomi.fi> | 2025-11-27 22:45:13 +0200 |
|---|---|---|
| committer | Jan Tuomi <jan@jantuomi.fi> | 2025-11-27 22:45:13 +0200 |
| commit | fa546bfde3c7ee4795f33e584cb1922d07cf8ec5 (patch) | |
| tree | cd55edd4386d87f3a7581d7861d6c74c443131c0 /player.gd | |
| parent | 3236bdfd8b305354d7d418e628f26980577dd58b (diff) | |
Add computer and curve following
Diffstat (limited to 'player.gd')
| -rw-r--r-- | player.gd | 36 |
1 files changed, 25 insertions, 11 deletions
@@ -5,12 +5,13 @@ extends CharacterBody2D @export var jump_strength: float @export var coyote_max_ms: float @export var jump_held_coef: float -@export var curve_speed: float ## float (-1.0 .. 1.0) or null var forced_input_x: Variant var curve_t: float = 0 var followed_curve: Curve2D +var curve_speed: float +var curve_dir: int enum { MOVEMENT_NORMAL, MOVEMENT_FORCED, @@ -99,8 +100,6 @@ func _movement_normal(delta: float): coyote += delta var can_jump = coyote < (coyote_max_ms * 0.001) and jump_was_released - if Input.is_action_just_pressed("jump"): - print_debug("coyote:", coyote, ", max:", coyote_max_ms * 0.001) if Input.is_action_pressed("jump") and can_jump: velocity.y = -jump_strength # Force coyote time to expire to forbid double jumps @@ -134,17 +133,32 @@ func _movement_forced(delta: float): move_and_slide() -func follow_curve(curve: Curve2D): - movement_type = MOVEMENT_CURVE - followed_curve = curve - curve_t = 0 +func follow_curve(curve: Curve2D, speed: float, reverse: bool): + if movement_type != MOVEMENT_CURVE: + movement_type = MOVEMENT_CURVE + followed_curve = curve + curve_speed = speed + if reverse: + curve_dir = -1 + curve_t = 1 + else: + curve_dir = 1 + curve_t = 0 func _movement_curve(delta: float): - #print_debug("t:", curve_t) - curve_t += curve_speed * delta - if curve_t >= 1.0: + curve_t += curve_dir * curve_speed * delta + var finished: bool + if curve_dir == 1: + finished = curve_t >= 1.0 + else: + finished = curve_t <= 0.0 + + var new_position = followed_curve.sample_baked(curve_t * followed_curve.get_baked_length(), true) + velocity = (new_position - position) / delta + + if finished: movement_type = MOVEMENT_NORMAL followed_curve = null return - position = followed_curve.sample_baked(curve_t * followed_curve.get_baked_length(), true) + position = new_position |
