From 499822773a5c0971b542143ce4195f1cdc827d0e Mon Sep 17 00:00:00 2001 From: Sputer Date: Tue, 29 Jul 2025 03:29:30 +0300 Subject: [PATCH] Smooth zoom (no slowdown at close scales) --- src/config.nim | 2 +- src/navigation.nim | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/config.nim b/src/config.nim index 26d92cb..14e9f3a 100644 --- a/src/config.nim +++ b/src/config.nim @@ -8,7 +8,7 @@ type Config* = object const defaultConfig* = Config( min_scale: 0.01, - scroll_speed: 1.5, + scroll_speed: 1.0, drag_friction: 6.0, scale_friction: 4.0, ) diff --git a/src/navigation.nim b/src/navigation.nim index d3fb8dc..08b27f5 100644 --- a/src/navigation.nim +++ b/src/navigation.nim @@ -21,9 +21,10 @@ proc world*(camera: Camera, v: Vec2f): Vec2f = v / camera.scale proc update*(camera: var Camera, config: Config, dt: float, mouse: Mouse, image: PXImage, windowSize: Vec2f) = - if abs(camera.deltaScale) > 0.5: + if abs(camera.deltaScale) > 0.01: let p0 = (camera.scalePivot - (windowSize * 0.5)) / camera.scale - camera.scale = max(camera.scale + camera.delta_scale * dt, config.min_scale) + camera.scale *= 1.0 + camera.delta_scale * dt * config.scroll_speed + camera.scale = max(camera.scale, config.min_scale) let p1 = (camera.scalePivot - (windowSize * 0.5)) / camera.scale camera.position += p0 - p1