get player rendering

This commit is contained in:
Travis Shears 2026-04-23 22:24:39 +02:00
parent c4c33e4726
commit c577295c3e
Signed by: travisshears
GPG key ID: CB9BF1910F3F7469
3 changed files with 51 additions and 27 deletions

View file

@ -175,7 +175,9 @@
(love.window.setMode screen.screen-w screen.screen-h) (love.window.setMode screen.screen-w screen.screen-h)
; (tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h)) ; (tset screen :canvas (love.graphics.newCanvas screen.canvas-w screen.canvas-h))
(set pool (tutorial.load screen)) (set pool (tutorial.load screen))
(pool:flush)
(pool:emit :load :tutorial) (pool:emit :load :tutorial)
; (utils.debug-print pool)
; (utils.debug-print world) ; (utils.debug-print world)
; (load-assets) ; (load-assets)
; (load-level :tutorial) ; (load-level :tutorial)
@ -299,9 +301,10 @@ while 1 do love.event.push('stdin', io.read('*line')) end") :start))
; (obj:draw))) ; (obj:draw)))
(fn love.draw [] (fn love.draw []
(pool:emit :pre-draw) (for [i 1 99 1]
(pool:emit :draw) (let [draw-trigger (.. "draw" i)]
(pool:emit :post-draw)) (pool:emit draw-trigger))))
; (fn love.draw [] ; (fn love.draw []
; (love.graphics.setCanvas screen.canvas) ; (love.graphics.setCanvas screen.canvas)
; (love.graphics.clear) ; (love.graphics.clear)

View file

@ -1,3 +1,4 @@
(local beholder (require "libs/beholder"))
(local colors (require "src/colors.fnl")) (local colors (require "src/colors.fnl"))
(local levels (require "levels.fnl")) (local levels (require "levels.fnl"))
(local assets (require "src/assets.fnl")) (local assets (require "src/assets.fnl"))
@ -16,6 +17,10 @@
(. directions (+ (% section 8) 1))) (. directions (+ (% section 8) 1)))
(local player { :x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0 }) (local player { :x 50 :y 50 :w 25 :h 25 :speed 80 :battery 100 :rot 0 })
(fn player.update [self dt]
(beholder.trigger "PLAYER.POS" self.x self.y))
(fn player.load [self level-key] (fn player.load [self level-key]
(set self.battery 100) (set self.battery 100)
(set self.x (. levels :levels level-key :spawns :player-1 :x)) (set self.x (. levels :levels level-key :spawns :player-1 :x))
@ -36,7 +41,7 @@
})) }))
) )
(fn player.draw [self state] (fn player.draw50 [self]
"draw player sprite and hitbox" "draw player sprite and hitbox"
(colors:reset-color) (colors:reset-color)
(love.graphics.draw (love.graphics.draw
@ -44,15 +49,16 @@
(. self.quads (angle-to-direction player.rot)) (. self.quads (angle-to-direction player.rot))
self.x self.y) self.x self.y)
;; draw player hitbox and direction line ;; draw player hitbox and direction line
(when state.debug ; (when state.debug
(colors:set-color :black) ; (colors:set-color :black)
(love.graphics.rectangle "line" self.x self.y self.w self.h) ; (love.graphics.rectangle "line" self.x self.y self.w self.h)
(love.graphics.push) ; (love.graphics.push)
(let [ox (+ self.x (/ 25 2)) oy (+ self.y (/ 25 2))] ; (let [ox (+ self.x (/ 25 2)) oy (+ self.y (/ 25 2))]
(love.graphics.translate ox oy) ; (love.graphics.translate ox oy)
(love.graphics.rotate self.rot) ; (love.graphics.rotate self.rot)
(love.graphics.line 0 0 35 0)) ; (love.graphics.line 0 0 35 0))
(love.graphics.pop))) ; (love.graphics.pop))
)
player player

View file

@ -7,22 +7,34 @@
(lambda gen-renderer [screen canvas] (lambda gen-renderer [screen canvas]
(let [renderer {}] (let [renderer {}]
(fn renderer.draw [self] (fn renderer.draw99 [self]
(color.set-color :cream) ; (print "draw99 drawing canvas to screen")
(love.graphics.rectangle "fill" 0 0 screen.canvas-w screen.canvas-h)) (love.graphics.pop) ; undo camera translation
(fn renderer.post-draw [self] (love.graphics.setCanvas) ; reset to root canvas
(love.graphics.setCanvas)
(color:reset-color) (color:reset-color)
(love.graphics.draw canvas 0 0 0 screen.scale screen.scale)) (love.graphics.draw canvas 0 0 0 screen.scale screen.scale))
(fn renderer.pre-draw [self] (fn renderer.draw1 [self]
; use canvas ; use canvas
(love.graphics.setCanvas canvas) (love.graphics.setCanvas canvas)
; clear the screen ; clear the screen
(love.graphics.clear)) (love.graphics.clear)
(color.set-color :cream)
(love.graphics.rectangle "fill" 0 0 screen.canvas-w screen.canvas-h))
renderer)) renderer))
(lambda gen-camera [screen]
(let [camera {:x 0 :y 0}]
(fn camera.draw2 [self]
(love.graphics.push)
(love.graphics.translate (* -1 self.x) (* -1 self.y)))
(fn camera.load [self]
(beholder.observe "PLAYER.POS" (lambda [x y]
;; Update camera to follow player (keep player centered on screen)
(set self.x (- x (/ screen.canvas-w 2)))
(set self.y (- y (/ screen.canvas-h 2))))))
camera
))
; (local camera {:x 0 :y 0})
; (local debug true) ; (local debug true)
(fn load [screen] (fn load [screen]
@ -31,13 +43,16 @@
pool (nata.new { pool (nata.new {
; :groups { ; :groups {
; gravity = {filter = {'gravity'}}, ; gravity = {filter = {'gravity'}},
; }, ; :post-draw {:filter [:post-draw]}
:systems [ ; }
(gen-renderer screen canvas) ; :systems [
]})] ; (gen-camera screen)
; ]
})]
(pool:queue (gen-renderer screen canvas))
(pool:queue player) (pool:queue player)
pool (pool:queue (gen-camera screen))
)) pool))
{ {
: load : load