X-Git-Url: http://git.purplebirdman.com/frog-ninja.git/blobdiff_plain/e290448c2414d818fc183725d32150218218b7a3..2e697142bf5e1b94429281572bdc1cbf5868d5ce:/player/input/InputHandler.gd diff --git a/player/input/InputHandler.gd b/player/input/InputHandler.gd index 9d0e7de..5a0e98d 100644 --- a/player/input/InputHandler.gd +++ b/player/input/InputHandler.gd @@ -2,18 +2,37 @@ extends Node class_name InputHandler +var camera: Camera3D + + func get_camera_input_direction() -> Vector2: return Input.get_vector( "camera-left", "camera-right", "camera-up", "camera-down" ) +# Get the XZ input direction based on player's input relative to the camera +func get_player_input_relative_to_camera(raw_input: Vector2) -> Vector3: + if camera: + var forward := camera.global_basis.z + var right := camera.global_basis.x + var dir := ( + forward * raw_input.y + right * raw_input.x + ).normalized() + return dir + else: + return Vector3.ZERO + + func get_player_input() -> InputPacket: var p: InputPacket = InputPacket.new() p.movement_direction = Input.get_vector( "player-left", "player-right", "player-forward", "player-backward" ) + p.camera_movement_direction = get_player_input_relative_to_camera( + p.movement_direction + ) if p.movement_direction != Vector2.ZERO: p.actions.append("walk") @@ -23,6 +42,9 @@ func get_player_input() -> InputPacket: if Input.is_action_just_pressed("player-slash"): p.actions.append("slash") + if Input.is_action_just_pressed("player-shoot"): + p.actions.append("shoot") + if p.actions.is_empty(): p.actions.append("idle")