Put listeners in a vector and improve UI listeners

This commit is contained in:
oakes
2014-01-11 12:53:37 -05:00
parent c9ac4bd2f4
commit 78981350f9
2 changed files with 11 additions and 9 deletions

View File

@@ -54,6 +54,8 @@
flatten flatten
(remove nil?) (remove nil?)
(compare-and-set! entities entities-list))))) (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-listeners [(ui-gesture-listener options execute-fn!)
(ui-change-listener options execute-fn!) (ui-change-listener options execute-fn!)
(ui-click-listener options execute-fn!) (ui-click-listener options execute-fn!)
@@ -77,8 +79,7 @@
:pause #(execute-fn! on-pause) :pause #(execute-fn! on-pause)
:resize #(execute-fn! on-resize :width %1 :height %2) :resize #(execute-fn! on-resize :width %1 :height %2)
:resume #(execute-fn! on-resume) :resume #(execute-fn! on-resume)
:input-processor (input-processor options execute-fn!) :listeners listeners}))
:gesture-detector (gesture-detector options execute-fn!)}))
(defmacro defscreen (defmacro defscreen
[n & {:keys [] :as options}] [n & {:keys [] :as options}]
@@ -102,9 +103,9 @@
[^Game game & screens] [^Game game & screens]
(let [add-inputs! (fn [] (let [add-inputs! (fn []
(input! :set-input-processor (InputMultiplexer.)) (input! :set-input-processor (InputMultiplexer.))
(doseq [screen screens] (doseq [{:keys [listeners]} screens]
(add-input! (:input-processor screen)) (doseq [listener listeners]
(add-input! (:gesture-detector screen)))) (add-input! listener))))
run-fn! (fn [k & args] run-fn! (fn [k & args]
(doseq [screen screens] (doseq [screen screens]
(apply (get screen k) args)))] (apply (get screen k) args)))]

View File

@@ -90,15 +90,16 @@
; listeners ; listeners
(defn listen! (defn ui-listen!
[{:keys [renderer ui-listeners] :as screen} entities] [{:keys [renderer ui-listeners] :as screen} entities]
(assert (isa? (type renderer) Stage)) (assert (isa? (type renderer) Stage))
(add-input! renderer) (add-input! renderer)
(stage! screen :clear) (stage! screen :clear)
(doseq [{:keys [object]} entities] (doseq [{:keys [object]} entities]
(stage! screen :add-actor object) (when (isa? (type object) Actor)
(doseq [listener ui-listeners] (stage! screen :add-actor object)
(.addListener ^Actor object listener))) (doseq [listener ui-listeners]
(.addListener ^Actor object listener))))
entities) entities)
(defn- ui-gesture-listener (defn- ui-gesture-listener