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) (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}]

View File

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

View File

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