Merge pull request #63 from tsoding/feel-improvements

Feel improvements
pull/70/head
Alexey Kutepov 5 years ago committed by GitHub
commit e631ef22d7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -83,13 +83,13 @@ type Flashlight = object
deltaRadius: float32
const
INITIAL_FL_DELTA_RADIUS = 100.0
FL_DELTA_RADIUS_DECELERATION = 5.0
INITIAL_FL_DELTA_RADIUS = 250.0
FL_DELTA_RADIUS_DECELERATION = 10.0
proc update(flashlight: var Flashlight, dt: float32) =
flashlight.radius = max(0.0, flashlight.radius + flashlight.deltaRadius * dt)
if abs(flashlight.deltaRadius) > 0.5:
if abs(flashlight.deltaRadius) > 1.0:
flashlight.deltaRadius -= flashlight.deltaRadius * FL_DELTA_RADIUS_DECELERATION * dt
if flashlight.isEnabled:
@ -301,7 +301,10 @@ proc main() =
if mouse.drag:
let delta = world(camera, mouse.prev) - world(camera, mouse.curr)
camera.position += delta
camera.velocity = delta * config.dragVelocityFactor
# delta is the distance the mouse traveled in a single
# frame. To turn the velocity into units/second we need to
# multiple it by FPS.
camera.velocity = delta * config.fps.float
mouse.prev = mouse.curr
@ -355,12 +358,14 @@ proc main() =
flashlight.deltaRadius += INITIAL_FL_DELTA_RADIUS
else:
camera.deltaScale += config.scrollSpeed
camera.scalePivot = mouse.curr
of Button5: # Scoll down
if (xev.xkey.state and ControlMask) > 0.uint32 and flashlight.isEnabled:
flashlight.deltaRadius -= INITIAL_FL_DELTA_RADIUS
else:
camera.deltaScale -= config.scrollSpeed
camera.scalePivot = mouse.curr
else:
discard

@ -2,15 +2,13 @@ import macros, strutils
type Config* = object
scrollSpeed*: float
dragVelocityFactor*: float
dragFriction*: float
scaleFriction*: float
fps*: int
const defaultConfig* = Config(
scrollSpeed: 1.0,
dragVelocityFactor: 10.0,
dragFriction: 2.0,
scrollSpeed: 1.5,
dragFriction: 6.0,
scaleFriction: 4.0,
fps: 60
)

@ -3,7 +3,7 @@ import config
import la
import image
const VELOCITY_THRESHOLD = 10.0
const VELOCITY_THRESHOLD = 15.0
type Mouse* = object
curr*: Vec2f
@ -15,6 +15,7 @@ type Camera* = object
velocity*: Vec2f
scale*: float32
deltaScale*: float
scalePivot*: Vec2f
proc world*(camera: Camera, v: Vec2f): Vec2f =
v / camera.scale
@ -22,9 +23,9 @@ proc world*(camera: Camera, v: Vec2f): Vec2f =
proc update*(camera: var Camera, config: Config, dt: float, mouse: Mouse, image: Image,
windowSize: Vec2f) =
if abs(camera.deltaScale) > 0.5:
let p0 = (mouse.curr - (windowSize * 0.5)) / camera.scale
let p0 = (camera.scalePivot - (windowSize * 0.5)) / camera.scale
camera.scale = max(camera.scale + camera.delta_scale * dt, 0.01)
let p1 = (mouse.curr - (windowSize * 0.5)) / camera.scale
let p1 = (camera.scalePivot - (windowSize * 0.5)) / camera.scale
camera.position += p0 - p1
camera.delta_scale -= camera.delta_scale * dt * config.scale_friction

Loading…
Cancel
Save