Make set-screen an entity

This commit is contained in:
oakes
2013-12-31 15:44:00 -05:00
parent f66b8dd597
commit 7f0f46d643
3 changed files with 14 additions and 12 deletions

View File

@@ -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}]

View File

@@ -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)))

View File

@@ -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)