From 9a1efe8c169a1d08c3537d4e21eae27866d5e9c8 Mon Sep 17 00:00:00 2001 From: Clifton Palmer Date: Sun, 4 May 2025 11:47:25 +0300 Subject: [PATCH] Added player dash --- player/player.gd | 42 +++++++++++++++++++++++++++++++++++------- texture/grid.png | Bin 5097 -> 10000 bytes 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/player/player.gd b/player/player.gd index d00302d..d08f491 100644 --- a/player/player.gd +++ b/player/player.gd @@ -1,10 +1,13 @@ extends CharacterBody3D class_name Player +########## +# settings +########## -# player settings @export_group("Movement") -@export var walk_speed := 10.0 +@export var walk_speed := 8.0 +@export var dash_length := 10.0 @export var air_speed := 3.0 @export var acceleration := 50.0 @@ -23,6 +26,9 @@ class_name Player @export_range(0.0, 10.0) var joystick_sensitivity_x := 4.0 @export_range(0.0, 10.0) var joystick_sensitivity_y := 2.0 +###### +# init +###### @onready var _camera_pivot: Node3D = %camera_pivot @onready var _camera: Camera3D = %camera @@ -43,12 +49,12 @@ var _player_speed: float = walk_speed func _ready() -> void: _camera_spring.spring_length = camera_distance + + - -func _physics_process(delta: float) -> void: - _process_camera(delta) - _process_player(delta) - +####### +# input +####### func _unhandled_input(event: InputEvent) -> void: # If user clicks on the window, capture the mouse and direct the camera with it @@ -60,6 +66,7 @@ func _unhandled_input(event: InputEvent) -> void: _camera_input_method = CAMERA_MOUSE_INPUT _camera_input_direction = event.screen_relative * mouse_sensitivity elif event is InputEventJoypadMotion: + # TODO: add these settings! _camera_input_method = CAMERA_JOYSTICK_INPUT _camera_input_direction = Input.get_vector("camera-left", "camera-right", "camera-up", "camera-down") _camera_input_direction *= Vector2(joystick_sensitivity_x, -joystick_sensitivity_y) @@ -68,12 +75,22 @@ func _unhandled_input(event: InputEvent) -> void: func _input(event: InputEvent): if event.is_action_pressed("player-dash"): _skin.transition_dash() + _player_dash() elif event.is_action_pressed("player-slash"): _skin.sword_visible() _skin.transition_slash() elif event.is_action_pressed("player-shoot"): _skin.gun_visible() _skin.transition_gunfire() + + +########## +# movement +########## + +func _physics_process(delta: float) -> void: + _process_camera(delta) + _process_player(delta) # Get the XZ input direction based on player's input relative to the camera @@ -156,3 +173,14 @@ func _process_player(delta: float) -> void: velocity += get_gravity() * air_speed * delta move_and_slide() + +######### +# actions +######### + +func _player_dash(): + var move_direction := _get_player_move_direction() + if move_direction != Vector3.ZERO: + var dash_local_pos = move_direction * dash_length + # TODO: check if valid position, crop the vector to last valid position + global_position += dash_local_pos diff --git a/texture/grid.png b/texture/grid.png index f7cc6f2c70323af211ae983b9e4e3663d43b7336..7cc12f777b28b4b5d909d78f37754720fcab6b85 100644 GIT binary patch literal 10000 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 -- 2.47.2