Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Node
- @export_subgroup("Nodes")
- @export var character: CharacterBody3D
- @export_subgroup("Settings")
- @export var speed: float = 10.0
- @export var ground_accel_speed: float = 1.0
- @export var ground_decel_speed: float = 0.65
- @export var air_accel_speed: float = 0.4
- @export var air_decel_speed: float = 0.25
- var input: Vector3 = Vector3.ZERO
- func handle_input() -> void:
- var input_2d: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_back")
- input = Vector3(input_2d.x, 0, input_2d.y)
- # Only use delta with acceleration when adding to velocity
- func _physics_process(_delta: float) -> void:
- handle_input()
- var movement_direction: Vector3 = (character.transform.basis * input).normalized()
- var move_velocity: Vector2 = Vector2(movement_direction.x, movement_direction.z) * speed
- var velocity_change_speed: float = 0.0
- if character.is_on_floor():
- velocity_change_speed = ground_accel_speed if movement_direction else ground_decel_speed
- else:
- velocity_change_speed = air_accel_speed if movement_direction else air_decel_speed
- var old_velocity := Vector2(character.velocity.x, character.velocity.z)
- var new_velocity := old_velocity.move_toward(move_velocity, velocity_change_speed)
- character.velocity.x = new_velocity.x
- character.velocity.z = new_velocity.y
- character.move_and_slide()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement