Fix how listeners are initialized

This commit is contained in:
oakes
2014-05-25 15:28:14 -04:00
parent 63c316de64
commit 817d36e82e
2 changed files with 11 additions and 14 deletions

View File

@@ -72,13 +72,10 @@
#(normalize (func screen-map old-entities)) #(normalize (func screen-map old-entities))
(meta func)) (meta func))
(wrapper screen) (wrapper screen)
(reset-changed! entities old-entities)))))] (reset-changed! entities old-entities)))))
; add the input listeners to the screen atom total-time (atom 0)]
(when-not (:input-listeners @screen)
(->> (input-listeners options execute-fn!)
(swap! screen assoc :input-listeners)))
; update screen when either the screen or entities are changed ; update screen when either the screen or entities are changed
(add-watch screen :changed (fn [_ _ _ new-screen] (add-watch screen :changed (fn [_ _ old-screen new-screen]
(update-screen! new-screen))) (update-screen! new-screen)))
(add-watch entities :changed (fn [_ _ _ new-entities] (add-watch entities :changed (fn [_ _ _ new-entities]
(update-screen! @screen new-entities))) (update-screen! @screen new-entities)))
@@ -92,14 +89,14 @@
:update-fn! #(apply swap! screen %1 %2) :update-fn! #(apply swap! screen %1 %2)
:execute-fn! execute-fn! :execute-fn! execute-fn!
:on-timer on-timer :on-timer on-timer
:input-listeners (input-listeners options execute-fn!)
:ui-listeners (ui-listeners options execute-fn!)) :ui-listeners (ui-listeners options execute-fn!))
(execute-fn! on-show) (execute-fn! on-show)
(when-not (:contact-listener @screen) (->> (contact-listener @screen options execute-fn!)
(->> (contact-listener @screen options execute-fn!) (swap! screen assoc :contact-listener)))
(swap! screen assoc :contact-listener))))
:render (fn [d] :render (fn [d]
(swap! screen #(assoc % :total-time (+ (:total-time %) d))) (swap! total-time + d)
(execute-fn! on-render :delta-time d)) (execute-fn! on-render :delta-time d :total-time @total-time))
:hide #(execute-fn! on-hide) :hide #(execute-fn! on-hide)
: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)
@@ -450,7 +447,7 @@ via the screen map.
(doseq [screen screen-objects] (doseq [screen screen-objects]
(apply (get screen k) args)))] (apply (get screen k) args)))]
(.setScreen game-object (reify Screen (.setScreen game-object (reify Screen
(show [this] (add-inputs!) (run-fn! :show)) (show [this] (run-fn! :show) (add-inputs!))
(render [this d] (run-fn! :render d)) (render [this d] (run-fn! :render d))
(hide [this] (run-fn! :hide)) (hide [this] (run-fn! :hide))
(pause [this] (run-fn! :pause)) (pause [this] (run-fn! :pause))

View File

@@ -130,12 +130,12 @@
(defn ^:private add-input! (defn ^:private add-input!
[^InputProcessor p] [^InputProcessor p]
(let [^InputMultiplexer multi (input! :get-input-processor)] (when-let [^InputMultiplexer multi (input! :get-input-processor)]
(.addProcessor multi p))) (.addProcessor multi p)))
(defn ^:private remove-input! (defn ^:private remove-input!
[^InputProcessor p] [^InputProcessor p]
(let [^InputMultiplexer multi (input! :get-input-processor)] (when-let [^InputMultiplexer multi (input! :get-input-processor)]
(.removeProcessor multi p))) (.removeProcessor multi p)))
(defn sound* (defn sound*