diff --git a/src/play_clj/core_render.clj b/src/play_clj/core_render.clj index e92fa0f..8b74577 100644 --- a/src/play_clj/core_render.clj +++ b/src/play_clj/core_render.clj @@ -2,12 +2,18 @@ ; tiled maps -(defn tiled-map +(defn tiled-map* [s] (if (string? s) (.load (TmxMapLoader.) s) s)) +(defmacro tiled-map + [s & options] + `(let [object# (tiled-map* ~s)] + (u/calls! ^TiledMap object# ~@options) + object#)) + (defmacro tiled-map! [{:keys [^BatchTiledMapRenderer renderer]} k & options] `(u/call! ^TiledMap (.getMap ~renderer) ~k ~@options)) @@ -19,7 +25,7 @@ (for [^long i (range (.getCount layers))] (.get layers i)))) -(defn tiled-map-layer +(defn tiled-map-layer* [screen layer] (if (isa? (type layer) MapLayer) layer @@ -27,14 +33,26 @@ (drop-while #(not= layer (.getName ^MapLayer %))) first))) +(defmacro tiled-map-layer + [screen layer & options] + `(let [object# (tiled-map-layer* ~screen ~layer)] + (u/calls! ^TiledMapTileLayer object# ~@options) + object#)) + (defmacro tiled-map-layer! [layer k & options] `(u/call! ^TiledMapTileLayer (cast TiledMapTileLayer ~layer) ~k ~@options)) -(defn tiled-map-cell +(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 & options] + `(let [object# (tiled-map-cell* ~screen ~layer ~x ~y)] + (u/calls! ^TiledMapTileLayer$Cell object# ~@options) + object#)) + (defmacro tiled-map-cell! [cell k & options] `(u/call! ^TiledMapTileLayer$Cell ~cell ~k ~@options)) @@ -54,43 +72,73 @@ ; renderers -(defn orthogonal-tiled-map +(defn orthogonal-tiled-map* [path unit] - (OrthogonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit)) + (OrthogonalTiledMapRenderer. ^TiledMap (tiled-map* path) ^double unit)) + +(defmacro orthogonal-tiled-map + [path unit & options] + `(let [object# (orthogonal-tiled-map* ~path ~unit)] + (u/calls! ^OrthogonalTiledMapRenderer object# ~@options) + object#)) (defmacro orthogonal-tiled-map! [screen k & options] `(u/call! ^OrthogonalTiledMapRenderer (:renderer ~screen) ~k ~@options)) -(defn isometric-tiled-map +(defn isometric-tiled-map* [path unit] - (IsometricTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit)) + (IsometricTiledMapRenderer. ^TiledMap (tiled-map* path) ^double unit)) + +(defmacro isometric-tiled-map + [path unit & options] + `(let [object# (isometric-tiled-map* ~path ~unit)] + (u/calls! ^IsometricTiledMapRenderer object# ~@options) + object#)) (defmacro isometric-tiled-map! [screen k & options] `(u/call! ^IsometricTiledMapRenderer (:renderer ~screen) ~k ~@options)) -(defn isometric-staggered-tiled-map +(defn isometric-staggered-tiled-map* [path unit] - (IsometricStaggeredTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit)) + (IsometricStaggeredTiledMapRenderer. ^TiledMap (tiled-map* path) ^double unit)) + +(defmacro isometric-staggered-tiled-map + [path unit & options] + `(let [object# (isometric-staggered-tiled-map* ~path ~unit)] + (u/calls! ^IsometricStaggeredTiledMapRenderer object# ~@options) + object#)) (defmacro isometric-staggered-tiled-map! [screen k & options] `(u/call! ^IsometricStaggeredTiledMapRenderer (:renderer ~screen) ~k ~@options)) -(defn hexagonal-tiled-map +(defn hexagonal-tiled-map* [path unit] - (HexagonalTiledMapRenderer. ^TiledMap (tiled-map path) ^double unit)) + (HexagonalTiledMapRenderer. ^TiledMap (tiled-map* path) ^double unit)) + +(defmacro hexagonal-tiled-map + [path unit & options] + `(let [object# (hexagonal-tiled-map* ~path ~unit)] + (u/calls! ^HexagonalTiledMapRenderer object# ~@options) + object#)) (defmacro hexagonal-tiled-map! [screen k & options] `(u/call! ^HexagonalTiledMapRenderer (:renderer ~screen) ~k ~@options)) -(defn stage +(defn stage* [] (Stage.)) +(defmacro stage + [& options] + `(let [object# (stage*)] + (u/calls! ^Stage object# ~@options) + object#)) + (defmacro stage! [screen k & options] `(u/call! ^Stage (:renderer ~screen) ~k ~@options)) @@ -113,10 +161,16 @@ ; cameras -(defn orthographic-camera +(defn orthographic-camera* [] (OrthographicCamera.)) +(defmacro orthographic-camera + [& options] + `(let [object# (orthographic-camera*)] + (u/calls! ^OrthographicCamera object# ~@options) + object#)) + (defmacro orthographic-camera! [screen k & options] `(u/call! ^OrthographicCamera (:camera ~screen) ~k ~@options)) @@ -125,6 +179,12 @@ [] (PerspectiveCamera.)) +(defmacro perspective-camera + [& options] + `(let [object# (perspective-camera*)] + (u/calls! ^PerspectiveCamera object# ~@options) + object#)) + (defmacro perspective-camera! [screen k & options] `(u/call! ^PerspectiveCamera (:camera ~screen) ~k ~@options))