From 71799fef35079b9e5ada641213acdcc231fc0a35 Mon Sep 17 00:00:00 2001 From: Bryce Covert Date: Sat, 25 Jul 2015 16:56:30 -0700 Subject: [PATCH] did a proper solution, because elements were never removed. --- src/play_clj/core_listeners.clj | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/play_clj/core_listeners.clj b/src/play_clj/core_listeners.clj index 13e62b2..b9cdec4 100644 --- a/src/play_clj/core_listeners.clj +++ b/src/play_clj/core_listeners.clj @@ -191,17 +191,19 @@ in the `screen`." (.setCamera camera) (.setWorldSize (. camera viewportWidth) (. camera viewportHeight))))) ([{:keys [^Stage renderer ui-listeners]} [entities]] - (doseq [^Actor a (.getActors renderer)] - #_(.remove a)) - (doseq [e (vals entities) ] - (let [object (:object e)] - (when (isa? (type object) Actor) - (when-not (.hasParent object) - (.addActor renderer object)) + (let [actor-set (->> entities + vals + (map :object) + (filter #(isa? (type %) Actor)) + set)] + (doseq [^Actor a (clojure.set/difference (set (.getActors renderer)) actor-set )] + (.remove a)) + (doseq [object (clojure.set/difference actor-set (set (.getActors renderer)) ) ] + (.addActor renderer object) (doseq [[_ listener] ui-listeners] - (.addListener ^Actor object listener))))) - (remove-input! renderer) - (add-input! renderer))) + (.addListener ^Actor object listener))) + (remove-input! renderer) + (add-input! renderer)))) (defmulti update-physics! (fn [screen & [entities]] (some-> screen :world class .getName))