extends Spatial onready var camera := $Camera var mouseOrigin: Vector2 var lastCameraTransform: Transform func _input(event: InputEvent): # Camera zoom if event.is_action("zoom_in"): camera.zoom(true) elif event.is_action("zoom_out"): camera.zoom(false) # Save original camera and mouse position before panning if event.is_action_pressed("pan"): mouseOrigin = get_viewport().get_mouse_position() lastCameraTransform = camera.transform func _process(delta: float): # If panning, translate mouse delta to camera delta if Input.is_action_pressed("pan"): var mouseDelta := get_viewport().get_mouse_position() - mouseOrigin var mousePos: Vector2 = mouseDelta * 0.0096 * (1-camera.getZoomLevel()/5) # Magic numbers everywhere camera.transform.origin = lastCameraTransform.origin - Vector3(mousePos.x, 0, mousePos.y)