Map parsing implementation

This commit is contained in:
Daniel Ziltener 2020-09-12 18:20:58 +02:00
parent 3a03af4b12
commit 4d0fdbfc39
3 changed files with 38 additions and 3 deletions

View File

@ -0,0 +1,26 @@
{:name :tilemap
:validator
[:map {:closed true}
[:map/width number?]
[:map/height number?]
[:map/tilesets
[:sequential
[:map {:closed true}
[:tileset/start-index number?]
[:tileset/name keyword?]]]]
[:tiles/width number?]
[:tiles/height number?]
[:map/layers
[:sequential
[:map {:closed true}
[:layer/id number?]
[:layer/name string?]
[:layer/width number?]
[:layer/height number?]
[:layer/tiles
[:sequential
[:map {:closed true}
[:horizontal? boolean?]
[:vertical? boolean?]
[:diagonal? boolean?]
[:id number?]]]]]]]]}

View File

@ -1,6 +1,6 @@
{:name :tileset
:validator
[:map
[:map {:closed true}
[:tileset/name keyword?]
[:tiles/width integer?]
[:tiles/height integer?]

View File

@ -61,17 +61,26 @@
{:tileset/start-index (-> entry :attrs :firstgid)
:tileset/name (:tileset/name (load-tileset (-> entry :attrs :source)))})
entries)
:layer (recur (update tilemap-map :layers conj
:layer (recur (update tilemap-map :map/layers conj
{:layer/id (-> entry :attrs :id)
:layer/name (-> entry :attrs :name)
:layer/width (-> entry :attrs :width)
:layer/height (-> entry :attrs :height)
:layer/tiles (-> entry :content first :content first)})
:layer/tiles (->> entry :content first :content first (map ts/tile-id->map))})
entries)
nil tilemap-map))
(defn load-tilemap* [filename]
{:post [(validation/validate :tilemap %)]}
(let [raw-tilemap (load-raw-tilemap filename)]
(-> raw-tilemap
tilemap-basemap
(tilemap-layer (:content raw-tilemap)))))
(defstate tilemap
:start (atom {}))
(defn load-tilemap [filename]
(let [tilemap-map (load-tilemap* filename)]
(reset! tilemap tilemap-map)
tilemap-map))