render: tiled: Add point->tile.
authorDavid Thompson <dthompson2@worcester.edu>
Tue, 4 Jun 2019 21:12:36 +0000 (17:12 -0400)
committerDavid Thompson <dthompson2@worcester.edu>
Tue, 4 Jun 2019 21:12:36 +0000 (17:12 -0400)
* chickadee/render/tiled.scm (point->tile): New procedure.
* doc/api.texi (Tiled): Document it.
* examples/tiled.scm: Render tile coordinates in bottom-left corner.

chickadee/render/tiled.scm
doc/api.texi
examples/tiled.scm

index 1fbdbe6..e51e3c0 100644 (file)
@@ -47,6 +47,7 @@
             tile-map-properties
             tile-map-rect
             tile-map-layer-ref
+            point->tile
 
             animation-frame?
             animation-frame-tile
        (else
         (loop (+ i 1)))))))
 
+(define (point->tile tile-map x y)
+  "Translate the pixel coordinates (X, Y) into tile coordinates."
+  (values (floor (/ x (tile-map-tile-width tile-map)))
+          (floor (/ y (tile-map-tile-height tile-map)))))
+
 (define (load-tile-map file-name)
   "Load the Tiled TMX formatted map in FILE-NAME."
   (define map-directory
index 3ea911b..5d7623b 100644 (file)
@@ -1612,6 +1612,11 @@ Return the layers of @var{tile-map}.
 Return the custom properties of @var{tile-map}.
 @end deffn
 
+@deffn {Procedure} point->tile tile-map x y
+Translate the pixel coordinates (@var{x}, @var{y}) into tile
+coordinates.
+@end deffn
+
 @deffn {Procedure} draw-tile-map tile-map [#:layers] [#:region] @
        [#:origin] [#:position] [#:scale] [#:rotation]
 
index 5ff2b7f..e6099df 100644 (file)
@@ -1,17 +1,23 @@
 (use-modules (chickadee)
              (chickadee math vector)
              (chickadee math rect)
+             (chickadee render font)
              (chickadee render tiled)
-             (ice-9 match))
+             (ice-9 format)
+             (ice-9 match)
+             (srfi srfi-11))
 
 (define map #f)
 (define camera #v(0.0 0.0))
+(define text-position #v(4.0 4.0))
+(define text "0, 0")
 
 (define (load)
   (set! map (load-tile-map "maps/example.tmx")))
 
 (define (draw alpha)
-  (draw-tile-map map #:position camera))
+  (draw-tile-map map #:position camera)
+  (draw-text text text-position))
 
 (define inc 8.0)
 (define (key-press key scancode modifiers repeat?)
     ('q (abort-game))
     (_ #t)))
 
+(define (mouse-move x y x-rel y-rel buttons)
+  (let-values (((tx ty) (point->tile map x y)))
+    (set! text (format #f "~d, ~d" tx ty))))
+
 (run-game #:window-width 320
           #:window-height 240
           #:window-title "tile map demo"
           #:load load
           #:draw draw
-          #:key-press key-press)
+          #:key-press key-press
+          #:mouse-move mouse-move)