Skip to content

Instantly share code, notes, and snippets.

@mendes5
Created April 6, 2017 05:43
Show Gist options
  • Select an option

  • Save mendes5/b995ae10d08eae234327a3b88271a734 to your computer and use it in GitHub Desktop.

Select an option

Save mendes5/b995ae10d08eae234327a3b88271a734 to your computer and use it in GitHub Desktop.
Another keyboard listener
class BooleanicKeys {
constructor(obj, element = window) {
element.addEventListener('keyup', this.keyUp.bind(this), false);
element.addEventListener('keydown', this.keyDown.bind(this), false);
this.elememt = element
this.keys = {}
for (let key in obj) {
this.keys[key] = {
isDown: false,
press: obj[key],
}
}
}
keyUp(e) {
if (this.keys[e.code] && this.keys[e.code].isDown) {
e.preventDefault()
this.keys[e.code].isDown = false
}
}
keyDown(e) {
if (this.keys[e.code] && !this.keys[e.code].isDown) {
e.preventDefault()
this.keys[e.code].isDown = true
}
}
update() {
for(let key in this.keys){
this.keys[key].isDown && this.keys[key].press()
}
}
detach() {
this.elememt.removeEventListener('keydown', this.keyDown, false)
this.elememt.removeEventListener('keyup', this.keyUp, false)
}
}
/*
const example = new BooleanicKeys({
KeyW(){
p.z += Math.cos(m.x) * p.speed
p.x += Math.sin(m.x) * p.speed
},
KeyI:()=>{ p.stop(); p.openInv() }
Space: p.shoot
})
const loop = ()=>{
example.update()
}
example.detach()
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment