extends Camera3D const SCREEN_MARGIN : int = 15 const SCREEN_MOVEMENT_SPEED : float = .08 @export var curve : Curve var shouldMove : bool = true func _ready() -> void: curve.bake() rotation.x = deg_to_rad(curve.min_value) position.y = curve.max_domain func _process(_delta: float) -> void: if not shouldMove: return var windowSize : Vector2i = get_window().size var mousePosition : Vector2 = get_viewport().get_mouse_position() if mousePosition.x < SCREEN_MARGIN: position.x += -SCREEN_MOVEMENT_SPEED if mousePosition.y < SCREEN_MARGIN: position.z += -SCREEN_MOVEMENT_SPEED if mousePosition.x > windowSize.x - SCREEN_MARGIN: position.x += SCREEN_MOVEMENT_SPEED if mousePosition.y > windowSize.y - SCREEN_MARGIN: position.z += SCREEN_MOVEMENT_SPEED func _notification(what: int) -> void: match what: NOTIFICATION_WM_MOUSE_ENTER: shouldMove = true NOTIFICATION_WM_MOUSE_EXIT: shouldMove = false func _input(event: InputEvent) -> void: if not event is InputEventMouseButton: return var newPosition : float = position.y match event.button_index: MOUSE_BUTTON_WHEEL_UP: newPosition -= .2 MOUSE_BUTTON_WHEEL_DOWN: newPosition += .2 newPosition = clampf(newPosition, curve.min_domain, curve.max_domain) rotation.x = deg_to_rad(curve.sample(newPosition)) position.y = newPosition