Phaser.SinglePad = function (game, padParent){ this.game = game; this.index = null ; this.connected = false ; this.callbackContext = this; this.onConnectCallback = null ; this.onDisconnectCallback = null ; this.onDownCallback = null ; this.onUpCallback = null ; this.onAxisCallback = null ; this.onFloatCallback = null ; this.deadZone = 0.26; this._padParent = padParent; this._rawPad = null ; this._prevTimestamp = null ; this._buttons = [] ; this._buttonsLen = 0; this._axes = [] ; this._axesLen = 0; } ; Phaser.SinglePad.prototype = { addCallbacks: function (context, callbacks){ if (typeof callbacks !== 'undefined') { this.onConnectCallback = (typeof callbacks.onConnect === 'function')? callbacks.onConnect: this.onConnectCallback; this.onDisconnectCallback = (typeof callbacks.onDisconnect === 'function')? callbacks.onDisconnect: this.onDisconnectCallback; this.onDownCallback = (typeof callbacks.onDown === 'function')? callbacks.onDown: this.onDownCallback; this.onUpCallback = (typeof callbacks.onUp === 'function')? callbacks.onUp: this.onUpCallback; this.onAxisCallback = (typeof callbacks.onAxis === 'function')? callbacks.onAxis: this.onAxisCallback; this.onFloatCallback = (typeof callbacks.onFloat === 'function')? callbacks.onFloat: this.onFloatCallback; this.callbackContext = context; } } , getButton: function (buttonCode){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode]; } else { return null ; } } , pollStatus: function (){ if (!this.connected || !this.game.input.enabled || !this.game.input.gamepad.enabled || (this._rawPad.timestamp && (this._rawPad.timestamp === this._prevTimestamp))) { return ; } for (var i = 0; i < this._buttonsLen; i++ ){ var rawButtonVal = isNaN(this._rawPad.buttons[i])? this._rawPad.buttons[i].value: this._rawPad.buttons[i]; if (rawButtonVal !== this._buttons[i].value) { if (rawButtonVal === 1) { this.processButtonDown(i, rawButtonVal); } else if (rawButtonVal === 0) { this.processButtonUp(i, rawButtonVal); } else { this.processButtonFloat(i, rawButtonVal); } } } for (var index = 0; index < this._axesLen; index++ ){ var value = this._rawPad.axes[index]; if ((value > 0 && value > this.deadZone) || (value < 0 && value < - this.deadZone)) { this.processAxisChange(index, value); } else { this.processAxisChange(index, 0); } } this._prevTimestamp = this._rawPad.timestamp; } , connect: function (rawPad){ var triggerCallback = !this.connected; this.connected = true ; this.index = rawPad.index; this._rawPad = rawPad; this._buttons = [] ; this._buttonsLen = _AN_Read_length('length', rawPad.buttons); this._axes = [] ; this._axesLen = _AN_Read_length('length', rawPad.axes); for (var a = 0; a < this._axesLen; a++ ){ this._axes[a] = rawPad.axes[a]; } for (var buttonCode in rawPad.buttons){ buttonCode = parseInt(buttonCode, 10); this._buttons[buttonCode] = new Phaser.DeviceButton(this, buttonCode); } if (triggerCallback && this._padParent.onConnectCallback) { this._padParent.onConnectCallback.call(this._padParent.callbackContext, this.index); } if (triggerCallback && this.onConnectCallback) { this.onConnectCallback.call(this.callbackContext); } } , disconnect: function (){ var triggerCallback = this.connected; var disconnectingIndex = this.index; this.connected = false ; this.index = null ; this._rawPad = undefined; for (var i = 0; i < this._buttonsLen; i++ ){ this._buttons[i].destroy(); } this._buttons = [] ; this._buttonsLen = 0; this._axes = [] ; this._axesLen = 0; if (triggerCallback && this._padParent.onDisconnectCallback) { this._padParent.onDisconnectCallback.call(this._padParent.callbackContext, disconnectingIndex); } if (triggerCallback && this.onDisconnectCallback) { this.onDisconnectCallback.call(this.callbackContext); } } , destroy: function (){ this._rawPad = undefined; for (var i = 0; i < this._buttonsLen; i++ ){ this._buttons[i].destroy(); } this._buttons = [] ; this._buttonsLen = 0; this._axes = [] ; this._axesLen = 0; this.onConnectCallback = null ; this.onDisconnectCallback = null ; this.onDownCallback = null ; this.onUpCallback = null ; this.onAxisCallback = null ; this.onFloatCallback = null ; } , processAxisChange: function (index, value){ if (this._axes[index] === value) { return ; } this._axes[index] = value; if (this._padParent.onAxisCallback) { this._padParent.onAxisCallback.call(this._padParent.callbackContext, this, index, value); } if (this.onAxisCallback) { this.onAxisCallback.call(this.callbackContext, this, index, value); } } , processButtonDown: function (buttonCode, value){ if (this._buttons[buttonCode]) { this._buttons[buttonCode].start(null , value); } if (this._padParent.onDownCallback) { this._padParent.onDownCallback.call(this._padParent.callbackContext, buttonCode, value, this.index); } if (this.onDownCallback) { this.onDownCallback.call(this.callbackContext, buttonCode, value); } } , processButtonUp: function (buttonCode, value){ if (this._padParent.onUpCallback) { this._padParent.onUpCallback.call(this._padParent.callbackContext, buttonCode, value, this.index); } if (this.onUpCallback) { this.onUpCallback.call(this.callbackContext, buttonCode, value); } if (this._buttons[buttonCode]) { this._buttons[buttonCode].stop(null , value); } } , processButtonFloat: function (buttonCode, value){ if (this._padParent.onFloatCallback) { this._padParent.onFloatCallback.call(this._padParent.callbackContext, buttonCode, value, this.index); } if (this.onFloatCallback) { this.onFloatCallback.call(this.callbackContext, buttonCode, value); } if (this._buttons[buttonCode]) { this._buttons[buttonCode].padFloat(value); } } , axis: function (axisCode){ if (this._axes[axisCode]) { return this._axes[axisCode]; } return false ; } , isDown: function (buttonCode){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode].isDown; } return false ; } , isUp: function (buttonCode){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode].isUp; } return false ; } , justReleased: function (buttonCode, duration){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode].justReleased(duration); } } , justPressed: function (buttonCode, duration){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode].justPressed(duration); } } , buttonValue: function (buttonCode){ if (this._buttons[buttonCode]) { return this._buttons[buttonCode].value; } return null ; } , reset: function (){ for (var j = 0; j < _AN_Read_length('length', this._axes); j++ ){ this._axes[j] = 0; } } } ; Phaser.SinglePad.prototype.constructor = Phaser.SinglePad;