diff --git a/project.godot b/project.godot index 44faefa..42fd75a 100644 --- a/project.godot +++ b/project.godot @@ -93,6 +93,11 @@ right_click_interact={ "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(71, 28),"global_position":Vector2(80, 74),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null) ] } +run={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} [layer_names] diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 5e5c21a..92708cf 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -5,15 +5,20 @@ extends CharacterBody3D @export var jump_velocity: float = 4.5 @export var mouse_sensitivity_horizontal: 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 ray_cast: RayCast3D = $RayCast3D +var is_running: bool = false + + func _physics_process(delta: float) -> void: apply_gravity(delta) handle_jump() + handle_running() handle_movement() move_and_slide() @@ -41,9 +46,24 @@ func handle_mouse_look(event: InputEvent) -> void: func handle_movement() -> void: 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 speed: float = run_speed if is_running else walk_speed + if direction: velocity.x = direction.x * speed velocity.z = direction.z * speed else: velocity.x = move_toward(velocity.x, 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