Go back to more conventional design

This commit is contained in:
oakes
2013-12-31 19:15:22 -05:00
parent 5a08215fd5
commit 36b988cbbb
4 changed files with 46 additions and 93 deletions

View File

@@ -16,32 +16,12 @@
(load "core_global") (load "core_global")
(load "core_render") (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* (defn defscreen*
[{:keys [on-show on-render on-dispose on-hide on-pause on-resize on-resume [{:keys [on-show on-render on-dispose on-hide on-pause on-resize on-resume
state renderer camera] state renderer camera]
:as options}] :as options}]
(let [screen (atom {}) (let [screen (atom {})
entities (atom '()) dummy-fn (fn [s])
dummy-fn (fn [s e])
on-show (or on-show dummy-fn) on-show (or on-show dummy-fn)
on-render (or on-render dummy-fn) on-render (or on-render dummy-fn)
on-hide (or on-hide dummy-fn) on-hide (or on-hide dummy-fn)
@@ -50,43 +30,22 @@
on-resume (or on-resume dummy-fn)] on-resume (or on-resume dummy-fn)]
(proxy [Screen] [] (proxy [Screen] []
(show [] (show []
(let [screen-map (swap! screen assoc (on-show (swap! screen assoc
:renderer (create-renderer renderer) :renderer (create-renderer renderer)
:camera (create-camera camera) :camera (create-camera camera)
:width (game :width) :width (game :width)
:height (game :height) :height (game :height)
:total-time 0 :total-time 0
:delta-time 0)] :delta-time 0
(->> (on-show screen-map @entities) :save #(swap! screen assoc :entities %))))
(transform-entities screen-map)
(reset! entities))))
(render [delta-time] (render [delta-time]
(let [total-time (+ (:total-time @screen) delta-time) (on-render (swap! screen assoc
screen-map (swap! screen assoc :total-time (+ (:total-time @screen) delta-time)
:total-time total-time :delta-time delta-time)))
:delta-time delta-time)] (hide [] (on-hide @screen))
(->> (on-render screen-map @entities) (pause [] (on-pause @screen))
(execute-entities screen-map) (resize [w h] (on-resize (swap! screen assoc :width w :height h)))
(reset! entities)))) (resume [] (on-resume @screen)))))
(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))))))
(defmacro defscreen (defmacro defscreen
[name & {:keys [] :as options}] [name & {:keys [] :as options}]
@@ -95,15 +54,17 @@
(defn defgame* (defn defgame*
[{:keys [on-create]}] [{:keys [on-create]}]
(proxy [Game] [] (proxy [Game] []
(create [] (create [] (on-create this))))
(execute-entities nil (on-create this)))))
(defmacro defgame (defmacro defgame
[name & {:keys [] :as options}] [name & {:keys [] :as options}]
`(def ~name (defgame* ~options))) `(def ~name (defgame* ~options)))
(defn set-screen (defn set-screen!
[^Game game ^Screen screen] [^Game game ^Screen screen]
(fn [] (.setScreen game screen))
(.setScreen game screen)
nil)) (defn save!
[{:keys [save]} entities]
(save entities)
entities)

View File

@@ -10,14 +10,14 @@
(defmethod sprite-batch BatchTiledMapRenderer [screen] (defmethod sprite-batch BatchTiledMapRenderer [screen]
(.getSpriteBatch (:renderer screen))) (.getSpriteBatch (:renderer screen)))
(defn draw [screen {:keys [image x y width height] :as entity}] (defn draw! [screen entities]
(fn [] (let [batch (sprite-batch screen)]
(let [batch (sprite-batch screen)] (.begin batch)
(.begin batch) (doseq [{:keys [image x y width height]} entities]
(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))))
(.end batch)) (.end batch))
entity)) entities)
; textures ; textures

View File

@@ -2,15 +2,13 @@
; graphics ; graphics
(defn clear (defn clear!
([] ([]
(clear 0 0 0 0)) (clear! 0 0 0 0))
([r g b a] ([r g b a]
(fn [] (doto (Gdx/gl)
(doto (Gdx/gl) (.glClearColor r g b a)
(.glClearColor r g b a) (.glClear GL20/GL_COLOR_BUFFER_BIT))))
(.glClear GL20/GL_COLOR_BUFFER_BIT))
nil)))
(defn game* (defn game*
[key] [key]

View File

@@ -12,13 +12,11 @@
(assert (number? tile-size)) (assert (number? tile-size))
(float (/ 1 tile-size))) (float (/ 1 tile-size)))
(defn render-tiled-map (defn render-tiled-map!
[{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}] [{:keys [^BatchTiledMapRenderer renderer ^Camera camera]}]
(fn [] (doto renderer
(doto renderer (.setView camera)
(.setView camera) .render))
.render)
nil))
(defn tiled-map-layer (defn tiled-map-layer
[{:keys [^BatchTiledMapRenderer renderer]} layer] [{:keys [^BatchTiledMapRenderer renderer]} layer]
@@ -55,16 +53,12 @@
(defmethod create-camera :perspective [_] (defmethod create-camera :perspective [_]
(PerspectiveCamera.)) (PerspectiveCamera.))
(defn resize-camera (defn resize-camera!
[{:keys [^Camera camera]} width height] [{:keys [^Camera camera]} width height]
(fn [] (.setToOrtho camera false width height))
(.setToOrtho camera false width height)
nil))
(defn move-camera (defn move-camera!
[{:keys [^Camera camera]} x y] [{:keys [^Camera camera]} x y]
(fn [] (when x (set! (. (. camera position) x) x))
(when x (set! (. (. camera position) x) x)) (when y (set! (. (. camera position) y) y))
(when y (set! (. (. camera position) y) y)) (.update camera))
(.update camera)
nil))