From 78981350f9e39c11c8809b97b91345c18b314c01 Mon Sep 17 00:00:00 2001 From: oakes Date: Sat, 11 Jan 2014 12:53:37 -0500 Subject: [PATCH] Put listeners in a vector and improve UI listeners --- src/play_clj/core.clj | 11 ++++++----- src/play_clj/core_ui.clj | 9 +++++---- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/play_clj/core.clj b/src/play_clj/core.clj index f28bf7a..69cb90a 100644 --- a/src/play_clj/core.clj +++ b/src/play_clj/core.clj @@ -54,6 +54,8 @@ flatten (remove nil?) (compare-and-set! entities entities-list))))) + listeners [(input-processor options execute-fn!) + (gesture-detector options execute-fn!)] ui-listeners [(ui-gesture-listener options execute-fn!) (ui-change-listener options execute-fn!) (ui-click-listener options execute-fn!) @@ -77,8 +79,7 @@ :pause #(execute-fn! on-pause) :resize #(execute-fn! on-resize :width %1 :height %2) :resume #(execute-fn! on-resume) - :input-processor (input-processor options execute-fn!) - :gesture-detector (gesture-detector options execute-fn!)})) + :listeners listeners})) (defmacro defscreen [n & {:keys [] :as options}] @@ -102,9 +103,9 @@ [^Game game & screens] (let [add-inputs! (fn [] (input! :set-input-processor (InputMultiplexer.)) - (doseq [screen screens] - (add-input! (:input-processor screen)) - (add-input! (:gesture-detector screen)))) + (doseq [{:keys [listeners]} screens] + (doseq [listener listeners] + (add-input! listener)))) run-fn! (fn [k & args] (doseq [screen screens] (apply (get screen k) args)))] diff --git a/src/play_clj/core_ui.clj b/src/play_clj/core_ui.clj index 717ccad..4abfbec 100644 --- a/src/play_clj/core_ui.clj +++ b/src/play_clj/core_ui.clj @@ -90,15 +90,16 @@ ; listeners -(defn listen! +(defn ui-listen! [{:keys [renderer ui-listeners] :as screen} entities] (assert (isa? (type renderer) Stage)) (add-input! renderer) (stage! screen :clear) (doseq [{:keys [object]} entities] - (stage! screen :add-actor object) - (doseq [listener ui-listeners] - (.addListener ^Actor object listener))) + (when (isa? (type object) Actor) + (stage! screen :add-actor object) + (doseq [listener ui-listeners] + (.addListener ^Actor object listener)))) entities) (defn- ui-gesture-listener