InputHandler: prevent default for relavant keys
This commit is contained in:
parent
9f74746b2e
commit
4de2a6636a
3 changed files with 31 additions and 2 deletions
12
src/app.ts
12
src/app.ts
|
@ -11,6 +11,16 @@ import MapContext from './control/MapContext';
|
||||||
import MapData from './model/MapData';
|
import MapData from './model/MapData';
|
||||||
import InputHandler from './view/InputHandler';
|
import InputHandler from './view/InputHandler';
|
||||||
|
|
||||||
|
import * as util from './util';
|
||||||
|
|
||||||
|
|
||||||
|
var relevantKeys = [
|
||||||
|
InputHandler.Up,
|
||||||
|
InputHandler.Right,
|
||||||
|
InputHandler.Down,
|
||||||
|
InputHandler.Left,
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
var mapContext: MapContext;
|
var mapContext: MapContext;
|
||||||
|
|
||||||
|
@ -19,7 +29,7 @@ window.onload = () => {
|
||||||
|
|
||||||
xhr.onload = function() {
|
xhr.onload = function() {
|
||||||
var mapDef = new MapData(JSON.parse(this.responseText));
|
var mapDef = new MapData(JSON.parse(this.responseText));
|
||||||
var inputHandler = new InputHandler();
|
var inputHandler = new InputHandler(util.numberArrayToMap(relevantKeys));
|
||||||
mapContext = new MapContext(mapDef, inputHandler);
|
mapContext = new MapContext(mapDef, inputHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,3 +11,12 @@ export function mapPromises<T>(promises: {[key: string]: Promise<T>}): Promise<{
|
||||||
|
|
||||||
return Promise.all(p).then(() => ret);
|
return Promise.all(p).then(() => ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function numberArrayToMap(arr: number[]): {[key: number]: boolean} {
|
||||||
|
var ret: {[key: number]: boolean} = {};
|
||||||
|
|
||||||
|
for (let v of arr)
|
||||||
|
ret[v] = true;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
|
@ -13,8 +13,13 @@ class InputHandler {
|
||||||
this.listeners.forEach(l => l());
|
this.listeners.forEach(l => l());
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor() {
|
constructor(private relevantKeys: {[key: number]: boolean}) {
|
||||||
window.addEventListener('keydown', (ev) => {
|
window.addEventListener('keydown', (ev) => {
|
||||||
|
if (!relevantKeys[ev.keyCode])
|
||||||
|
return;
|
||||||
|
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
if (!this.keys[ev.keyCode]) {
|
if (!this.keys[ev.keyCode]) {
|
||||||
this.keys[ev.keyCode] = true;
|
this.keys[ev.keyCode] = true;
|
||||||
this.callListeners();
|
this.callListeners();
|
||||||
|
@ -22,6 +27,11 @@ class InputHandler {
|
||||||
});
|
});
|
||||||
|
|
||||||
window.addEventListener('keyup', (ev) => {
|
window.addEventListener('keyup', (ev) => {
|
||||||
|
if (!relevantKeys[ev.keyCode])
|
||||||
|
return;
|
||||||
|
|
||||||
|
ev.preventDefault();
|
||||||
|
|
||||||
if (this.keys[ev.keyCode]) {
|
if (this.keys[ev.keyCode]) {
|
||||||
delete this.keys[ev.keyCode];
|
delete this.keys[ev.keyCode];
|
||||||
this.callListeners();
|
this.callListeners();
|
||||||
|
|
Reference in a new issue