class_name PlayerMovement extends RefCounted @export var _move_speed: float = 10 @export var _move_acceleration: float = 100 @export var _move_deceleration: float = 50 @export var _fall_speed: float = 20 @export var _fall_acceleration: float = 25 var move_input: Vector2 var _move_direction: Vector3 func lateral_movement(velocity: Vector3, delta: float) -> Vector3: move_input = Input.get_vector("move_left", "move_right", "move_up", "move_down") if move_input.length() > 0: _move_direction = Vector3(move_input.x, 0, move_input.y).normalized().rotated( Vector3.UP, Referencer.main_camera.rotation.y ) var new_velocity := _move_direction * _move_speed new_velocity.y = velocity.y velocity = velocity.move_toward(new_velocity, _move_acceleration * delta) else: var new_velocity := Vector3.ZERO new_velocity.y = velocity.y velocity = velocity.move_toward(new_velocity, _move_deceleration * delta) return velocity func vertical_movement(velocity: Vector3, delta: float, is_on_floor: bool) -> Vector3: if not is_on_floor: var new_velocity := velocity new_velocity.y = -_fall_speed velocity = velocity.move_toward(new_velocity, _fall_acceleration * delta) else: velocity.y = 0 return velocity