@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
83 lines (82 loc) • 1.87 kB
JavaScript
"use strict";
function stopEvent(e) {
e.preventDefault();
}
export class CorePlayerKeyEvents {
constructor(player) {
this.player = player;
this._bounds = {
keydown: this._onKeyDown.bind(this),
keyup: this._onKeyUp.bind(this)
};
}
_onKeyDown(e) {
if (e.ctrlKey) {
return;
}
switch (e.code) {
case "ArrowUp":
case "KeyW":
this.player.setForward(true);
stopEvent(e);
break;
case "ArrowDown":
case "KeyS":
this.player.setBackward(true);
stopEvent(e);
break;
case "ArrowRight":
case "KeyD":
this.player.setRight(true);
stopEvent(e);
break;
case "ArrowLeft":
case "KeyA":
this.player.setLeft(true);
stopEvent(e);
break;
case "Space":
this.player.jump();
stopEvent(e);
break;
case "ShiftLeft":
case "ShiftRight":
this.player.setRun(true);
stopEvent(e);
break;
}
}
_onKeyUp(e) {
switch (e.code) {
case "ArrowUp":
case "KeyW":
this.player.setForward(false);
break;
case "ArrowDown":
case "KeyS":
this.player.setBackward(false);
break;
case "ArrowRight":
case "KeyD":
this.player.setRight(false);
break;
case "ArrowLeft":
case "KeyA":
this.player.setLeft(false);
break;
case "ShiftLeft":
case "ShiftRight":
this.player.setRun(false);
stopEvent(e);
break;
}
}
addEvents() {
document.addEventListener("keydown", this._bounds.keydown);
document.addEventListener("keyup", this._bounds.keyup);
}
removeEvents() {
document.removeEventListener("keydown", this._bounds.keydown);
document.removeEventListener("keyup", this._bounds.keyup);
}
}