robot_cleaning_game/game/src/systems/camera.fnl
2026-05-10 17:02:37 +02:00

39 lines
1.2 KiB
Fennel

(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