Gamepad API works in Chrome

This commit is contained in:
Nathan Kunicki 2016-03-07 18:41:07 -06:00
parent 5336f0d4bf
commit 11c6cc9cb8
3 changed files with 47 additions and 14 deletions

View File

@ -191,6 +191,7 @@ var leftPaddleUpCondition = function (paddle, delta) {
if (!axisMoved) { if (!axisMoved) {
if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_Q)) { 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 (!axisMoved) {
if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_A)) { 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 gamepadInput = paddle._game.inputs.gamepad;
let gamepadConnected = (gamepadInput.numGamepads >= 1), let gamepadConnected = (gamepadInput.numGamepads >= 1 && gamepadInput.getGamepadById(0).numAxis >= 6),
axisMoved = false; axisMoved = false;
if (gamepadConnected) { if (gamepadConnected) {
@ -245,6 +247,7 @@ var rightPaddleUpCondition = function (paddle, delta) {
if (!axisMoved) { if (!axisMoved) {
if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_O)) { 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 (!axisMoved) {
if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_L)) { if (paddle._game.inputs.keyboard.isPressed(KeyConsts.CHAR_L)) {
this.top += 0.5 * delta;
} }
} }

View File

@ -160,7 +160,6 @@ class Game extends Entity {
window.webkitRequestAnimationFrame || window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame || window.mozRequestAnimationFrame ||
function (callback) { function (callback) {
console.log("THIS");
window.setTimeout(callback, 1000 / self.desiredFps); window.setTimeout(callback, 1000 / self.desiredFps);
}); });

View File

@ -48,22 +48,52 @@ class GamepadInput {
self._gamepadState = {}; self._gamepadState = {};
self.gamepadIds = []; self.gamepadIds = [];
if (!('ongamepadconnected' in window)) {
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) => { window.addEventListener("gamepadconnected", (event) => {
self._gamepadState[event.gamepad.index] = new Gamepad(event.gamepad); self._gamepadState[event.gamepad.index] = new Gamepad(event.gamepad);
self.gamepadIds.push(event.gamepad.index); self.gamepadIds.push(event.gamepad.index);
console.log("Connected"); console.log(`Gamepad ${event.gamepad.index} connected`);
console.log(event.gamepad);
console.log(event.gamepad.buttons[0]);
}); });
window.addEventListener("gamepaddisconnected", (event) => { window.addEventListener("gamepaddisconnected", (event) => {
delete self._gamepadState[event.gamepad.index]; delete self._gamepadState[event.gamepad.index];
self.gamepadIds.splice(self.gamepadIds.indexOf(event.gamepad.index)); self.gamepadIds.splice(self.gamepadIds.indexOf(event.gamepad.index));
console.log("Disconnected"); console.log(`Gamepad ${event.gamepad.index} connected`);
}); });
} }
}
get numGamepads () { get numGamepads () {
return this.gamepadIds.length; return this.gamepadIds.length;