var raycast = raycast || {}; raycast.keyHandler = (function() { var codes = { // forward up: 38, w: 87, // backward down: 40, s: 83, // turn left left: 37, a: 65, // turn right right: 39, d: 68, // special space: 32, ctrl: 17, // change filtering type esc: 27 }; var state = new Array(); var lastState = new Array(); for (var i = 0; i < 255; i++) { state[i] = false; lastState[i] = false; } onKeyup = function (e) { state[e.which] = false; if (isUsedKey(e.which)) e.preventDefault(); } onKeydown = function (e) { state[e.which] = true; if (isUsedKey(e.which)) e.preventDefault(); } function isUsedKey(keycode) { for (var key in codes) { if (codes[key] == keycode) { return true; } } return false; } isKeydown = function(keyname) { return state[codes[keyname]]; } isKeypress = function(keyname) { return state[codes[keyname]] && !lastState[codes[keyname]]; } tick = function() { lastState = state.slice(); } return { onKeyup: onKeyup, onKeydown: onKeydown, isKeydown: isKeydown, isKeypress: isKeypress, tick: tick }; })();