From 11c6cc9cb8a4705eb3b590bdc6b913ee77aa477f Mon Sep 17 00:00:00 2001 From: Nathan Kunicki Date: Mon, 7 Mar 2016 18:41:07 -0600 Subject: [PATCH] Gamepad API works in Chrome --- examples/pong/pong.js | 6 ++++- src/classes/game.js | 1 - src/classes/gamepadinput.js | 54 ++++++++++++++++++++++++++++--------- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/examples/pong/pong.js b/examples/pong/pong.js index 8c16bb3..cb8c064 100644 --- a/examples/pong/pong.js +++ b/examples/pong/pong.js @@ -191,6 +191,7 @@ var leftPaddleUpCondition = function (paddle, delta) { if (!axisMoved) { if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_Q)) { + this.top -= 0.5 * delta; } } @@ -218,6 +219,7 @@ var leftPaddleDownCondition = function (paddle, delta) { if (!axisMoved) { if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_A)) { + this.top += 0.5 * delta; } } @@ -229,7 +231,7 @@ var rightPaddleUpCondition = function (paddle, delta) { let gamepadInput = paddle._game.inputs.gamepad; - let gamepadConnected = (gamepadInput.numGamepads >= 1), + let gamepadConnected = (gamepadInput.numGamepads >= 1 && gamepadInput.getGamepadById(0).numAxis >= 6), axisMoved = false; if (gamepadConnected) { @@ -245,6 +247,7 @@ var rightPaddleUpCondition = function (paddle, delta) { if (!axisMoved) { if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_O)) { + this.top -= 0.5 * delta; } } @@ -272,6 +275,7 @@ var rightPaddleDownCondition = function (paddle, delta) { if (!axisMoved) { if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_L)) { + this.top += 0.5 * delta; } } diff --git a/src/classes/game.js b/src/classes/game.js index c6ff015..7875f34 100644 --- a/src/classes/game.js +++ b/src/classes/game.js @@ -160,7 +160,6 @@ class Game extends Entity { window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) { - console.log("THIS"); window.setTimeout(callback, 1000 / self.desiredFps); }); diff --git a/src/classes/gamepadinput.js b/src/classes/gamepadinput.js index fe7825d..919e1d4 100644 --- a/src/classes/gamepadinput.js +++ b/src/classes/gamepadinput.js @@ -48,19 +48,49 @@ class GamepadInput { self._gamepadState = {}; self.gamepadIds = []; - window.addEventListener("gamepadconnected", (event) => { - self._gamepadState[event.gamepad.index] = new Gamepad(event.gamepad); - self.gamepadIds.push(event.gamepad.index); - console.log("Connected"); - console.log(event.gamepad); - console.log(event.gamepad.buttons[0]); - }); + if (!('ongamepadconnected' in window)) { - window.addEventListener("gamepaddisconnected", (event) => { - delete self._gamepadState[event.gamepad.index]; - self.gamepadIds.splice(self.gamepadIds.indexOf(event.gamepad.index)); - console.log("Disconnected"); - }); + let pollGamepads = function () { + + let gamepads = navigator.getGamepads ? navigator.getGamepads() : (navigator.webkitGetGamepads ? navigator.webkitGetGamepads : []); + + for (var i = 0; i < gamepads.length; i++) { + + let gamepad = gamepads[i]; + + if (gamepad) { + + if (self.gamepadIds.indexOf(gamepad.index) < 0) { + self._gamepadState[gamepad.index] = new Gamepad(gamepad); + self.gamepadIds.push(gamepad.index); + + console.log(`Gamepad ${gamepad.index} connected`); + + } + + } + + } + + }; + + let interval = setInterval(pollGamepads, 5); + + } else { + + window.addEventListener("gamepadconnected", (event) => { + self._gamepadState[event.gamepad.index] = new Gamepad(event.gamepad); + self.gamepadIds.push(event.gamepad.index); + console.log(`Gamepad ${event.gamepad.index} connected`); + }); + + window.addEventListener("gamepaddisconnected", (event) => { + delete self._gamepadState[event.gamepad.index]; + self.gamepadIds.splice(self.gamepadIds.indexOf(event.gamepad.index)); + console.log(`Gamepad ${event.gamepad.index} connected`); + }); + + } }