extends Camera2D @export var MIN_ZOOM: float = 0.5 @export var MAX_ZOOM: float = 3.0 @export var ZOOM_RATE: float = 8.0 @export var ZOOM_INCREMENT: float = 0.1 var target_zoom: float = 1.0 var reset_pos: Vector2 = Vector2(0.0, 0.0) func _physics_process(delta: float) -> void: zoom = lerp(zoom, target_zoom * Vector2.ONE, ZOOM_RATE * delta) set_physics_process(not is_equal_approx(zoom.x, target_zoom)) func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouseButton: if event.is_pressed(): if event.button_index == MOUSE_BUTTON_WHEEL_UP: zoom_in() if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: zoom_out() if event is InputEventMouseMotion: if event.button_mask == MOUSE_BUTTON_MASK_LEFT: position -= event.relative / zoom if event is InputEventKey: if event.keycode == KEY_SPACE: target_zoom = 1.0 zoom = Vector2(1.0, 1.0) position = reset_pos func zoom_in() -> void: target_zoom = max(target_zoom - ZOOM_INCREMENT, MIN_ZOOM) set_physics_process(true) func zoom_out() -> void: target_zoom = min(target_zoom + ZOOM_INCREMENT, MAX_ZOOM) set_physics_process(true)