diff --git a/common/src/play_clj/core.clj b/common/src/play_clj/core.clj index cb5fe13..5c8cda3 100644 --- a/common/src/play_clj/core.clj +++ b/common/src/play_clj/core.clj @@ -35,7 +35,7 @@ (proxy [Screen] [] (show [] (swap! screen assoc - :renderer (when renderer (renderer)) + :renderer (create-renderer renderer) :camera (create-camera camera) :total-time 0) (on-show @screen)) diff --git a/common/src/play_clj/render.clj b/common/src/play_clj/render.clj index 9d5fc08..976e858 100644 --- a/common/src/play_clj/render.clj +++ b/common/src/play_clj/render.clj @@ -2,39 +2,37 @@ (in-ns 'play-clj.core) -; tiled map renderers +; renderers -(defmulti create-tiled-map-renderer :type :default :orthogonal) - -(defmethod create-tiled-map-renderer :orthogonal [options] - (OrthogonalTiledMapRenderer. (:map options) (:unit-scale options))) - -(defmethod create-tiled-map-renderer :isometric [options] - (IsometricTiledMapRenderer. (:map options) (:unit-scale options))) - -(defmethod create-tiled-map-renderer :isometric-staggered [options] - (IsometricStaggeredTiledMapRenderer. (:map options) (:unit-scale options))) - -(defmethod create-tiled-map-renderer :hexagonal [options] - (HexagonalTiledMapRenderer. (:map options) (:unit-scale options))) - -(defn tiled-map - [& {:keys [file tile-size type] :as options}] +(defn load-tiled-map + [{:keys [file]}] (assert (string? file)) + (.load (TmxMapLoader.) file)) + +(defn unit-scale + [{:keys [tile-size]}] (assert (number? tile-size)) - (fn [] - (let [tiled-map (.load (TmxMapLoader.) file) - unit-scale (float (/ 1 tile-size)) - options (assoc options - :map tiled-map - :unit-scale unit-scale)] - (create-tiled-map-renderer options)))) + (float (/ 1 tile-size))) (defn render-tiled-map! [{:keys [^BatchTiledMapRenderer renderer ^OrthographicCamera camera]}] (.setView renderer camera) (.render renderer)) +(defmulti create-renderer :type :default :orthogonal-tiled-map) + +(defmethod create-renderer :orthogonal-tiled-map [opts] + (OrthogonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) + +(defmethod create-renderer :isometric-tiled-map [opts] + (IsometricTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) + +(defmethod create-renderer :isometric-staggered-tiled-map [opts] + (IsometricStaggeredTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) + +(defmethod create-renderer :hexagonal-tiled-map [opts] + (HexagonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) + ; cameras (defmulti create-camera identity :default :orthographic)