 
 ; 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]

    (for [^long i (range (.getCount layers))]
      (.get layers i))))

(defn tiled-map-layer
  [screen layer]
  (if (isa? (type layer) MapLayer)
    layer


; renderers

(defn orthogonal-tiled-map*
  [path 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*
  [path 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*
  [path 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*
  [path 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*
  []
  (Stage.))

(defmacro stage
  [& options]
  `(let [object# (stage*)]
     (u/calls! ^Stage object# ~@options)
     object#))

(defmacro stage!
  [screen k & options]
