Created
September 5, 2015 13:05
-
-
Save benzap/a82586b1c135d8a16824 to your computer and use it in GitHub Desktop.
Simple keyboard event tracking code in use for 2d games
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
(ns event | |
"Macros for event.cljs") | |
(defmacro on-keydown [key & body] | |
`(set-on-keydown ~key (fn [] ~@body))) | |
(defmacro on-keyup [key & body] | |
`(set-on-keyup ~key (fn [] ~@body))) |
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
(ns event | |
"Contains wrappers around the window for keyboard events. Provides a | |
simpler system for tracking when the key and pressed and | |
depressed. Could be expanded on to track key combinations. | |
Examples: | |
(on-keydown | |
:space | |
(.log js/console \"Hello dry skin build up!\")) | |
(on-keyup | |
:space | |
(.log js/console \"Goodbye spacebar!\")) | |
" | |
(:require-macros [event | |
:refer [on-keydown on-keyup on-timeout]])) | |
;; | |
;; Keyboard Events | |
;; | |
(def keycode-map | |
{:enter 13 | |
:left 37 | |
:up 38 | |
:right 39 | |
:down 40 | |
:space 32 | |
:a 65 :b 66 :c 67 | |
:d 68 :e 69 :f 70 | |
:g 71 :h 72 :i 73 | |
:j 74 :k 75 :l 76 | |
:m 77 :n 78 :o 79 | |
:p 80 :q 81 :r 82 | |
:s 83 :t 84 :u 85 | |
:v 86 :w 87 :x 88 | |
:y 89 :z 90}) | |
(def keys-pressed (atom #{})) | |
(defn set-on-keydown [key callback] | |
(let [keycode (keycode-map key) | |
callback-wrapper | |
(fn [event] | |
(let [event-keycode (.-keyCode event)] | |
(when (and (= keycode event-keycode) | |
(not (key @keys-pressed))) | |
(callback) | |
(swap! keys-pressed conj key)))) | |
;;need to track when the key goes up, so we can remove it from | |
;;the keys-pressed set | |
keyup-listener | |
(fn [event] | |
(let [event-keycode (.-keyCode event)] | |
(when (= keycode event-keycode) | |
(swap! keys-pressed disj key))))] | |
(.addEventListener js/document "keydown" callback-wrapper) | |
(.addEventListener js/document "keyup" keyup-listener))) | |
(defn set-on-keyup [key callback] | |
(let [keycode (keycode-map key) | |
callback-wrapper | |
(fn [event] | |
(let [event-keycode (.-keyCode event)] | |
(when (= keycode event-keycode) | |
(callback))))] | |
(.addEventListener js/document "keyup" callback-wrapper))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment