(local beholder (require "libs/beholder")) (local color (require "src/colors.fnl")) ;; Camera System (local camera {:x 0 :y 0}) (fn camera.draw25 [self] (love.graphics.origin) (love.graphics.translate (* -1 self.x) (* -1 self.y))) (fn camera.load [self] (let [screen self.pool.data.screen] (beholder.observe "PLAYER.MOVED" (lambda [player] (let [(ox oy) (player:origin-pt)] ;; Update camera to follow player (keep player centered on screen) (set self.x (- ox (/ screen.canvas-w 2))) (set self.y (- oy (/ screen.canvas-h 2)))))))) (fn camera.draw89 [self] (love.graphics.origin)) ; reset camera translation (fn camera.draw99 [self] (let [screen self.pool.data.screen canvas self.pool.data.canvas] (love.graphics.setCanvas) ; reset to root canvas (color:reset-color) (love.graphics.draw canvas 0 0 0 screen.scale screen.scale))) (fn camera.draw1 [self] (let [screen self.pool.data.screen canvas self.pool.data.canvas] ; use canvas (love.graphics.setCanvas canvas) ; (love.graphics.setCanvas {: canvas :stencil true}) ; clear the screen (love.graphics.clear) (color.set-color :cream) (love.graphics.rectangle "fill" 0 0 screen.canvas-w screen.canvas-h))) camera