Add step! function

This commit is contained in:
oakes
2014-01-17 15:18:02 -05:00
parent 6f9c8a4ebd
commit 52ab737a32
2 changed files with 28 additions and 13 deletions

View File

@@ -1,20 +1,25 @@
(in-ns 'play-clj.core) (in-ns 'play-clj.core)
(defn ^:private update-stage!
[{:keys [^Stage renderer ui-listeners]} entities]
(doseq [^Actor a (.getActors renderer)]
(.remove a))
(doseq [{:keys [object]} entities]
(when (isa? (type object) Actor)
(.addActor renderer object)
(doseq [listener ui-listeners]
(.addListener ^Actor object listener))))
(remove-input! renderer)
(add-input! renderer))
(defn ^:private update-screen! (defn ^:private update-screen!
([{:keys [world g2dp-listener]}] ([{:keys [world g2dp-listener]}]
(when (isa? (type world) World) (when (isa? (type world) World)
(.setContactListener ^World world g2dp-listener))) (.setContactListener ^World world g2dp-listener)))
([{:keys [renderer ui-listeners]} entities] ([{:keys [renderer] :as screen} entities]
(when (isa? (type renderer) Stage) (cond
(doseq [^Actor a (.getActors ^Stage renderer)] (isa? (type renderer) Stage)
(.remove a)) (update-stage! screen entities))))
(doseq [{:keys [object]} entities]
(when (isa? (type object) Actor)
(.addActor ^Stage renderer object)
(doseq [listener ui-listeners]
(.addListener ^Actor object listener))))
(remove-input! renderer)
(add-input! renderer))))
; tiled maps ; tiled maps
@@ -213,6 +218,16 @@
(render! screen) (render! screen)
(draw! screen entities))) (draw! screen entities)))
(defn step!
[{:keys [world time-step velocity-iterations position-iterations]
:or {time-step (/ 1 60) velocity-iterations 10 position-iterations 10}}
entities]
(assert world)
(cond
(isa? (type world) World)
(.step ^World world time-step velocity-iterations position-iterations))
entities)
; cameras ; cameras
(defn orthographic* (defn orthographic*

View File

@@ -18,8 +18,8 @@
object#)) object#))
(defmacro box-2d! (defmacro box-2d!
[{:keys [^World world]} k & options] [screen k & options]
`(u/call! ^World ~world ~k ~@options)) `(u/call! ^World (:world ~screen) ~k ~@options))
(defn contact-listener (defn contact-listener
[{:keys [on-begin-contact on-end-contact on-post-solve on-pre-solve]} execute-fn!] [{:keys [on-begin-contact on-end-contact on-post-solve on-pre-solve]} execute-fn!]