Change camera/renderer creation process

This commit is contained in:
oakes
2014-01-08 00:24:25 -05:00
parent 64903142ef
commit e9658884e6
3 changed files with 41 additions and 46 deletions

View File

@@ -28,6 +28,7 @@
{:type :actor :object obj}) {:type :actor :object obj})
(load "core_2d") (load "core_2d")
(load "core_deprecated")
(load "core_global") (load "core_global")
(load "core_render") (load "core_render")
@@ -46,16 +47,12 @@
(remove nil?) (remove nil?)
(reset! entities))) (reset! entities)))
create-renderer-fn! #(swap! screen assoc :renderer (renderer %)) create-renderer-fn! #(swap! screen assoc :renderer (renderer %))
create-camera-fn! #(swap! screen assoc :camera (camera %)) update-fn! #(swap! screen merge %)]
update-fn! #(swap! screen assoc
:renderer (renderer (:renderer %))
:camera (camera (:camera %)))]
{:show (fn [] {:show (fn []
(->> (swap! screen assoc (->> (swap! screen assoc
:total-time 0 :total-time 0
:delta-time 0 :delta-time 0
:create-renderer-fn! create-renderer-fn! :create-renderer-fn! create-renderer-fn!
:create-camera-fn! create-camera-fn!
:update-fn! update-fn!) :update-fn! update-fn!)
(execute-fn! on-show))) (execute-fn! on-show)))
:render (fn [delta-time] :render (fn [delta-time]
@@ -104,11 +101,3 @@
(defn update! (defn update!
[{:keys [update-fn!]} & {:keys [] :as args}] [{:keys [update-fn!]} & {:keys [] :as args}]
(update-fn! args)) (update-fn! args))
(defn create-renderer!
[{:keys [create-renderer-fn!]} & {:keys [] :as args}]
(:renderer (create-renderer-fn! args)))
(defn create-camera!
[{:keys [create-camera-fn!]} & {:keys [] :as args}]
(:camera (create-camera-fn! args)))

View File

@@ -0,0 +1,12 @@
(in-ns 'play-clj.core)
(defn create-renderer!
[{:keys [create-renderer-fn!]} & {:keys [] :as args}]
(:renderer (create-renderer-fn! args)))
(defmulti renderer :type :default nil)
(defmethod renderer nil [opts])
(defmethod renderer :stage [_]
(Stage.))

View File

@@ -1,16 +1,6 @@
(in-ns 'play-clj.core) (in-ns 'play-clj.core)
; renderers ; rendering
(defn load-tiled-map
[{:keys [file]}]
(assert (string? file))
(.load (TmxMapLoader.) file))
(defn unit-scale
[{:keys [tile-size]}]
(assert (number? tile-size))
(float (/ 1 tile-size)))
(defn render! (defn render!
[{:keys [renderer ^Camera camera]}] [{:keys [renderer ^Camera camera]}]
@@ -50,37 +40,41 @@
[screen layer x y] [screen layer x y]
(.getCell ^TiledMapTileLayer (tiled-map-layer screen layer) x y)) (.getCell ^TiledMapTileLayer (tiled-map-layer screen layer) x y))
(defmulti renderer :type :default nil) ; renderers
(defmethod renderer nil [opts]) (defn tiled-map
[s]
(if (string? s)
(.load (TmxMapLoader.) s)
s))
(defmethod renderer :orthogonal-tiled-map [opts] (defn tiled-map-renderer
(OrthogonalTiledMapRenderer. ^TiledMap (load-tiled-map opts) [renderer-type path pixels-per-tile]
^double (unit-scale opts))) (let [^TiledMap tmap (tiled-map path)
^double unit-scale (/ 1 pixels-per-tile)]
(case renderer-type
:orthogonal
(OrthogonalTiledMapRenderer. tmap unit-scale)
:isometric
(IsometricTiledMapRenderer. tmap unit-scale)
:isometric-staggered
(IsometricStaggeredTiledMapRenderer. tmap unit-scale)
:hexagonal
(IsometricTiledMapRenderer. tmap unit-scale)
nil)))
(defmethod renderer :isometric-tiled-map [opts] (defn stage
(IsometricTiledMapRenderer. ^TiledMap (load-tiled-map opts) []
^double (unit-scale opts)))
(defmethod renderer :isometric-staggered-tiled-map [opts]
(IsometricStaggeredTiledMapRenderer. ^TiledMap (load-tiled-map opts)
^double (unit-scale opts)))
(defmethod renderer :hexagonal-tiled-map [opts]
(HexagonalTiledMapRenderer. ^TiledMap (load-tiled-map opts)
^double (unit-scale opts)))
(defmethod renderer :stage [_]
(Stage.)) (Stage.))
; cameras ; cameras
(defmulti camera identity :default :orthographic) (defn orthographic-camera
[]
(defmethod camera :orthographic [_]
(OrthographicCamera.)) (OrthographicCamera.))
(defmethod camera :perspective [_] (defn perspective-camera
[]
(PerspectiveCamera.)) (PerspectiveCamera.))
(defn resize-camera! (defn resize-camera!