47 lines
1.8 KiB
JavaScript
47 lines
1.8 KiB
JavaScript
|
|
/* input.js — keyboard state. WASD / arrow keys drive; held A/D feeds the
|
||
|
|
* steering smoothing in physics.js. R / N / [1-4] are edge-triggered actions. */
|
||
|
|
(function (TOW) {
|
||
|
|
'use strict';
|
||
|
|
|
||
|
|
function Input() {
|
||
|
|
this.up = false; this.down = false; this.left = false; this.right = false;
|
||
|
|
this.actions = []; // queue of one-shot actions: 'reset','next','prev','map:N'
|
||
|
|
var self = this;
|
||
|
|
|
||
|
|
function set(code, val, e) {
|
||
|
|
switch (code) {
|
||
|
|
case 'KeyW': case 'ArrowUp': self.up = val; e.preventDefault(); break;
|
||
|
|
case 'KeyS': case 'ArrowDown': self.down = val; e.preventDefault(); break;
|
||
|
|
case 'KeyA': case 'ArrowLeft': self.left = val; e.preventDefault(); break;
|
||
|
|
case 'KeyD': case 'ArrowRight': self.right = val; e.preventDefault(); break;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
window.addEventListener('keydown', function (e) {
|
||
|
|
if (e.repeat) { set(e.code, true, e); return; }
|
||
|
|
set(e.code, true, e);
|
||
|
|
switch (e.code) {
|
||
|
|
case 'KeyR': self.actions.push('reset'); break;
|
||
|
|
case 'KeyN': self.actions.push('next'); break;
|
||
|
|
case 'KeyP': self.actions.push('prev'); break;
|
||
|
|
case 'Digit1': self.actions.push('map:0'); break;
|
||
|
|
case 'Digit2': self.actions.push('map:1'); break;
|
||
|
|
case 'Digit3': self.actions.push('map:2'); break;
|
||
|
|
case 'Digit4': self.actions.push('map:3'); break;
|
||
|
|
case 'Digit5': self.actions.push('map:4'); break;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
window.addEventListener('keyup', function (e) { set(e.code, false, e); });
|
||
|
|
// releasing focus shouldn't leave a key "stuck" down
|
||
|
|
window.addEventListener('blur', function () {
|
||
|
|
self.up = self.down = self.left = self.right = false;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
Input.prototype.drainActions = function () {
|
||
|
|
var a = this.actions; this.actions = []; return a;
|
||
|
|
};
|
||
|
|
|
||
|
|
TOW.Input = Input;
|
||
|
|
|
||
|
|
})(window.TOW = window.TOW || {});
|