diff options
| -rw-r--r-- | src/game.scm | 21 | ||||
| -rw-r--r-- | src/tilemap.scm | 12 |
2 files changed, 20 insertions, 13 deletions
diff --git a/src/game.scm b/src/game.scm index 193af38..086c2b9 100644 --- a/src/game.scm +++ b/src/game.scm @@ -62,24 +62,29 @@ (define *level* (load-tilemap "assets/level-0.tmx")) (define *level-tileset-texture* (sdl2:create-texture-from-surface *renderer* (tileset-image (tilemap-tileset *level*)))) -(define (draw-tile target tileset tile-id) +(define (draw-tile target tileset tile-id row-num col-num) (let ((tile (tileset-tile tileset tile-id))) - (sdl2:render-copy! *renderer* *level-tileset-texture* (tile-rect tile) - (tile-rect tile)))) + (sdl2:make-rect (* col-num (tileset-tileheight tileset)) + (* row-num (tileset-tilewidth tileset)) + (tileset-tilewidth tileset) + (tileset-tileheight tileset))))) -(define (draw-tilemap-rows draw-fn rows) +(define (draw-tilemap-rows draw-fn rows row-num) (unless (null? rows) - (map draw-fn (car rows)) - (draw-tilemap-row draw-fn (cdr rows)))) + (for-each (lambda (tile-id col-num) (draw-fn tile-id row-num col-num)) + (car rows) + (iota (length (car rows)))) + (draw-tilemap-rows draw-fn (cdr rows) (+ row-num 1)))) (define (draw-tilemap target tilemap) (let ((map-layer (layer-map (list-ref (tilemap-layers tilemap) 0))) (tileset (tilemap-tileset tilemap))) (draw-tilemap-rows - (lambda (tile-id) (draw-tile target tileset tile-id)) - map-layer))) + (lambda (tile-id row-num col-num) (draw-tile target tileset tile-id row-num col-num)) + map-layer + 0))) (set! (sdl2:render-draw-color *renderer*) +background-color+) (sdl2:render-clear! *renderer*) diff --git a/src/tilemap.scm b/src/tilemap.scm index 8d0379b..6f6c3ef 100644 --- a/src/tilemap.scm +++ b/src/tilemap.scm @@ -148,12 +148,14 @@ (define (tileset-tile tileset tile-id) ;; Use the tileset's columns setting and the tileheight/tilewidth to ;; find the tile's x,y location and create a rect - (let* ((tile-width (tileset-tilewidth tileset)) + (let* ((tile-num (- tile-id 1)) ; tile-id starts at 1! + (tile-width (tileset-tilewidth tileset)) (tile-height (tileset-tileheight tileset)) - (tile-x (modulo tile-id (tileset-columns tileset))) - (tile-y (inexact->exact (floor (/ tile-id (tileset-columns tileset))))) - (x (* tile-x tile-width)) - (y (* tile-y tile-height))) + (tile-x (modulo tile-num (tileset-columns tileset))) + (tile-y (inexact->exact (floor (/ tile-num (tileset-columns tileset))))) + (x (+ (* tile-x tile-width) tile-x)) + (y (+ (* tile-y tile-height) tile-y))) + (pp (list tile-x tile-y x y)) (make-tile id: tile-id rect: (sdl2:make-rect x y tile-width tile-height)))) |
