72 lines
1.2 KiB
JavaScript
72 lines
1.2 KiB
JavaScript
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
|
|
};
|
|
})();
|