X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/9e5d67d3b7542b4b40f0797f8bc87ca387d5f480..45b19375d7b7586954c198f370a2ea9fc4fb7655:/player/player.gd?ds=inline diff --git a/player/player.gd b/player/player.gd index d00302d..11e41ac 100644 --- a/player/player.gd +++ b/player/player.gd @@ -1,19 +1,18 @@ 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 +@export var acceleration := 30.0 @export var rotation_speed := 10.0 @export var idle_timeout := 5.0 -@export var hard_landing_limit := 10.0 - -@export_group("Physics") -@export var push_force := 5.0 @export_group("Camera") @export_range(1.0, 10.0) var camera_distance := 2.0 @@ -23,6 +22,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 @@ -33,22 +35,21 @@ var _last_movement_direction := rotation var _floor_normal := Vector3.ONE var _ground_slope_input := 0.0 var _camera_input_direction := Vector2.ZERO - -enum {CAMERA_MOUSE_INPUT, CAMERA_JOYSTICK_INPUT} -var _camera_input_method := CAMERA_MOUSE_INPUT - var _idle_time: float = 0.0 var _player_speed: float = walk_speed +enum CameraInput {MOUSE, JOYSTICK} +var _camera_input_method := CameraInput.MOUSE + 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 @@ -57,10 +58,11 @@ func _unhandled_input(event: InputEvent) -> void: #_camera_input_direction *= mouse_sensitivity if event is InputEventMouseMotion: - _camera_input_method = CAMERA_MOUSE_INPUT + _camera_input_method = CameraInput.MOUSE _camera_input_direction = event.screen_relative * mouse_sensitivity elif event is InputEventJoypadMotion: - _camera_input_method = CAMERA_JOYSTICK_INPUT + # TODO: add these settings! + _camera_input_method = CameraInput.JOYSTICK _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 +70,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 @@ -95,7 +107,7 @@ func _process_camera(delta: float) -> void: _camera_pivot.rotation.y -= _camera_input_direction.x * mouse_sensitivity_x * delta # reset mouse movement vector if mouse input - if _camera_input_method == CAMERA_MOUSE_INPUT: + if _camera_input_method == CameraInput.MOUSE: _camera_input_direction = Vector2.ZERO # change spring length depending on player speed @@ -156,3 +168,13 @@ func _process_player(delta: float) -> void: velocity += get_gravity() * air_speed * delta move_and_slide() + +######### +# actions +######### + +func _player_dash(): + if _last_movement_direction != Vector3.ZERO: + var dash_local_pos = _last_movement_direction * dash_length + # TODO: check if valid position, crop the vector to last valid position + global_position += dash_local_pos