Add initial scene2d support

This commit is contained in:
oakes
2013-12-31 21:42:56 -05:00
parent f295bbf20d
commit 3446cd0761
3 changed files with 56 additions and 28 deletions

View File

@@ -10,15 +10,15 @@
HexagonalTiledMapRenderer HexagonalTiledMapRenderer
IsometricStaggeredTiledMapRenderer IsometricStaggeredTiledMapRenderer
IsometricTiledMapRenderer IsometricTiledMapRenderer
OrthogonalTiledMapRenderer])) OrthogonalTiledMapRenderer]
[com.badlogic.gdx.scenes.scene2d Actor Stage]))
(load "core_2d") (load "core_2d")
(load "core_global") (load "core_global")
(load "core_render") (load "core_render")
(defn defscreen* (defn defscreen*
[{:keys [on-show on-render on-dispose on-hide on-pause on-resize on-resume [{:keys [on-show on-render on-dispose on-hide on-pause on-resize on-resume]
state renderer camera]
:as options}] :as options}]
(let [screen (atom {}) (let [screen (atom {})
dummy-fn (fn [s]) dummy-fn (fn [s])
@@ -31,13 +31,15 @@
(proxy [Screen] [] (proxy [Screen] []
(show [] (show []
(on-show (swap! screen assoc (on-show (swap! screen assoc
:renderer (create-renderer renderer)
:camera (create-camera camera)
:width (game :width) :width (game :width)
:height (game :height) :height (game :height)
:total-time 0 :total-time 0
:delta-time 0 :delta-time 0
:save #(swap! screen assoc :entities %)))) :set-entities #(swap! screen assoc :entities %)
:create-renderer #(swap! screen assoc
:renderer (renderer %))
:create-camera #(swap! screen assoc
:camera (camera %)))))
(render [delta-time] (render [delta-time]
(on-render (swap! screen assoc (on-render (swap! screen assoc
:total-time (+ (:total-time @screen) delta-time) :total-time (+ (:total-time @screen) delta-time)
@@ -64,7 +66,18 @@
[^Game game ^Screen screen] [^Game game ^Screen screen]
(.setScreen game screen)) (.setScreen game screen))
(defn save! (defn set-entities!
[{:keys [save]} entities] [{:keys [set-entities]} entities]
(save entities) (:entities (set-entities entities)))
(defn get-entities
[{:keys [entities]}]
entities) entities)
(defn create-renderer!
[{:keys [create-renderer]} & {:keys [] :as args}]
(:renderer (create-renderer args)))
(defn create-camera!
[{:keys [create-camera]} & {:keys [] :as args}]
(:camera (create-camera args)))

View File

@@ -11,12 +11,17 @@
(assert renderer) (assert renderer)
(.getSpriteBatch renderer)) (.getSpriteBatch renderer))
(defn draw! [screen entities] (defn draw! [{:keys [renderer]} entities]
(let [batch (sprite-batch screen)] (assert renderer)
(let [batch (.getSpriteBatch renderer)]
(.begin batch) (.begin batch)
(doseq [{:keys [image x y width height]} entities] (doseq [e entities]
(when (and image x y width height) (cond
(.draw batch image (float x) (float y) (float width) (float height)))) (map? e)
(let [{:keys [image x y width height]} e]
(.draw batch image (float x) (float y) (float width) (float height)))
(isa? (type e) Actor)
(.draw e batch 1)))
(.end batch)) (.end batch))
entities) entities)

View File

@@ -12,12 +12,17 @@
(assert (number? tile-size)) (assert (number? tile-size))
(float (/ 1 tile-size))) (float (/ 1 tile-size)))
(defn render-tiled-map! (defn render!
[{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}] [{:keys [renderer ^Camera camera]}]
(assert (and renderer camera)) (assert renderer)
(doto renderer (cond
(.setView camera) (isa? (type renderer) BatchTiledMapRenderer)
.render)) (doto renderer
(.setView camera)
.render)
(isa? (type renderer) Stage)
(.draw renderer)
:else nil))
(defn tiled-map-layer (defn tiled-map-layer
[{:keys [^BatchTiledMapRenderer renderer]} layer] [{:keys [^BatchTiledMapRenderer renderer]} layer]
@@ -32,28 +37,33 @@
layer) layer)
(.getCell x y))) (.getCell x y)))
(defmulti create-renderer :type :default :orthogonal-tiled-map) (defmulti renderer :type :default nil)
(defmethod create-renderer :orthogonal-tiled-map [opts] (defmethod renderer nil [opts])
(defmethod renderer :orthogonal-tiled-map [opts]
(OrthogonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) (OrthogonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts)))
(defmethod create-renderer :isometric-tiled-map [opts] (defmethod renderer :isometric-tiled-map [opts]
(IsometricTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) (IsometricTiledMapRenderer. (load-tiled-map opts) (unit-scale opts)))
(defmethod create-renderer :isometric-staggered-tiled-map [opts] (defmethod renderer :isometric-staggered-tiled-map [opts]
(IsometricStaggeredTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) (IsometricStaggeredTiledMapRenderer. (load-tiled-map opts) (unit-scale opts)))
(defmethod create-renderer :hexagonal-tiled-map [opts] (defmethod renderer :hexagonal-tiled-map [opts]
(HexagonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts))) (HexagonalTiledMapRenderer. (load-tiled-map opts) (unit-scale opts)))
(defmethod renderer :stage [_]
(Stage.))
; cameras ; cameras
(defmulti create-camera identity :default :orthographic) (defmulti camera identity :default :orthographic)
(defmethod create-camera :orthographic [_] (defmethod camera :orthographic [_]
(OrthographicCamera.)) (OrthographicCamera.))
(defmethod create-camera :perspective [_] (defmethod camera :perspective [_]
(PerspectiveCamera.)) (PerspectiveCamera.))
(defn resize-camera! (defn resize-camera!