From 36b988cbbbc08ccc0f6b07d8832455ae1e16d267 Mon Sep 17 00:00:00 2001 From: oakes Date: Tue, 31 Dec 2013 19:15:22 -0500 Subject: [PATCH] Go back to more conventional design --- common/src/play_clj/core.clj | 87 ++++++++--------------------- common/src/play_clj/core_2d.clj | 14 ++--- common/src/play_clj/core_global.clj | 12 ++-- common/src/play_clj/core_render.clj | 26 ++++----- 4 files changed, 46 insertions(+), 93 deletions(-) diff --git a/common/src/play_clj/core.clj b/common/src/play_clj/core.clj index 4357933..030c7e6 100644 --- a/common/src/play_clj/core.clj +++ b/common/src/play_clj/core.clj @@ -16,32 +16,12 @@ (load "core_global") (load "core_render") -(defn wrap-entity - [screen entity] - (if (map? entity) - (draw screen entity) - entity)) - -(defn transform-entities - [screen entities] - (->> entities list flatten (remove nil?))) - -(defn execute-entities - [screen entities] - (->> entities - (transform-entities screen) - (map #(wrap-entity screen %)) - (map #(%)) - (remove nil?) - doall)) - (defn defscreen* [{:keys [on-show on-render on-dispose on-hide on-pause on-resize on-resume state renderer camera] :as options}] (let [screen (atom {}) - entities (atom '()) - dummy-fn (fn [s e]) + dummy-fn (fn [s]) on-show (or on-show dummy-fn) on-render (or on-render dummy-fn) on-hide (or on-hide dummy-fn) @@ -50,43 +30,22 @@ on-resume (or on-resume dummy-fn)] (proxy [Screen] [] (show [] - (let [screen-map (swap! screen assoc - :renderer (create-renderer renderer) - :camera (create-camera camera) - :width (game :width) - :height (game :height) - :total-time 0 - :delta-time 0)] - (->> (on-show screen-map @entities) - (transform-entities screen-map) - (reset! entities)))) + (on-show (swap! screen assoc + :renderer (create-renderer renderer) + :camera (create-camera camera) + :width (game :width) + :height (game :height) + :total-time 0 + :delta-time 0 + :save #(swap! screen assoc :entities %)))) (render [delta-time] - (let [total-time (+ (:total-time @screen) delta-time) - screen-map (swap! screen assoc - :total-time total-time - :delta-time delta-time)] - (->> (on-render screen-map @entities) - (execute-entities screen-map) - (reset! entities)))) - (hide [] - (->> (on-hide @screen @entities) - (execute-entities @screen) - (reset! entities))) - (pause [] - (->> (on-pause @screen @entities) - (execute-entities @screen) - (reset! entities))) - (resize [w h] - (let [screen-map (swap! screen assoc - :width w - :height h)] - (->> (on-resize screen-map @entities) - (execute-entities screen-map) - (reset! entities)))) - (resume [] - (->> (on-resume @screen @entities) - (execute-entities @screen) - (reset! entities)))))) + (on-render (swap! screen assoc + :total-time (+ (:total-time @screen) delta-time) + :delta-time delta-time))) + (hide [] (on-hide @screen)) + (pause [] (on-pause @screen)) + (resize [w h] (on-resize (swap! screen assoc :width w :height h))) + (resume [] (on-resume @screen))))) (defmacro defscreen [name & {:keys [] :as options}] @@ -95,15 +54,17 @@ (defn defgame* [{:keys [on-create]}] (proxy [Game] [] - (create [] - (execute-entities nil (on-create this))))) + (create [] (on-create this)))) (defmacro defgame [name & {:keys [] :as options}] `(def ~name (defgame* ~options))) -(defn set-screen +(defn set-screen! [^Game game ^Screen screen] - (fn [] - (.setScreen game screen) - nil)) + (.setScreen game screen)) + +(defn save! + [{:keys [save]} entities] + (save entities) + entities) diff --git a/common/src/play_clj/core_2d.clj b/common/src/play_clj/core_2d.clj index 261e7e2..ec73091 100644 --- a/common/src/play_clj/core_2d.clj +++ b/common/src/play_clj/core_2d.clj @@ -10,14 +10,14 @@ (defmethod sprite-batch BatchTiledMapRenderer [screen] (.getSpriteBatch (:renderer screen))) -(defn draw [screen {:keys [image x y width height] :as entity}] - (fn [] - (let [batch (sprite-batch screen)] - (.begin batch) +(defn draw! [screen entities] + (let [batch (sprite-batch screen)] + (.begin batch) + (doseq [{:keys [image x y width height]} entities] (when (and image x y width height) - (.draw batch image (float x) (float y) (float width) (float height))) - (.end batch)) - entity)) + (.draw batch image (float x) (float y) (float width) (float height)))) + (.end batch)) + entities) ; textures diff --git a/common/src/play_clj/core_global.clj b/common/src/play_clj/core_global.clj index a6f0995..7918ca1 100644 --- a/common/src/play_clj/core_global.clj +++ b/common/src/play_clj/core_global.clj @@ -2,15 +2,13 @@ ; graphics -(defn clear +(defn clear! ([] - (clear 0 0 0 0)) + (clear! 0 0 0 0)) ([r g b a] - (fn [] - (doto (Gdx/gl) - (.glClearColor r g b a) - (.glClear GL20/GL_COLOR_BUFFER_BIT)) - nil))) + (doto (Gdx/gl) + (.glClearColor r g b a) + (.glClear GL20/GL_COLOR_BUFFER_BIT)))) (defn game* [key] diff --git a/common/src/play_clj/core_render.clj b/common/src/play_clj/core_render.clj index a71afe3..1e37f21 100644 --- a/common/src/play_clj/core_render.clj +++ b/common/src/play_clj/core_render.clj @@ -12,13 +12,11 @@ (assert (number? tile-size)) (float (/ 1 tile-size))) -(defn render-tiled-map +(defn render-tiled-map! [{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}] - (fn [] - (doto renderer - (.setView camera) - .render) - nil)) + (doto renderer + (.setView camera) + .render)) (defn tiled-map-layer [{:keys [^BatchTiledMapRenderer renderer]} layer] @@ -55,16 +53,12 @@ (defmethod create-camera :perspective [_] (PerspectiveCamera.)) -(defn resize-camera +(defn resize-camera! [{:keys [^Camera camera]} width height] - (fn [] - (.setToOrtho camera false width height) - nil)) + (.setToOrtho camera false width height)) -(defn move-camera +(defn move-camera! [{:keys [^Camera camera]} x y] - (fn [] - (when x (set! (. (. camera position) x) x)) - (when y (set! (. (. camera position) y) y)) - (.update camera) - nil)) + (when x (set! (. (. camera position) x) x)) + (when y (set! (. (. camera position) y) y)) + (.update camera))