Created
September 21, 2011 21:05
-
-
Save jvillste/1233319 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn- handle-input [input state-changes event] | |
(-> input | |
(assoc :past-states (conj (:past-states input) | |
(:current-state input))) | |
(assoc :current-state (apply assoc input-state | |
(concat state-changes | |
[:last-event event | |
:time (System/nanoTime)]))))) | |
(defn handle-mouse-button-press [input lwjgl-event] | |
(case [(:mouse-button lwjgl-event) (:mouse-button-state lwjgl-event)] | |
[0 true] (handle-input input | |
[:left-mouse-button-down true] | |
{:type :left-mouse-button-down}) | |
[1 true] (handle-input input | |
[:right-mouse-button-down true] | |
{:type :right-mouse-button-down}) | |
[2 true] (handle-input input | |
[:middle-mouse-button-down true] | |
{:type :middle-mouse-button-down}) | |
[0 false] (handle-input input | |
[:left-mouse-button-down false] | |
{:type :left-mouse-button-up}) | |
[1 false] (handle-input input | |
[:right-mouse-button-down false] | |
{:type :right-mouse-button-up}) | |
[2 false] (handle-input input | |
[:middle-mouse-button-down false] | |
{:type :middle-mouse-button-up}) | |
input)) | |
(defn get-lwjgl-mouse-event [] | |
(let [event { | |
:mouse-button-down (Mouse/getEventButton) | |
:mouse-button-state (Mouse/getEventButtonState) | |
:mouse-wheel-delta (Mouse/getEventDWheel) | |
:mouse-x (Mouse/getEventX) | |
:mouse-y (Mouse/getEventY) | |
:mouse-delta-x (Mouse/getEventDX) | |
:mouse-delta-y (Mouse/getEventDY) | |
}] | |
(assoc event :type (cond (or (> (:mouse-delta-x event) 0) | |
(> (:mouse-delta-y event) 0)) :mouse-move | |
(not (= 0 (:mouse-wheel-delta event))) :mouse-wheel | |
(not (= :mouse-button -1) :mouse-button))))) | |
(defn handle-mouse-move [input lwjgl-event] | |
(handle-input input | |
[:mouse-x (Mouse/getEventX) :mouse-y (Mouse/getEventY) | |
:mouse-dx (Mouse/getEventDX) :mouse-dy (Mouse/getEventDY)] | |
{:type :mouse-moved})) | |
(defn handle-mouse-wheel [input lwjgl-event] | |
(handle-input input | |
[:mouse-wheel-delta (:mouse-wheel-delta lwjgl-event)] | |
{:type :mouse-wheel-moved}) | |
input) | |
(defn read-input [input] | |
(loop [new-input input] | |
(if (Mouse/next) | |
(recur (let [lwjgl-event (get-lwjgl-event)] | |
(case (:type lwjgl-event) | |
:mouse-button (handle-mouse-button-press input lwjgl-event) | |
:mouse-move (handle-mouse-move input lwjgl-event) | |
:mouse-wheel (handle-mouse-wheel input lwjgl-event)) | |
new-input)) | |
new-input)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment