aboutsummaryrefslogtreecommitdiff
path: root/renderer.scm
diff options
context:
space:
mode:
Diffstat (limited to 'renderer.scm')
-rw-r--r--renderer.scm45
1 files changed, 29 insertions, 16 deletions
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 ---