Refactor and add render functions
This commit is contained in:
69
common/src/play_clj/render.clj
Normal file
69
common/src/play_clj/render.clj
Normal file
@@ -0,0 +1,69 @@
|
||||
(ns play-clj.render)
|
||||
|
||||
(in-ns 'play-clj.core)
|
||||
|
||||
; tiled map 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}]
|
||||
(assert (string? file))
|
||||
(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))))
|
||||
|
||||
(defn render-tiled-map!
|
||||
[{:keys [^BatchTiledMapRenderer renderer ^OrthographicCamera camera]}]
|
||||
(.setView renderer camera)
|
||||
(.render renderer))
|
||||
|
||||
; cameras
|
||||
|
||||
(defmulti create-camera identity :default :orthographic)
|
||||
|
||||
(defmethod create-camera :orthographic [_]
|
||||
(OrthographicCamera.))
|
||||
|
||||
(defmethod create-camera :perspective [_]
|
||||
(PerspectiveCamera.))
|
||||
|
||||
(defn resize-camera!
|
||||
[{:keys [^Camera camera]} width height]
|
||||
(.setToOrtho camera false width height))
|
||||
|
||||
; draw entities
|
||||
|
||||
(defmulti sprite-batch (fn [screen] (class (:renderer screen))) :default nil)
|
||||
|
||||
(defmethod sprite-batch nil [screen]
|
||||
(SpriteBatch.))
|
||||
|
||||
(defmethod sprite-batch BatchTiledMapRenderer [screen]
|
||||
(.getSpriteBatch (:renderer screen)))
|
||||
|
||||
(defn draw-entities!
|
||||
[screen entities]
|
||||
(let [batch (sprite-batch screen)]
|
||||
(.begin batch)
|
||||
(doseq [{:keys [image x y width height]} entities]
|
||||
(when (and image x y width height)
|
||||
(.draw batch image x y width height)))
|
||||
(.end batch)))
|
||||
Reference in New Issue
Block a user