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