extends Node3D class_name PlayerCameraHandler @export_range(1.0, 10.0) var camera_distance := 3.0 @export_range(0.0, 1.0) var mouse_sensitivity := 0.2 @export_range(0.0, 1.0) var mouse_sensitivity_x := 1.0 @export_range(0.0, 1.0) var mouse_sensitivity_y := mouse_sensitivity_x / 2 @export_range(0.0, 1.0) var joystick_sensitivity := 0.15 @export_range(0.0, 10.0) var joystick_sensitivity_x := 4.0 @export_range(0.0, 10.0) var joystick_sensitivity_y := joystick_sensitivity_x / 2 @onready var spring: SpringArm3D = $SpringArm3D # Called when the node enters the scene tree for the first time. func _ready() -> void: spring.spring_length = camera_distance # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: spring.spring_length = lerp( spring.spring_length, camera_distance, delta ) func update(input: InputPacket, delta: float): var camera_input_direction := input.camera_input_direction if input.camera_input_method == CameraInput.MOUSE: camera_input_direction *= Vector2( mouse_sensitivity_x, -mouse_sensitivity_y ) * mouse_sensitivity elif input.camera_input_method == CameraInput.JOYSTICK: camera_input_direction *= Vector2( joystick_sensitivity_x, -joystick_sensitivity_y ) * joystick_sensitivity # vertical camera rotation rotation.x += camera_input_direction.y * delta rotation.x = clamp(rotation.x, -PI / 6, PI / 3) # horizontal camera rotation rotation.y -= camera_input_direction.x * delta