wingbase/public/static/js/wingbase/input.js
2016-03-30 01:25:14 +01:00

92 lines
1.9 KiB
JavaScript

class Input {
constructor() {
this.mouse = {
x: 0,
y: 0,
held: {},
pressed: {},
get wx() {
let x = this.x + game.world.center.x;
return (x - game.renderer.canvas.width / 2) / SCALE;
},
get wy() {
let y = this.y + game.world.center.y;
return (y - game.renderer.canvas.height / 2) / SCALE;
}
};
this.keys = {
held: {},
pressed: {}
};
this._locked = false;
document.addEventListener('mousemove', this.mouseMove.bind(this));
document.addEventListener('mousedown', this.mouseDown.bind(this));
document.addEventListener('mouseup', this.mouseUp.bind(this));
document.addEventListener('keydown', this.keyDown.bind(this));
document.addEventListener('keyup', this.keyUp.bind(this));
document.addEventListener('contextmenu', e => e.preventDefault());
}
mouseMove() {
if (this.locked) return;
var rect = game.renderer.canvas.getBoundingClientRect();
this.mouse.x = event.clientX - rect.left;
this.mouse.y = event.clientY - rect.top;
};
mouseDown() {
if (this.locked) return;
this.mouse.pressed[event.which] = true;
this.mouse.held[event.which] = true;
};
mouseUp() {
if (this.locked) return;
this.mouse.held[event.which] = false;
}
keyDown() {
if (this.locked) {
if (event.key == 'Esc' || event.key == 'Enter') {
this.keys.pressed[event.key] = true;
}
return;
}
if (!this.keys.held[event.ket])
this.keys.pressed[event.key] = true;
this.keys.held[event.key] = true;
}
keyUp() {
if (this.locked) return;
this.keys.held[event.key] = false;
}
mouseAnyPressed() {
if (this.locked) return;
var p = this.mouse.pressed;
return p[1] || p[2] || p[3];
}
clear() {
for (var i in this.keys.pressed) this.keys.pressed[i] = false;
for (var i in this.mouse.pressed) this.mouse.pressed[i] = false;
};
get locked() {
return this._locked;
}
set locked(value) {
this._locked = value;
if (!value) return;
this.keys.held = {};
this.mouse.held = {};
}
}