diff --git a/public/src/js/gamepad.js b/public/src/js/gamepad.js index 2db4f6a..8436cdf 100644 --- a/public/src/js/gamepad.js +++ b/public/src/js/gamepad.js @@ -1,86 +1,94 @@ class Gamepad{ - constructor(keyboard){ - var kbd=keyboard.getBindings() - this.gameBtn = {} - this.gameBtn[kbd["don_l"]] = ["u", "d", "l", "r"] - this.gameBtn[kbd["don_r"]] = ["a", "b", "x", "y"] - this.gameBtn[kbd["ka_l"]] = ["lb", "lt"] - this.gameBtn[kbd["ka_r"]] = ["rb", "rt"] - this.menuBtn = {} - this.menuBtn[kbd["pause"]] = ["start"] - this.b = { - "a": "0", - "b": "1", - "x": "2", - "y": "3", - "lb": "4", - "rb": "5", - "lt": "6", - "rt": "7", - "back": "8", - "start": "9", - "ls": "10", - "rs": "11", - "u": "12", - "d": "13", - "l": "14", - "r": "15", - "guide": "16" - } - this.btn = {} - this.keyboard = keyboard - } - play(menuPlay){ - if("getGamepads" in navigator){ - var gamepads = navigator.getGamepads() - }else{ - return - } - var bindings = menuPlay ? this.menuBtn : this.gameBtn - for(var i = 0; i < gamepads.length; i++){ - if(gamepads[i]){ - var buttons = gamepads[i].buttons - this.toRelease = {} - for(var i in bindings){ - this.toRelease[i] = bindings[i].length - } - for(var btnName in buttons){ - buttonSearch: { - for(var bind in bindings){ - for(var name in bindings[bind]){ - if(btnName == this.b[bindings[bind][name]]){ - this.checkButton(buttons, btnName, bind) - break buttonSearch - } - } - } - } - } - } - } - } - checkButton(buttons, btnName, keyCode){ - var button = buttons[btnName] - var pressed = !this.btn[btnName] && button.pressed - var released = this.btn[btnName] && !button.pressed - if(pressed){ - this.btn[btnName] = true - }else if(released){ - delete this.btn[btnName] - } - if(pressed){ - if(this.keyboard.getKeys()[keyCode]){ - this.keyboard.setKey(keyCode, false) - } - this.keyboard.setKey(keyCode, true) - }else if(!button.pressed && this.keyboard.getKeys()[keyCode]){ - if(released){ - this.toRelease[keyCode+"released"] = true - } - this.toRelease[keyCode]-- - if(this.toRelease[keyCode] == 0 && this.toRelease[keyCode+"released"]){ - this.keyboard.setKey(keyCode, false) - } - } - } + constructor(keyboard){ + var kbd = keyboard.getBindings() + this.gameBtn = {} + this.gameBtn[kbd["don_l"]] = ["u", "d", "l", "r"] + this.gameBtn[kbd["don_r"]] = ["a", "b", "x", "y"] + this.gameBtn[kbd["ka_l"]] = ["lb", "lt"] + this.gameBtn[kbd["ka_r"]] = ["rb", "rt"] + this.menuBtn = {} + this.menuBtn[kbd["pause"]] = ["start"] + this.b = { + "a": "0", + "b": "1", + "x": "2", + "y": "3", + "lb": "4", + "rb": "5", + "lt": "6", + "rt": "7", + "back": "8", + "start": "9", + "ls": "10", + "rs": "11", + "u": "12", + "d": "13", + "l": "14", + "r": "15", + "guide": "16" + } + this.btn = {} + this.keyboard = keyboard + } + play(menuPlay){ + if("getGamepads" in navigator){ + var gamepads = navigator.getGamepads() + }else{ + return + } + var bindings = menuPlay ? this.menuBtn : this.gameBtn + for(var i = 0; i < gamepads.length; i++){ + if(gamepads[i]){ + this.toRelease = {} + for(var bind in bindings){ + this.toRelease[bind] = bindings[bind].length + } + for(var btnName in gamepads[i].buttons){ + buttonSearch: { + for(var bind in bindings){ + for(var name in bindings[bind]){ + if(btnName === this.b[bindings[bind][name]]){ + this.checkButton(gamepads, btnName, bind) + break buttonSearch + } + } + } + } + } + break + } + } + } + checkButton(gamepads, btnName, keyCode){ + var button = false + for(var i = 0; i < gamepads.length; i++){ + if(gamepads[i]){ + var btnPressed = gamepads[i].buttons[btnName].pressed + if(btnPressed){ + button = btnPressed + } + } + } + var pressed = !this.btn[btnName] && button + var released = this.btn[btnName] && !button + if(pressed){ + this.btn[btnName] = true + }else if(released){ + delete this.btn[btnName] + } + if(pressed){ + if(this.keyboard.getKeys()[keyCode]){ + this.keyboard.setKey(keyCode, false) + } + this.keyboard.setKey(keyCode, true) + }else if(!button && this.keyboard.getKeys()[keyCode]){ + if(released){ + this.toRelease[keyCode + "released"] = true + } + this.toRelease[keyCode]-- + if(this.toRelease[keyCode] === 0 && this.toRelease[keyCode + "released"]){ + this.keyboard.setKey(keyCode, false) + } + } + } }