aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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