aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGene Pasquet <dev@etenil.net>2025-06-21 03:03:17 +0100
committerGene Pasquet <dev@etenil.net>2025-06-21 03:03:17 +0100
commit4d9d7ea2b6f12f33eee9404b1cdff9f05b7fb32f (patch)
tree5081b4cd9b54a752e95c6f15ad426bee869877ca
parent8937277a79cc5a24b406cf15f411992ac2e7241f (diff)
Start coding tilemap parser
-rw-r--r--src/tilemap.scm54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/tilemap.scm b/src/tilemap.scm
new file mode 100644
index 0000000..a2833db
--- /dev/null
+++ b/src/tilemap.scm
@@ -0,0 +1,54 @@
+(module tilemap
+*
+(import scheme
+ (chicken io)
+ expat
+ defstruct)
+
+(defstruct tileset
+ tilewidth
+ tileheight
+ spacing
+ tilecount
+ columns
+ image)
+
+(defstruct layer
+ name
+ width
+ height
+ map)
+
+(defstruct object
+ name
+ type
+ x
+ y
+ width
+ height
+ properties)
+
+(defstruct tilemap
+ width
+ height
+ tilewidth
+ tileheight
+ tileset
+ layers
+ objects)
+
+(define (parse-tilemap string-tilemap)
+ (let ((parser (expat:make-parser))
+ (current-tag "")
+ (tilemap (tilemap)))
+ (expat:set-start-handler! parser (lambda (tag attrs)
+ (set! current-tag tag)))
+ (expat:set-end-handler! parser (lambda (tag) #f))
+ (expat:set-character-data-handler! parser (lambda (text) #f))))
+
+(define (load-tilemap file-name)
+ (call-with-input-file file-name
+ (lambda (port)
+ (parse-tilemap (read-string port)))))
+
+) ;; End tilemap module