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")