Add tiled map interop macros
This commit is contained in:
@@ -10,7 +10,8 @@
|
|||||||
[com.badlogic.gdx.input GestureDetector
|
[com.badlogic.gdx.input GestureDetector
|
||||||
GestureDetector$GestureListener]
|
GestureDetector$GestureListener]
|
||||||
[com.badlogic.gdx.maps MapLayer MapLayers]
|
[com.badlogic.gdx.maps MapLayer MapLayers]
|
||||||
[com.badlogic.gdx.maps.tiled TiledMap TiledMapTileLayer TmxMapLoader]
|
[com.badlogic.gdx.maps.tiled TiledMap TiledMapTileLayer
|
||||||
|
TiledMapTileLayer$Cell TmxMapLoader]
|
||||||
[com.badlogic.gdx.maps.tiled.renderers
|
[com.badlogic.gdx.maps.tiled.renderers
|
||||||
BatchTiledMapRenderer
|
BatchTiledMapRenderer
|
||||||
HexagonalTiledMapRenderer
|
HexagonalTiledMapRenderer
|
||||||
|
|||||||
@@ -1,6 +1,101 @@
|
|||||||
(in-ns 'play-clj.core)
|
(in-ns 'play-clj.core)
|
||||||
|
|
||||||
; rendering
|
; tiled maps
|
||||||
|
|
||||||
|
(defn tiled-map
|
||||||
|
[s]
|
||||||
|
(if (string? s)
|
||||||
|
(.load (TmxMapLoader.) s)
|
||||||
|
s))
|
||||||
|
|
||||||
|
(defmacro tiled-map!
|
||||||
|
[{:keys [^BatchTiledMapRenderer renderer]} k & options]
|
||||||
|
`(u/call! ^TiledMap (.getMap ~renderer) ~k ~@options))
|
||||||
|
|
||||||
|
(defn tiled-map-layers
|
||||||
|
[{:keys [^BatchTiledMapRenderer renderer]}]
|
||||||
|
(assert renderer)
|
||||||
|
(let [layers (-> renderer .getMap .getLayers)]
|
||||||
|
(for [^long i (range (.getCount layers))]
|
||||||
|
(.get layers i))))
|
||||||
|
|
||||||
|
(defn tiled-map-layer
|
||||||
|
[screen layer]
|
||||||
|
(if (isa? (type layer) MapLayer)
|
||||||
|
layer
|
||||||
|
(->> (tiled-map-layers screen)
|
||||||
|
(drop-while #(not= layer (.getName ^MapLayer %)))
|
||||||
|
first)))
|
||||||
|
|
||||||
|
(defmacro tiled-map-layer!
|
||||||
|
[screen layer-name k & options]
|
||||||
|
`(u/call! ^TiledMapTileLayer (tiled-map-layer ~screen ~layer-name)
|
||||||
|
~k ~@options))
|
||||||
|
|
||||||
|
(defn tiled-map-cell
|
||||||
|
[screen layer x y]
|
||||||
|
(.getCell ^TiledMapTileLayer (tiled-map-layer screen layer) x y))
|
||||||
|
|
||||||
|
(defmacro tiled-map-cell!
|
||||||
|
[screen layer x y k & options]
|
||||||
|
`(u/call! ^TiledMapTileLayer$Cell (tiled-map-cell ~screen ~layer ~x ~y)
|
||||||
|
~k ~@options))
|
||||||
|
|
||||||
|
(defn ^:private refresh-renderer!
|
||||||
|
[{:keys [renderer ui-listeners]} entities]
|
||||||
|
(when (isa? (type renderer) Stage)
|
||||||
|
(doseq [^Actor a (.getActors ^Stage renderer)]
|
||||||
|
(.remove a))
|
||||||
|
(doseq [{:keys [object]} entities]
|
||||||
|
(when (isa? (type object) Actor)
|
||||||
|
(.addActor ^Stage renderer object)
|
||||||
|
(doseq [listener ui-listeners]
|
||||||
|
(.addListener ^Actor object listener))))
|
||||||
|
(remove-input! renderer)
|
||||||
|
(add-input! renderer)))
|
||||||
|
|
||||||
|
; renderers
|
||||||
|
|
||||||
|
(defn orthogonal-tiled-map
|
||||||
|
[path unit]
|
||||||
|
(OrthogonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
||||||
|
|
||||||
|
(defmacro orthogonal-tiled-map!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^OrthogonalTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
||||||
|
|
||||||
|
(defn isometric-tiled-map
|
||||||
|
[path unit]
|
||||||
|
(IsometricTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
||||||
|
|
||||||
|
(defmacro isometric-tiled-map!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^IsometricTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
||||||
|
|
||||||
|
(defn isometric-staggered-tiled-map
|
||||||
|
[path unit]
|
||||||
|
(IsometricStaggeredTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
||||||
|
|
||||||
|
(defmacro isometric-staggered-tiled-map!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^IsometricStaggeredTiledMapRenderer (:renderer ~screen)
|
||||||
|
~k ~@options))
|
||||||
|
|
||||||
|
(defn hexagonal-tiled-map
|
||||||
|
[path unit]
|
||||||
|
(HexagonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
||||||
|
|
||||||
|
(defmacro hexagonal-tiled-map!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^HexagonalTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
||||||
|
|
||||||
|
(defn stage
|
||||||
|
[]
|
||||||
|
(Stage.))
|
||||||
|
|
||||||
|
(defmacro stage!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^Stage (:renderer ~screen) ~k ~@options))
|
||||||
|
|
||||||
(defmulti render! #(-> % :renderer type) :default nil)
|
(defmulti render! #(-> % :renderer type) :default nil)
|
||||||
|
|
||||||
@@ -18,85 +113,24 @@
|
|||||||
(.setViewport renderer (. camera viewportWidth) (. camera viewportHeight)))
|
(.setViewport renderer (. camera viewportWidth) (. camera viewportHeight)))
|
||||||
(.draw renderer))
|
(.draw renderer))
|
||||||
|
|
||||||
(defn tiled-map-layers
|
|
||||||
[{:keys [^BatchTiledMapRenderer renderer]}]
|
|
||||||
(assert renderer)
|
|
||||||
(let [layers (-> renderer .getMap .getLayers)]
|
|
||||||
(for [^long i (range (.getCount layers))]
|
|
||||||
(.get layers i))))
|
|
||||||
|
|
||||||
(defn tiled-map-layer
|
|
||||||
[screen layer]
|
|
||||||
(if (isa? (type layer) MapLayer)
|
|
||||||
layer
|
|
||||||
(->> (tiled-map-layers screen)
|
|
||||||
(drop-while #(not= layer (.getName ^MapLayer %)))
|
|
||||||
first)))
|
|
||||||
|
|
||||||
(defn tiled-map-layer-name
|
|
||||||
[screen layer]
|
|
||||||
(.getName ^MapLayer (tiled-map-layer screen layer)))
|
|
||||||
|
|
||||||
(defn tiled-map-layer-names
|
|
||||||
[screen]
|
|
||||||
(for [layer (tiled-map-layers screen)]
|
|
||||||
(tiled-map-layer-name screen layer)))
|
|
||||||
|
|
||||||
(defn tiled-map-cell
|
|
||||||
[screen layer x y]
|
|
||||||
(.getCell ^TiledMapTileLayer (tiled-map-layer screen layer) x y))
|
|
||||||
|
|
||||||
(defn ^:private refresh-renderer!
|
|
||||||
[{:keys [renderer ui-listeners]} entities]
|
|
||||||
(when (isa? (type renderer) Stage)
|
|
||||||
(doseq [^Actor a (.getActors ^Stage renderer)]
|
|
||||||
(.remove a))
|
|
||||||
(doseq [{:keys [object]} entities]
|
|
||||||
(when (isa? (type object) Actor)
|
|
||||||
(.addActor ^Stage renderer object)
|
|
||||||
(doseq [listener ui-listeners]
|
|
||||||
(.addListener ^Actor object listener))))
|
|
||||||
(remove-input! renderer)
|
|
||||||
(add-input! renderer)))
|
|
||||||
|
|
||||||
; renderers
|
|
||||||
|
|
||||||
(defn tiled-map
|
|
||||||
[s]
|
|
||||||
(if (string? s)
|
|
||||||
(.load (TmxMapLoader.) s)
|
|
||||||
s))
|
|
||||||
|
|
||||||
(defn orthogonal-tiled-map
|
|
||||||
[path unit]
|
|
||||||
(OrthogonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
|
||||||
|
|
||||||
(defn isometric-tiled-map
|
|
||||||
[path unit]
|
|
||||||
(IsometricTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
|
||||||
|
|
||||||
(defn isometric-staggered-tiled-map
|
|
||||||
[path unit]
|
|
||||||
(IsometricStaggeredTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
|
||||||
|
|
||||||
(defn hexagonal-tiled-map
|
|
||||||
[path unit]
|
|
||||||
(HexagonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit))
|
|
||||||
|
|
||||||
(defn stage
|
|
||||||
[]
|
|
||||||
(Stage.))
|
|
||||||
|
|
||||||
; cameras
|
; cameras
|
||||||
|
|
||||||
(defn orthographic-camera
|
(defn orthographic-camera
|
||||||
[]
|
[]
|
||||||
(OrthographicCamera.))
|
(OrthographicCamera.))
|
||||||
|
|
||||||
|
(defmacro orthographic-camera!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^OrthographicCamera (:camera ~screen) ~k ~@options))
|
||||||
|
|
||||||
(defn perspective-camera
|
(defn perspective-camera
|
||||||
[]
|
[]
|
||||||
(PerspectiveCamera.))
|
(PerspectiveCamera.))
|
||||||
|
|
||||||
|
(defmacro perspective-camera!
|
||||||
|
[screen k & options]
|
||||||
|
`(u/call! ^PerspectiveCamera (:camera ~screen) ~k ~@options))
|
||||||
|
|
||||||
(defn size!
|
(defn size!
|
||||||
[{:keys [^OrthographicCamera camera]} width height]
|
[{:keys [^OrthographicCamera camera]} width height]
|
||||||
(assert camera)
|
(assert camera)
|
||||||
@@ -126,34 +160,3 @@
|
|||||||
[screen x y]
|
[screen x y]
|
||||||
(move-x! screen x)
|
(move-x! screen x)
|
||||||
(move-y! screen y))
|
(move-y! screen y))
|
||||||
|
|
||||||
; interop
|
|
||||||
|
|
||||||
(defmacro orthogonal-tiled-map!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^OrthogonalTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro isometric-tiled-map!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^IsometricTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro isometric-staggered-tiled-map!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^IsometricStaggeredTiledMapRenderer (:renderer ~screen)
|
|
||||||
~k ~@options))
|
|
||||||
|
|
||||||
(defmacro hexagonal-tiled-map!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^HexagonalTiledMapRenderer (:renderer ~screen) ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro stage!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^Stage (:renderer ~screen) ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro orthographic-camera!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^OrthographicCamera (:camera ~screen) ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro perspective-camera!
|
|
||||||
[screen k & options]
|
|
||||||
`(u/call! ^PerspectiveCamera (:camera ~screen) ~k ~@options))
|
|
||||||
|
|||||||
Reference in New Issue
Block a user