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
(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)))]

View File

@@ -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