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

View file

@ -1,3 +1,4 @@
(local beholder (require "libs/beholder"))
(local colors (require "src/colors.fnl"))
(local levels (require "levels.fnl"))
(local assets (require "src/assets.fnl"))
@ -16,6 +17,10 @@
(. directions (+ (% section 8) 1)))
(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]
(set self.battery 100)
(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"
(colors:reset-color)
(love.graphics.draw
@ -44,15 +49,16 @@
(. self.quads (angle-to-direction player.rot))
self.x self.y)
;; draw player hitbox and direction line
(when state.debug
(colors:set-color :black)
(love.graphics.rectangle "line" self.x self.y self.w self.h)
(love.graphics.push)
(let [ox (+ self.x (/ 25 2)) oy (+ self.y (/ 25 2))]
(love.graphics.translate ox oy)
(love.graphics.rotate self.rot)
(love.graphics.line 0 0 35 0))
(love.graphics.pop)))
; (when state.debug
; (colors:set-color :black)
; (love.graphics.rectangle "line" self.x self.y self.w self.h)
; (love.graphics.push)
; (let [ox (+ self.x (/ 25 2)) oy (+ self.y (/ 25 2))]
; (love.graphics.translate ox oy)
; (love.graphics.rotate self.rot)
; (love.graphics.line 0 0 35 0))
; (love.graphics.pop))
)
player

View file

@ -7,22 +7,34 @@
(lambda gen-renderer [screen canvas]
(let [renderer {}]
(fn renderer.draw [self]
(color.set-color :cream)
(love.graphics.rectangle "fill" 0 0 screen.canvas-w screen.canvas-h))
(fn renderer.post-draw [self]
(love.graphics.setCanvas)
(fn renderer.draw99 [self]
; (print "draw99 drawing canvas to screen")
(love.graphics.pop) ; undo camera translation
(love.graphics.setCanvas) ; reset to root canvas
(color:reset-color)
(love.graphics.draw canvas 0 0 0 screen.scale screen.scale))
(fn renderer.pre-draw [self]
(fn renderer.draw1 [self]
; use canvas
(love.graphics.setCanvas canvas)
; 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))
(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)
(fn load [screen]
@ -31,13 +43,16 @@
pool (nata.new {
; :groups {
; gravity = {filter = {'gravity'}},
; },
:systems [
(gen-renderer screen canvas)
]})]
; :post-draw {:filter [:post-draw]}
; }
; :systems [
; (gen-camera screen)
; ]
})]
(pool:queue (gen-renderer screen canvas))
(pool:queue player)
pool
))
(pool:queue (gen-camera screen))
pool))
{
: load