1 # A camera module that wraps around raylib's built-in Camera2D
9 anchor=Vector2(0.5, 0.5),
14 func begin_drawing(c:Camera)
16 if c.shake > Num32(1.0)
17 pos += Vector2(c.shake, 0).rotated(random.num32(0, Num32.TAU))
21 offset=Vector2(c.anchor.x * Num32(GetScreenWidth()), c.anchor.y * Num32(GetScreenHeight())),
27 DrawCircleV(c.target, 10, Color(0xff,0,0))
28 len := (Num32(50.)*(Num32(1.) _min_ c.forward.length()))
29 DrawCircleV(c.target + len*c.forward.norm(), 10, Color(0xff,0xff,0,0x80))
31 func end_drawing(c:Camera)
34 func update(c:&Camera, dt:Num32)
35 len := (Num32(50.)*(Num32(1.) _min_ c.forward.length()))
36 c.pos = c.pos.mix(c.target + len*c.forward.norm(), 0.9)
37 c.shake -= dt*Num32(2.0)
39 func add_shake(c:&Camera, amount:Num32)
40 c.shake = (c.shake.exp() + amount).log() or Num32(0)
42 func follow(c:&Camera, pos:Vector2)
43 if not pos.dist(c.target).near(0, 1e-2, 1e-2)
44 c.forward = c.forward.mix((pos - c.target).norm(), .05)