30 lines
904 B
GDScript
30 lines
904 B
GDScript
extends CharacterBody3D
|
|
|
|
|
|
@export var walk_speed: float
|
|
@export var gravity: float
|
|
@export var jump_force: float
|
|
|
|
@export var level_path: Path3D
|
|
|
|
|
|
func _physics_process(delta: float) -> void:
|
|
# snap player horizontally to path
|
|
var path_offset = level_path.curve.get_closest_offset(level_path.to_local(global_position))
|
|
var path_trans = level_path.curve.sample_baked_with_rotation(path_offset, true)
|
|
global_position.x = path_trans.origin.x
|
|
global_position.z = path_trans.origin.z
|
|
global_transform.basis.x = -path_trans.basis.x
|
|
global_transform.basis.z = -path_trans.basis.z
|
|
|
|
# horizontal movement
|
|
var h_movement = global_transform.basis.z * Input.get_axis(&"walk_left", &"walk_right") * walk_speed
|
|
velocity.x = h_movement.x
|
|
velocity.z = h_movement.z
|
|
|
|
# vertical movement
|
|
velocity.y -= gravity * delta
|
|
if Input.is_action_just_pressed(&"jump"):
|
|
velocity.y = jump_force
|
|
|
|
move_and_slide()
|