From 19a5db8606a82830a5ccd0ed46d8e0cf3c95db0a Mon Sep 17 00:00:00 2001 From: Gene Pasquet Date: Tue, 7 Apr 2026 23:36:12 +0100 Subject: Work on demos --- renderer.scm | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) (limited to 'renderer.scm') diff --git a/renderer.scm b/renderer.scm index e7daf11..b048bad 100644 --- a/renderer.scm +++ b/renderer.scm @@ -119,15 +119,26 @@ ;; --- Entity drawing --- + ;; #:color is (r g b) or (r g b a); used when no tile sprite is drawn. (define (draw-entity renderer camera tileset tileset-texture entity) - (let ((tile-id (entity-ref entity #:tile-id #f))) - (when tile-id - (sdl2:render-copy-ex! renderer tileset-texture - (tile-rect (tileset-tile tileset tile-id)) - (entity->screen-rect entity camera) - 0.0 - #f - (entity-flip entity))))) + (let ((tile-id (entity-ref entity #:tile-id #f)) + (color (entity-ref entity #:color #f))) + (cond + ((and tile-id tileset tileset-texture) + (sdl2:render-copy-ex! renderer tileset-texture + (tile-rect (tileset-tile tileset tile-id)) + (entity->screen-rect entity camera) + 0.0 + #f + (entity-flip entity))) + ((and (list? color) (>= (length color) 3)) + (let ((r (list-ref color 0)) + (g (list-ref color 1)) + (b (list-ref color 2)) + (a (if (>= (length color) 4) (list-ref color 3) 255))) + (set! (sdl2:render-draw-color renderer) (sdl2:make-color r g b a)) + (sdl2:render-fill-rect! renderer (entity->screen-rect entity camera)))) + (else #f)))) (define (draw-entities renderer camera tileset tileset-texture entities) (for-each @@ -161,15 +172,17 @@ ;; --- Scene drawing --- (define (render-scene! renderer scene) - (let ((camera (scene-camera scene)) - (tilemap (scene-tilemap scene)) - (tileset-texture (scene-tileset-texture scene)) - (entities (scene-entities scene))) + (let* ((camera (scene-camera scene)) + (tilemap (scene-tilemap scene)) + (scene-ts (scene-tileset scene)) + (tileset-texture (scene-tileset-texture scene)) + (entities (scene-entities scene)) + (tileset + (and tileset-texture + (or scene-ts (and tilemap (tilemap-tileset tilemap)))))) (when tilemap - (draw-tilemap renderer camera tileset-texture tilemap) - (when tileset-texture - (let ((tileset (tilemap-tileset tilemap))) - (draw-entities renderer camera tileset tileset-texture entities)))))) + (draw-tilemap renderer camera tileset-texture tilemap)) + (draw-entities renderer camera tileset tileset-texture entities))) ;; --- Debug drawing --- -- cgit v1.2.3