Add tiled map interop macros
This commit is contained in:
@@ -10,7 +10,8 @@
|
||||
[com.badlogic.gdx.input GestureDetector
|
||||
GestureDetector$GestureListener]
|
||||
[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
|
||||
BatchTiledMapRenderer
|
||||
HexagonalTiledMapRenderer
|
||||
|
||||
@@ -1,6 +1,101 @@
|
||||
(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)
|
||||
|
||||
@@ -18,85 +113,24 @@
|
||||
(.setViewport renderer (. camera viewportWidth) (. camera viewportHeight)))
|
||||
(.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
|
||||
|
||||
(defn orthographic-camera
|
||||
[]
|
||||
(OrthographicCamera.))
|
||||
|
||||
(defmacro orthographic-camera!
|
||||
[screen k & options]
|
||||
`(u/call! ^OrthographicCamera (:camera ~screen) ~k ~@options))
|
||||
|
||||
(defn perspective-camera
|
||||
[]
|
||||
(PerspectiveCamera.))
|
||||
|
||||
(defmacro perspective-camera!
|
||||
[screen k & options]
|
||||
`(u/call! ^PerspectiveCamera (:camera ~screen) ~k ~@options))
|
||||
|
||||
(defn size!
|
||||
[{:keys [^OrthographicCamera camera]} width height]
|
||||
(assert camera)
|
||||
@@ -126,34 +160,3 @@
|
||||
[screen x y]
|
||||
(move-x! screen x)
|
||||
(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