Allow adding/removing entities
This commit is contained in:
@@ -37,7 +37,16 @@
|
|||||||
(swap! screen assoc
|
(swap! screen assoc
|
||||||
:renderer (create-renderer renderer)
|
:renderer (create-renderer renderer)
|
||||||
:camera (create-camera camera)
|
:camera (create-camera camera)
|
||||||
:total-time 0)
|
:total-time 0
|
||||||
|
:entities []
|
||||||
|
:add-entity (fn [entity]
|
||||||
|
(->> entity
|
||||||
|
(conj (:entities @screen))
|
||||||
|
(swap! screen assoc :entities)))
|
||||||
|
:del-entity (fn [entity]
|
||||||
|
(->> (:entities @screen)
|
||||||
|
(remove #(= % entity))
|
||||||
|
(swap! screen assoc :entities))))
|
||||||
(on-show @screen))
|
(on-show @screen))
|
||||||
(render [delta-time]
|
(render [delta-time]
|
||||||
(swap! screen assoc :total-time (+ (:total-time @screen) delta-time))
|
(swap! screen assoc :total-time (+ (:total-time @screen) delta-time))
|
||||||
@@ -52,6 +61,14 @@
|
|||||||
[name & {:keys [] :as options}]
|
[name & {:keys [] :as options}]
|
||||||
`(def ~name (defscreen* ~options)))
|
`(def ~name (defscreen* ~options)))
|
||||||
|
|
||||||
|
(defn add-entity!
|
||||||
|
[{:keys [add-entity]} e]
|
||||||
|
(add-entity e))
|
||||||
|
|
||||||
|
(defn remove-entity!
|
||||||
|
[{:keys [del-entity]} e]
|
||||||
|
(del-entity e))
|
||||||
|
|
||||||
(defn set-screen!
|
(defn set-screen!
|
||||||
[^Game game ^Screen screen]
|
[^Game game ^Screen screen]
|
||||||
(.setScreen game screen))
|
(.setScreen game screen))
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
|
|
||||||
; draw entities
|
; draw entities
|
||||||
|
|
||||||
(defmulti sprite-batch (fn [screen] (class (:renderer screen))) :default nil)
|
(defmulti sprite-batch #(-> % :renderer class) :default nil)
|
||||||
|
|
||||||
(defmethod sprite-batch nil [screen]
|
(defmethod sprite-batch nil [screen]
|
||||||
(SpriteBatch.))
|
(SpriteBatch.))
|
||||||
@@ -58,10 +58,13 @@
|
|||||||
(.getSpriteBatch (:renderer screen)))
|
(.getSpriteBatch (:renderer screen)))
|
||||||
|
|
||||||
(defn draw-entities!
|
(defn draw-entities!
|
||||||
[screen entities]
|
([screen]
|
||||||
(let [batch (sprite-batch screen)]
|
(draw-entities! screen (-> screen :entities)))
|
||||||
(.begin batch)
|
([screen entities]
|
||||||
(doseq [{:keys [image x y width height]} entities]
|
(let [batch (sprite-batch screen)]
|
||||||
(when (and image x y width height)
|
(.begin batch)
|
||||||
(.draw batch image x y width height)))
|
(doseq [{:keys [image x y width height]} entities]
|
||||||
(.end batch)))
|
(when (and image x y width height)
|
||||||
|
(.draw batch image x y width height)))
|
||||||
|
(.end batch)
|
||||||
|
batch)))
|
||||||
|
|||||||
Reference in New Issue
Block a user