From 52ab737a325536053c9bf97def92f3211bae5f26 Mon Sep 17 00:00:00 2001 From: oakes Date: Fri, 17 Jan 2014 15:18:02 -0500 Subject: [PATCH] Add step! function --- src/play_clj/core_graphics.clj | 37 ++++++++++++++++++++++++---------- src/play_clj/g2d_physics.clj | 4 ++-- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/src/play_clj/core_graphics.clj b/src/play_clj/core_graphics.clj index f2b4fc4..096bb60 100644 --- a/src/play_clj/core_graphics.clj +++ b/src/play_clj/core_graphics.clj @@ -1,20 +1,25 @@ (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! ([{:keys [world g2dp-listener]}] (when (isa? (type world) World) (.setContactListener ^World world g2dp-listener))) - ([{:keys [renderer ui-listeners]} entities] - (when (isa? (type renderer) Stage) - (doseq [^Actor a (.getActors ^Stage renderer)] - (.remove a)) - (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)))) + ([{:keys [renderer] :as screen} entities] + (cond + (isa? (type renderer) Stage) + (update-stage! screen entities)))) ; tiled maps @@ -213,6 +218,16 @@ (render! screen) (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 (defn orthographic* diff --git a/src/play_clj/g2d_physics.clj b/src/play_clj/g2d_physics.clj index d755357..627b70d 100644 --- a/src/play_clj/g2d_physics.clj +++ b/src/play_clj/g2d_physics.clj @@ -18,8 +18,8 @@ object#)) (defmacro box-2d! - [{:keys [^World world]} k & options] - `(u/call! ^World ~world ~k ~@options)) + [screen k & options] + `(u/call! ^World (:world ~screen) ~k ~@options)) (defn contact-listener [{:keys [on-begin-contact on-end-contact on-post-solve on-pre-solve]} execute-fn!]