summaryrefslogtreecommitdiff
path: root/examples/tilemap.scm
diff options
context:
space:
mode:
authorDavid Thompson <dthompson@member.fsf.org>2013-07-06 22:18:42 -0400
committerDavid Thompson <dthompson@member.fsf.org>2013-07-06 22:18:42 -0400
commit7236dca74c9f7b832b21d2cbfa0106952f855977 (patch)
tree4e5c9299dd208341ed58b3ed6e8cfbe27daee9a9 /examples/tilemap.scm
parenta1da8e04d8e97ec5c74f0ac89a60dc0ba6f55ef6 (diff)
Display some random tiles in the tilemap demo.
Diffstat (limited to 'examples/tilemap.scm')
-rw-r--r--examples/tilemap.scm53
1 files changed, 28 insertions, 25 deletions
diff --git a/examples/tilemap.scm b/examples/tilemap.scm
index 1b1df2c..5a7ccea 100644
--- a/examples/tilemap.scm
+++ b/examples/tilemap.scm
@@ -29,25 +29,17 @@
(tiles map-layer-tiles))
(define draw-map-layer
- (let ((batch (make-sprite-batch)))
+ (let ((batch (make-sprite-batch 2000)))
(lambda (layer)
(with-sprite-batch batch
(do-ec (: y (map-layer-height layer))
(: x (map-layer-width layer))
(let ((tile (array-ref (map-layer-tiles layer) y x)))
- (sprite-batch-draw (texture-region-texture tile)
- (* x (map-layer-tile-width layer))
- (* y (map-layer-tile-height layer))
- (texture-region-width tile)
- (texture-region-height tile)
- #:u (texture-region-u tile)
- #:v (texture-region-v tile)
- #:u2 (texture-region-u2 tile)
- #:v2 (texture-region-v2 tile))))))))
+ (draw-sprite tile)))))))
;; A small 8x8 array of tile indices.
-(define map-width 8)
-(define map-height 8)
+(define map-width 32)
+(define map-height 32)
(define map-tiles
#2u32((00 01 01 01 01 01 01 02)
(16 17 17 17 17 17 17 18)
@@ -62,14 +54,25 @@
(define tile-height 32)
(define map #f)
-(define (tiles->texture-regions width height tileset tiles)
- (define (texture-region-at x y)
- (vector-ref tileset (array-ref tiles y x)))
+(define (random-map width height tileset)
+ (let ((tiles (make-array 0 height width))
+ (n (vector-length tileset)))
+ (do-ec (: y height) (: x width)
+ (array-set! tiles (random n) y x))
+ tiles))
- (let ((regions (list-ec (: y height)
+(define (tiles->sprites width height tile-width tile-height tileset tiles)
+ (define (build-sprite x y)
+ (let ((region (vector-ref tileset (array-ref tiles y x))))
+ (make-sprite region
+ #:position (vector (* x tile-width)
+ (* y tile-height))
+ #:anchor #(0 0))))
+
+ (let ((sprites (list-ec (: y height)
(list-ec (: x width)
- (texture-region-at x y)))))
- (list->array 2 regions)))
+ (build-sprite x y)))))
+ (list->array 2 sprites)))
(define (key-down key mod unicode)
(cond ((any-equal? key (keycode escape) (keycode q))
@@ -77,9 +80,7 @@
(quit))))
(define (render)
- (with-gl-push-matrix
- (gl-translate 100 100 0)
- (draw-map-layer map)))
+ (draw-map-layer map))
(define window-width 800)
(define window-height 600)
@@ -92,9 +93,11 @@
(let* ((texture (load-texture "images/tiles.png"))
(tileset (split-texture texture 32 32)))
(set! map (make-map-layer map-width map-height tile-width tile-height
- (tiles->texture-regions map-width
- map-height
- tileset
- map-tiles))))
+ (tiles->sprites map-width
+ map-height
+ tile-width
+ tile-height
+ tileset
+ (random-map map-width map-height tileset)))))
(run-game-loop)