Add initial scene2d support
This commit is contained in:
@@ -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)))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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!
|
||||||
|
|||||||
Reference in New Issue
Block a user