render: tiled: Parse out tile flip bits.
authorDavid Thompson <davet@gnu.org>
Wed, 8 May 2019 21:29:24 +0000 (17:29 -0400)
committerDavid Thompson <davet@gnu.org>
Wed, 8 May 2019 21:29:24 +0000 (17:29 -0400)
* chickadee/render/tiled.scm (load-tile-map): Parse out the 3 flip
  bits from each tile id.

chickadee/render/tiled.scm

index 8e8b8f4..1a4c200 100644 (file)
     (if (attr node 'source)
         (parse-external-tileset node)
         (parse-internal-tileset node (first-gid node))))
-  (define (tile-gid->map-tile gid tilesets x y tile-width tile-height)
-    (let* ((tileset (find (lambda (t)
+  (define (tile-gid->map-tile raw-gid tilesets x y tile-width tile-height)
+    ;; The top 3 bits of the tile gid are flags for various types of
+    ;; flipping.
+    ;;
+    ;; TODO: Respect the flipping settings.
+    (let* ((flipped-horizontally? (> (logand raw-gid #x80000000) 0))
+           (flipped-vertically? (> (logand raw-gid #x40000000) 0))
+           (flipped-diagonally? (> (logand raw-gid #x20000000) 0))
+           ;; Remove the upper 3 bits to get the true tile id.
+           (gid (logand raw-gid #x1FFFFFFF))
+           (tileset (find (lambda (t)
                             (and (>= gid (tileset-first-gid t))
                                  (< gid (+ (tileset-first-gid t)
                                            (tileset-size t)))))