extends Node3D @export var sensitivity: float @export var min_rotation_x: float = -80.0 @export var max_rotation_x: float = 25.0 var enabled: bool func _ready(): assert(rotation_order == EULER_ORDER_YXZ) min_rotation_x = deg_to_rad(min_rotation_x) max_rotation_x = deg_to_rad(max_rotation_x) func _unhandled_input(event): if event.is_action_pressed("look"): DisplayServer.mouse_set_mode(DisplayServer.MOUSE_MODE_CAPTURED) enabled = true elif event.is_action_released("look"): DisplayServer.mouse_set_mode(DisplayServer.MOUSE_MODE_VISIBLE) enabled = false func _input(event): if !enabled: return if not event is InputEventMouseMotion: return rotation.x += deg_to_rad(-event.relative.y * sensitivity) rotation.y += deg_to_rad(-event.relative.x * sensitivity) rotation.x = clampf(rotation.x, min_rotation_x, max_rotation_x)