diff --git a/README.md b/README.md index b54b2d555..f47676ebb 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ Version 2.1.0 - "Cairhien" - -in development- * P2.InversePointProxy.x and y values are now returned in pixels (previously they were returned in meters). See PointProxy.mx/my for meter values. * Arcade.overlap and collide are now more consistent about allowing a Group vs. Group or Group vs. Array of Groups set (thanks @pyromanfo #877 #1147) * The Pointer move callbacks are now sent an extra parameter: `fromClick` allowing your callbacks to distinguish between the Pointer just moving, or moving as a result of being pressed down (thanks @iforce2d #1055) +* GamePad and SinglePad onAxisCallback parameters have changed. You are now sent: this (a reference to the SinglePad that caused the callback), the axis index and the axis value in that order. ### Bug Fixes @@ -145,6 +146,7 @@ Version 2.1.0 - "Cairhien" - -in development- * The P2.World.postBroadphaseHandler now checks if the returned pairs array is empty or not before processing it (thanks @wayfu #934) * Tilemap.hasTile now checks the Tile.index value and will return false if the index is -1 (i.e. a non-active tile) (thanks @elgansayer #859) * Sound.restart used to cause the Sound to double-up if it was already playing when called. Now correctly stops the sound before restarting it (thanks @wombatbuddy #1136) +* GamePad axis detection now works again properly in Firefox (#1035) ### p2.js 0.6.0 Changes and New Features diff --git a/src/input/Gamepad.js b/src/input/Gamepad.js index 5dfefcb8e..e127ff5b2 100644 --- a/src/input/Gamepad.js +++ b/src/input/Gamepad.js @@ -24,17 +24,6 @@ Phaser.Gamepad = function (game) { */ this.game = game; - /** - * @property {Array} _gamepads - The four Phaser Gamepads. - * @private - */ - this._gamepads = [ - new Phaser.SinglePad(game, this), - new Phaser.SinglePad(game, this), - new Phaser.SinglePad(game, this), - new Phaser.SinglePad(game, this) - ]; - /** * @property {Object} _gamepadIndexMap - Maps the browsers gamepad indices to our Phaser Gamepads * @private @@ -131,6 +120,17 @@ Phaser.Gamepad = function (game) { */ this._gamepaddisconnected = null; + /** + * @property {Array} _gamepads - The four Phaser Gamepads. + * @private + */ + this._gamepads = [ + new Phaser.SinglePad(game, this), + new Phaser.SinglePad(game, this), + new Phaser.SinglePad(game, this), + new Phaser.SinglePad(game, this) + ]; + }; Phaser.Gamepad.prototype = { @@ -172,6 +172,16 @@ Phaser.Gamepad.prototype = { this._active = true; + var _this = this; + + this._onGamepadConnected = function (event) { + return _this.onGamepadConnected(event); + }; + + this._onGamepadDisconnected = function (event) { + return _this.onGamepadDisconnected(event); + }; + window.addEventListener('gamepadconnected', this._onGamepadConnected, false); window.addEventListener('gamepaddisconnected', this._onGamepadDisconnected, false); @@ -180,14 +190,13 @@ Phaser.Gamepad.prototype = { /** * Handles the connection of a Gamepad. * - * @method _onGamepadConnected + * @method onGamepadConnected * @private * @param {object} event - The DOM event. */ - _onGamepadConnected: function (event) { + onGamepadConnected: function (event) { var newPad = event.gamepad; - this._rawPads.push(newPad); this._gamepads[newPad.index].connect(newPad); @@ -196,11 +205,11 @@ Phaser.Gamepad.prototype = { /** * Handles the disconnection of a Gamepad. * - * @method _onGamepadDisconnected + * @method onGamepadDisconnected * @private * @param {object} event - The DOM event. */ - _onGamepadDisconnected: function (event) { + onGamepadDisconnected: function (event) { var removedPad = event.gamepad; @@ -619,6 +628,7 @@ Phaser.Gamepad.XBOX360_DPAD_RIGHT = 15; Phaser.Gamepad.XBOX360_DPAD_UP = 12; Phaser.Gamepad.XBOX360_DPAD_DOWN = 13; +// On FF 0 = Y, 1 = X, 2 = Y, 3 = X, 4 = left bumper, 5 = dpad left, 6 = dpad right Phaser.Gamepad.XBOX360_STICK_LEFT_X = 0; Phaser.Gamepad.XBOX360_STICK_LEFT_Y = 1; Phaser.Gamepad.XBOX360_STICK_RIGHT_X = 2; diff --git a/src/input/SinglePad.js b/src/input/SinglePad.js index 521676d27..e1ef9b578 100644 --- a/src/input/SinglePad.js +++ b/src/input/SinglePad.js @@ -161,7 +161,7 @@ Phaser.SinglePad.prototype = { }, /** - * Main update function, should be called by Phaser.Gamepad. + * Main update function called by Phaser.Gamepad. * * @method Phaser.SinglePad#pollStatus */ @@ -192,19 +192,18 @@ Phaser.SinglePad.prototype = { } } } - - for (var j = 0; j < this._axesLen; j++) + for (var index = 0; index < this._axesLen; index++) { - var axis = this._rawPad.axes[j]; + var value = this._rawPad.axes[index]; - if (axis > 0 && axis > this.deadZone || axis < 0 && axis < -this.deadZone) + if ((value > 0 && value > this.deadZone) || (value < 0 && value < -this.deadZone)) { - this.processAxisChange( { axis: j, value: axis } ); + this.processAxisChange(index, value); } else { - this.processAxisChange( { axis: j, value: 0 } ); + this.processAxisChange(index, 0); } } @@ -230,9 +229,14 @@ Phaser.SinglePad.prototype = { this._buttons = []; this._buttonsLen = rawPad.buttons.length; - this._axes = rawPad.axes; + this._axes = []; this._axesLen = rawPad.axes.length; + for (var a = 0; a < this._axesLen; a++) + { + this._axes[a] = rawPad.axes[a]; + } + for (var buttonCode in rawPad.buttons) { buttonCode = parseInt(buttonCode, 10); @@ -324,23 +328,23 @@ Phaser.SinglePad.prototype = { * @method Phaser.SinglePad#processAxisChange * @param {Object} axisState - State of the relevant axis */ - processAxisChange: function (axisState) { + processAxisChange: function (index, value) { - if (this._axes[axisState.axis] === axisState.value) + if (this._axes[index] === value) { return; } - this._axes[axisState.axis] = axisState.value; + this._axes[index] = value; if (this._padParent.onAxisCallback) { - this._padParent.onAxisCallback.call(this._padParent.callbackContext, axisState, this.index); + this._padParent.onAxisCallback.call(this._padParent.callbackContext, this, index, value); } if (this.onAxisCallback) { - this.onAxisCallback.call(this.callbackContext, axisState); + this.onAxisCallback.call(this.callbackContext, this, index, value); } },