aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2025-11-09 23:51:55 +0000
committerGene Pasquet <dev@etenil.net>2025-11-10 00:36:35 +0000
commit913f1d745d887367f081ebb5250774771d7f56e1 (patch)
treec50724bb8330ab6e37646046f0e4eac907e7e494
parent678123574311d0c07937b0b308ddad253f0f3e52 (diff)
Display tiles correctly
-rw-r--r--src/game.scm21
-rw-r--r--src/tilemap.scm12
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))))