From 7f0f46d643ba9cdccca1277b0350a82106942e05 Mon Sep 17 00:00:00 2001 From: oakes Date: Tue, 31 Dec 2013 15:44:00 -0500 Subject: [PATCH] Make set-screen an entity --- common/src/play_clj/core.clj | 16 +++++++++------- common/src/play_clj/core_2d.clj | 4 ++-- common/src/play_clj/core_render.clj | 6 +++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/common/src/play_clj/core.clj b/common/src/play_clj/core.clj index 999fd91..f6b083d 100644 --- a/common/src/play_clj/core.clj +++ b/common/src/play_clj/core.clj @@ -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}] diff --git a/common/src/play_clj/core_2d.clj b/common/src/play_clj/core_2d.clj index 467d730..0a5e2f3 100644 --- a/common/src/play_clj/core_2d.clj +++ b/common/src/play_clj/core_2d.clj @@ -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))) diff --git a/common/src/play_clj/core_render.clj b/common/src/play_clj/core_render.clj index 0bbac84..cb5e2c6 100644 --- a/common/src/play_clj/core_render.clj +++ b/common/src/play_clj/core_render.clj @@ -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)