From c577295c3e024f50ad88ad539a9bd14754b994f4 Mon Sep 17 00:00:00 2001 From: Travis Shears Date: Thu, 23 Apr 2026 22:24:39 +0200 Subject: [PATCH] get player rendering --- two_player_cleaning_game/main.fnl | 9 ++-- .../src/entities/player.fnl | 26 ++++++----- .../src/levels/tutorial.fnl | 43 +++++++++++++------ 3 files changed, 51 insertions(+), 27 deletions(-) diff --git a/two_player_cleaning_game/main.fnl b/two_player_cleaning_game/main.fnl index 3e5f11e..6cf9098 100644 --- a/two_player_cleaning_game/main.fnl +++ b/two_player_cleaning_game/main.fnl @@ -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) diff --git a/two_player_cleaning_game/src/entities/player.fnl b/two_player_cleaning_game/src/entities/player.fnl index a2741f0..76f132e 100644 --- a/two_player_cleaning_game/src/entities/player.fnl +++ b/two_player_cleaning_game/src/entities/player.fnl @@ -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 diff --git a/two_player_cleaning_game/src/levels/tutorial.fnl b/two_player_cleaning_game/src/levels/tutorial.fnl index 3405209..9882aca 100644 --- a/two_player_cleaning_game/src/levels/tutorial.fnl +++ b/two_player_cleaning_game/src/levels/tutorial.fnl @@ -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