Make set-screen an entity
This commit is contained in:
@@ -14,6 +14,9 @@
|
|||||||
|
|
||||||
(defmulti execute-entity :command :default :draw)
|
(defmulti execute-entity :command :default :draw)
|
||||||
|
|
||||||
|
(defmethod execute-entity :set-screen [{:keys [^Game game ^Screen screen]}]
|
||||||
|
(.setScreen game screen))
|
||||||
|
|
||||||
(load "core_2d")
|
(load "core_2d")
|
||||||
(load "core_global")
|
(load "core_global")
|
||||||
(load "core_render")
|
(load "core_render")
|
||||||
@@ -31,7 +34,7 @@
|
|||||||
(defn execute-entities
|
(defn execute-entities
|
||||||
[screen entities]
|
[screen entities]
|
||||||
(->> entities
|
(->> entities
|
||||||
(map #(assoc % :screen screen))
|
(map #(assoc % :screen-map screen))
|
||||||
(map execute-entity)
|
(map execute-entity)
|
||||||
(remove #(not (:persistent? %)))
|
(remove #(not (:persistent? %)))
|
||||||
doall))
|
doall))
|
||||||
@@ -76,14 +79,13 @@
|
|||||||
[name & {:keys [] :as options}]
|
[name & {:keys [] :as options}]
|
||||||
`(def ~name (defscreen* ~options)))
|
`(def ~name (defscreen* ~options)))
|
||||||
|
|
||||||
(defn set-screen!
|
|
||||||
[^Game game ^Screen screen]
|
|
||||||
(.setScreen game screen))
|
|
||||||
|
|
||||||
(defn defgame*
|
(defn defgame*
|
||||||
[{:keys [start-screen]}]
|
[{:keys [on-create]}]
|
||||||
(proxy [Game] []
|
(proxy [Game] []
|
||||||
(create [] (when start-screen (set-screen! this start-screen)))))
|
(create []
|
||||||
|
(->> (on-create this)
|
||||||
|
transform-entities
|
||||||
|
(execute-entities nil)))))
|
||||||
|
|
||||||
(defmacro defgame
|
(defmacro defgame
|
||||||
[name & {:keys [] :as options}]
|
[name & {:keys [] :as options}]
|
||||||
|
|||||||
@@ -10,8 +10,8 @@
|
|||||||
(defmethod sprite-batch BatchTiledMapRenderer [screen]
|
(defmethod sprite-batch BatchTiledMapRenderer [screen]
|
||||||
(.getSpriteBatch (:renderer screen)))
|
(.getSpriteBatch (:renderer screen)))
|
||||||
|
|
||||||
(defmethod execute-entity :draw [{:keys [screen image x y width height] :as entity}]
|
(defmethod execute-entity :draw [{:keys [screen-map image x y width height] :as entity}]
|
||||||
(let [batch (sprite-batch screen)]
|
(let [batch (sprite-batch screen-map)]
|
||||||
(.begin batch)
|
(.begin batch)
|
||||||
(when (and image x y width height)
|
(when (and image x y width height)
|
||||||
(.draw batch image (float x) (float y) (float width) (float height)))
|
(.draw batch image (float x) (float y) (float width) (float height)))
|
||||||
|
|||||||
@@ -12,9 +12,9 @@
|
|||||||
(assert (number? tile-size))
|
(assert (number? tile-size))
|
||||||
(float (/ 1 tile-size)))
|
(float (/ 1 tile-size)))
|
||||||
|
|
||||||
(defmethod execute-entity :render-tiled-map [{:keys [screen] :as entity}]
|
(defmethod execute-entity :render-tiled-map [{:keys [screen-map] :as entity}]
|
||||||
(doto (:renderer screen)
|
(doto (:renderer screen-map)
|
||||||
(.setView (:camera screen))
|
(.setView (:camera screen-map))
|
||||||
.render)
|
.render)
|
||||||
entity)
|
entity)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user