39 lines
1.2 KiB
Fennel
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
|