|
@ -5,15 +5,20 @@ extends CharacterBody3D |
|
|
@export var jump_velocity: float = 4.5 |
|
|
@export var jump_velocity: float = 4.5 |
|
|
@export var mouse_sensitivity_horizontal: float = 0.002 |
|
|
@export var mouse_sensitivity_horizontal: float = 0.002 |
|
|
@export var mouse_sensitivity_vertical: float = 0.002 |
|
|
@export var mouse_sensitivity_vertical: float = 0.002 |
|
|
@export var speed: float = 5.0 |
|
|
|
|
|
|
|
|
@export var walk_speed: float = 5.0 |
|
|
|
|
|
@export var run_speed: float = 7.5 |
|
|
|
|
|
|
|
|
@onready var camera: Camera3D = $Camera3D |
|
|
@onready var camera: Camera3D = $Camera3D |
|
|
@onready var ray_cast: RayCast3D = $RayCast3D |
|
|
@onready var ray_cast: RayCast3D = $RayCast3D |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var is_running: bool = false |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func _physics_process(delta: float) -> void: |
|
|
func _physics_process(delta: float) -> void: |
|
|
apply_gravity(delta) |
|
|
apply_gravity(delta) |
|
|
handle_jump() |
|
|
handle_jump() |
|
|
|
|
|
handle_running() |
|
|
handle_movement() |
|
|
handle_movement() |
|
|
|
|
|
|
|
|
move_and_slide() |
|
|
move_and_slide() |
|
@ -41,9 +46,24 @@ func handle_mouse_look(event: InputEvent) -> void: |
|
|
func handle_movement() -> void: |
|
|
func handle_movement() -> void: |
|
|
var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") |
|
|
var input_dir: Vector2 = Input.get_vector("move_left", "move_right", "move_forward", "move_backward") |
|
|
var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() |
|
|
var direction: Vector3 = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() |
|
|
|
|
|
|
|
|
|
|
|
var speed: float = run_speed if is_running else walk_speed |
|
|
|
|
|
|
|
|
if direction: |
|
|
if direction: |
|
|
velocity.x = direction.x * speed |
|
|
velocity.x = direction.x * speed |
|
|
velocity.z = direction.z * speed |
|
|
velocity.z = direction.z * speed |
|
|
else: |
|
|
else: |
|
|
velocity.x = move_toward(velocity.x, 0, speed) |
|
|
velocity.x = move_toward(velocity.x, 0, speed) |
|
|
velocity.z = move_toward(velocity.z, 0, speed) |
|
|
velocity.z = move_toward(velocity.z, 0, speed) |
|
|
|
|
|
|
|
|
|
|
|
## Determine if should be running. This needs to run prior to handle_movement(). |
|
|
|
|
|
## Running is disabled when:[br] |
|
|
|
|
|
## 1. The `run` input is pressed (ie toggled)[br] |
|
|
|
|
|
## 2. Is no longer moving |
|
|
|
|
|
func handle_running() -> void: |
|
|
|
|
|
if Input.is_action_just_pressed("run") and not is_running: |
|
|
|
|
|
is_running = true |
|
|
|
|
|
elif Input.is_action_just_pressed("run") and is_running: |
|
|
|
|
|
is_running = false |
|
|
|
|
|
if velocity == Vector3.ZERO: |
|
|
|
|
|
is_running = false |