Add input functions to defscreen
This commit is contained in:
@@ -41,7 +41,8 @@
|
|||||||
(defn defscreen*
|
(defn defscreen*
|
||||||
[{:keys [on-show on-render on-hide on-pause on-resize on-resume]
|
[{:keys [on-show on-render on-hide on-pause on-resize on-resume]
|
||||||
:or {on-show dummy on-render dummy on-hide dummy
|
:or {on-show dummy on-render dummy on-hide dummy
|
||||||
on-pause dummy on-resize dummy on-resume dummy}}]
|
on-pause dummy on-resize dummy on-resume dummy}
|
||||||
|
:as options}]
|
||||||
(let [screen (atom {})
|
(let [screen (atom {})
|
||||||
entities (atom '())
|
entities (atom '())
|
||||||
execute-fn! (fn [func screen-map]
|
execute-fn! (fn [func screen-map]
|
||||||
@@ -51,6 +52,12 @@
|
|||||||
flatten
|
flatten
|
||||||
(remove nil?)
|
(remove nil?)
|
||||||
(compare-and-set! entities entities-list))))
|
(compare-and-set! entities entities-list))))
|
||||||
|
execute-priority-fn! (fn [func options]
|
||||||
|
(some->> (func (merge @screen options) @entities)
|
||||||
|
list
|
||||||
|
flatten
|
||||||
|
(remove nil?)
|
||||||
|
(reset! entities)))
|
||||||
create-renderer-fn! #(swap! screen assoc :renderer (renderer %))
|
create-renderer-fn! #(swap! screen assoc :renderer (renderer %))
|
||||||
update-fn! #(swap! screen merge %)]
|
update-fn! #(swap! screen merge %)]
|
||||||
{:screen screen
|
{:screen screen
|
||||||
@@ -72,7 +79,8 @@
|
|||||||
:hide #(execute-fn! on-hide @screen)
|
:hide #(execute-fn! on-hide @screen)
|
||||||
:pause #(execute-fn! on-pause @screen)
|
:pause #(execute-fn! on-pause @screen)
|
||||||
:resize #(execute-fn! on-resize @screen)
|
:resize #(execute-fn! on-resize @screen)
|
||||||
:resume #(execute-fn! on-resume @screen)}))
|
:resume #(execute-fn! on-resume @screen)
|
||||||
|
:input (input* options execute-priority-fn!)}))
|
||||||
|
|
||||||
(defmacro defscreen
|
(defmacro defscreen
|
||||||
[n & {:keys [] :as options}]
|
[n & {:keys [] :as options}]
|
||||||
@@ -85,7 +93,9 @@
|
|||||||
(defn defgame*
|
(defn defgame*
|
||||||
[{:keys [on-create] :or {on-create dummy}}]
|
[{:keys [on-create] :or {on-create dummy}}]
|
||||||
(proxy [Game] []
|
(proxy [Game] []
|
||||||
(create [] (on-create this))))
|
(create []
|
||||||
|
(set-input! (InputMultiplexer.))
|
||||||
|
(on-create this))))
|
||||||
|
|
||||||
(defmacro defgame
|
(defmacro defgame
|
||||||
[n & {:keys [] :as options}]
|
[n & {:keys [] :as options}]
|
||||||
@@ -93,11 +103,14 @@
|
|||||||
|
|
||||||
(defn set-screen!
|
(defn set-screen!
|
||||||
[^Game game & screens]
|
[^Game game & screens]
|
||||||
(let [run-fn! (fn [k & args]
|
(let [add-inputs! (fn []
|
||||||
|
(doseq [screen screens]
|
||||||
|
(add-input! (:input screen))))
|
||||||
|
run-fn! (fn [k & args]
|
||||||
(doseq [screen screens]
|
(doseq [screen screens]
|
||||||
(apply (get screen k) args)))]
|
(apply (get screen k) args)))]
|
||||||
(.setScreen game (reify Screen
|
(.setScreen game (reify Screen
|
||||||
(show [this] (run-fn! :show))
|
(show [this] (add-inputs!) (run-fn! :show))
|
||||||
(render [this delta-time] (run-fn! :render delta-time))
|
(render [this delta-time] (run-fn! :render delta-time))
|
||||||
(hide [this] (run-fn! :hide))
|
(hide [this] (run-fn! :hide))
|
||||||
(pause [this] (run-fn! :pause))
|
(pause [this] (run-fn! :pause))
|
||||||
|
|||||||
@@ -43,34 +43,44 @@
|
|||||||
[key]
|
[key]
|
||||||
`(.isKeyPressed ^Input (Gdx/input) (get-keycode ~key)))
|
`(.isKeyPressed ^Input (Gdx/input) (get-keycode ~key)))
|
||||||
|
|
||||||
(defn input
|
(defn input*
|
||||||
[& {:keys [key-down key-typed key-up mouse-moved
|
[{:keys [key-down key-typed key-up mouse-moved
|
||||||
scrolled touch-down touch-dragged touch-up]
|
scrolled touch-down touch-dragged touch-up]
|
||||||
:or {key-down dummy key-typed dummy key-up dummy mouse-moved dummy
|
:or {key-down dummy key-typed dummy key-up dummy mouse-moved dummy
|
||||||
scrolled dummy touch-down dummy touch-dragged dummy touch-up dummy}}]
|
scrolled dummy touch-down dummy touch-dragged dummy touch-up dummy}}
|
||||||
(let [return-fn (fn [return-val]
|
execute-fn!]
|
||||||
(some #(not (nil? %)) [return-val false]))]
|
(reify InputProcessor
|
||||||
(reify InputProcessor
|
(keyDown [this keycode]
|
||||||
(keyDown [this keycode]
|
(execute-fn! key-down {:keycode keycode})
|
||||||
(return-fn (key-down keycode)))
|
false)
|
||||||
(keyTyped [this character]
|
(keyTyped [this character]
|
||||||
(return-fn (key-typed character)))
|
(execute-fn! key-typed {:character character})
|
||||||
(keyUp [this keycode]
|
false)
|
||||||
(return-fn (key-up keycode)))
|
(keyUp [this keycode]
|
||||||
(mouseMoved [this screen-x screen-y]
|
(execute-fn! key-up {:keycode keycode})
|
||||||
(return-fn (mouse-moved screen-x screen-y)))
|
false)
|
||||||
(scrolled [this amount]
|
(mouseMoved [this screen-x screen-y]
|
||||||
(return-fn (scrolled amount)))
|
(execute-fn! mouse-moved {:screen-x screen-x :screen-y screen-y})
|
||||||
(touchDown [this screen-x screen-y pointer button]
|
false)
|
||||||
(return-fn (touch-down screen-x screen-y pointer button)))
|
(scrolled [this amount]
|
||||||
(touchDragged [this screen-x screen-y pointer]
|
(execute-fn! scrolled {:amount amount})
|
||||||
(return-fn (touch-dragged screen-x screen-y pointer)))
|
false)
|
||||||
(touchUp [this screen-x screen-y pointer button]
|
(touchDown [this screen-x screen-y pointer button]
|
||||||
(return-fn (touch-up screen-x screen-y pointer button))))))
|
(execute-fn! touch-down {:screen-x screen-x :screen-y screen-y
|
||||||
|
:pointer pointer :button button})
|
||||||
|
false)
|
||||||
|
(touchDragged [this screen-x screen-y pointer]
|
||||||
|
(execute-fn! touch-dragged
|
||||||
|
{:screen-x screen-x :screen-y screen-y :pointer pointer})
|
||||||
|
false)
|
||||||
|
(touchUp [this screen-x screen-y pointer button]
|
||||||
|
(execute-fn! touch-up {:screen-x screen-x :screen-y screen-y
|
||||||
|
:pointer pointer :button button})
|
||||||
|
false)))
|
||||||
|
|
||||||
(defmacro input-multi
|
(defmacro input
|
||||||
[& args]
|
[& args]
|
||||||
`(InputMultiplexer. ~@args))
|
`(input* ~args (fn [func# options#] (func# options#))))
|
||||||
|
|
||||||
(defn set-input!
|
(defn set-input!
|
||||||
[^InputProcessor p]
|
[^InputProcessor p]
|
||||||
|
|||||||
@@ -62,10 +62,6 @@
|
|||||||
[k & options]
|
[k & options]
|
||||||
`(utils/call! ^Input (Gdx/input) ~k ~@options))
|
`(utils/call! ^Input (Gdx/input) ~k ~@options))
|
||||||
|
|
||||||
(defmacro input-multi!
|
|
||||||
[obj k & options]
|
|
||||||
`(utils/call! ^InputMultiplexer ~obj ~k ~@options))
|
|
||||||
|
|
||||||
(defmacro net!
|
(defmacro net!
|
||||||
[k & options]
|
[k & options]
|
||||||
`(utils/call! ^Net (Gdx/net) ~k ~@options))
|
`(utils/call! ^Net (Gdx/net) ~k ~@options))
|
||||||
|
|||||||
Reference in New Issue
Block a user