diff --git a/src/input/InputManager.js b/src/input/InputManager.js index c92f92fc2..01cb241b4 100644 --- a/src/input/InputManager.js +++ b/src/input/InputManager.js @@ -14,51 +14,175 @@ var InputManager = new Class({ initialize: + /** + * [description] + * + * @class InputManager + * @memberOf Phaser.Input + * @constructor + * @since 3.0.0 + * + * @param {Phaser.Game} game - [description] + * @param {object} config - [description] + */ function InputManager (game, config) { + /** + * [description] + * + * @property {[type]} game + * @since 3.0.0 + */ this.game = game; + /** + * [description] + * + * @property {HTMLCanvasElement} canvas + * @since 3.0.0 + */ this.canvas; + /** + * [description] + * + * @property {object} config + * @since 3.0.0 + */ this.config = config; + /** + * [description] + * + * @property {boolean} enabled + * @default true + * @since 3.0.0 + */ this.enabled = true; + /** + * [description] + * + * @property {[type]} events + * @since 3.0.0 + */ this.events = new EventEmitter(); - // Standard FIFO queue + /** + * Standard FIFO queue. + * + * @property {array} queue + * @default [] + * @since 3.0.0 + */ this.queue = []; - // Listeners (will be based on config) + /** + * [description] + * + * @property {Phaser.Input.Keyboard.KeyboardManager} keyboard + * @since 3.0.0 + */ this.keyboard = new Keyboard(this); + + /** + * [description] + * + * @property {Phaser.Input.Mouse.MouseManager} mouse + * @since 3.0.0 + */ this.mouse = new Mouse(this); + + /** + * [description] + * + * @property {Phaser.Input.Touch.TouchManager} touch + * @since 3.0.0 + */ this.touch = new Touch(this); + + /** + * [description] + * + * @property {Phaser.Input.Gamepad.GamepadManager} gamepad + * @since 3.0.0 + */ this.gamepad = new Gamepad(this); + /** + * [description] + * + * @property {[type]} activePointer + * @since 3.0.0 + */ this.activePointer = new Pointer(this, 0); + /** + * [description] + * + * @property {object} scale + * @since 3.0.0 + */ this.scale = { x: 1, y: 1 }; - // If the top-most Scene in the Scene List receives an input it will stop input from - // propagating any lower down the scene list, i.e. if you have a UI Scene at the top - // and click something on it, that click will not then be passed down to any other - // Scene below. Disable this to have input events passed through all Scenes, all the time. + /** + * If the top-most Scene in the Scene List receives an input it will stop input from + * propagating any lower down the scene list, i.e. if you have a UI Scene at the top + * and click something on it, that click will not then be passed down to any other + * Scene below. Disable this to have input events passed through all Scenes, all the time. + * + * @property {boolean} globalTopOnly + * @default true + * @since 3.0.0 + */ this.globalTopOnly = true; + /** + * [description] + * + * @property {boolean} ignoreEvents + * @default false + * @since 3.0.0 + */ this.ignoreEvents = false; + /** + * [description] + * + * @property {Phaser.Geom.Rectangle} bounds + * @since 3.0.0 + */ this.bounds = new Rectangle(); + /** + * [description] + * + * @property {object} _tempPoint + * @private + * @since 3.0.0 + */ this._tempPoint = { x: 0, y: 0 }; + + /** + * [description] + * + * @property {array} _tempHitTest + * @private + * @default [] + * @since 3.0.0 + */ this._tempHitTest = []; game.events.once('boot', this.boot, this); }, /** - * The Boot handler is called by Phaser.Game when it first starts up. - * The renderer is available by now. - */ + * The Boot handler is called by Phaser.Game when it first starts up. + * The renderer is available by now. + * + * @method Phaser.Input.InputManager#boot + * @since 3.0.0 + */ boot: function () { this.canvas = this.game.canvas; @@ -71,6 +195,12 @@ var InputManager = new Class({ this.gamepad.boot(); }, + /** + * [description] + * + * @method Phaser.Input.InputManager#updateBounds + * @since 3.0.0 + */ updateBounds: function () { var clientRect = this.canvas.getBoundingClientRect(); @@ -82,6 +212,14 @@ var InputManager = new Class({ bounds.height = clientRect.height; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#update + * @since 3.0.0 + * + * @param {[type]} time - [description] + */ update: function (time) { this.keyboard.update(); @@ -156,12 +294,23 @@ var InputManager = new Class({ } }, - // Will always return an array. - // Array contains matching Interactive Objects. - // Array will be empty if no objects were matched. - - // x/y = pointer x/y (un-translated) - + /** + * Will always return an array. + * Array contains matching Interactive Objects. + * Array will be empty if no objects were matched. + * x/y = pointer x/y (un-translated) + * + * @method Phaser.Input.InputManager#hitTest + * @since 3.0.0 + * + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * @param {[type]} gameObjects - [description] + * @param {[type]} camera - [description] + * @param {[type]} output - [description] + * + * @return {[type]} [description] + */ hitTest: function (x, y, gameObjects, camera, output) { if (output === undefined) { output = this._tempHitTest; } @@ -207,9 +356,19 @@ var InputManager = new Class({ return output; }, - // x/y MUST be translated before being passed to this function, - // unless the gameObject is guaranteed to not be rotated or scaled in any way - + /** + * x/y MUST be translated before being passed to this function, + * unless the gameObject is guaranteed to not be rotated or scaled in any way. + * + * @method Phaser.Input.InputManager#pointWithinHitArea + * @since 3.0.0 + * + * @param {[type]} gameObject - [description] + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * + * @return {boolean} [description] + */ pointWithinHitArea: function (gameObject, x, y) { var input = gameObject.input; @@ -231,9 +390,19 @@ var InputManager = new Class({ } }, - // x/y MUST be translated before being passed to this function, unless the gameObject is guaranteed to - // be not rotated or scaled in any way - + /** + * x/y MUST be translated before being passed to this function, + * unless the gameObject is guaranteed to not be rotated or scaled in any way. + * + * @method Phaser.Input.InputManager#pointWithinInteractiveObject + * @since 3.0.0 + * + * @param {[type]} object - [description] + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * + * @return {boolean} [description] + */ pointWithinInteractiveObject: function (object, x, y) { if (!object.hitArea) @@ -251,32 +420,83 @@ var InputManager = new Class({ return object.hitAreaCallback(object.hitArea, x, y, object); }, - // Called by Pointer class + /** + * [description] + * + * @method Phaser.Input.InputManager#transformX + * @since 3.0.0 + * + * @param {[type]} pageX - [description] + * + * @return {number} [description] + */ transformX: function (pageX) { return (pageX - this.bounds.left) * this.scale.x; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#transformY + * @since 3.0.0 + * + * @param {[type]} pageY - [description] + * + * @return {number} [description] + */ transformY: function (pageY) { return (pageY - this.bounds.top) * this.scale.y; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#getOffsetX + * @since 3.0.0 + * + * @return {number} [description] + */ getOffsetX: function () { return this.bounds.left; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#getOffsetY + * @since 3.0.0 + * + * @return {number} [description] + */ getOffsetY: function () { return this.bounds.top; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#getScaleX + * @since 3.0.0 + * + * @return {number} [description] + */ getScaleX: function () { return this.game.config.width / this.bounds.width; }, + /** + * [description] + * + * @method Phaser.Input.InputManager#getScaleY + * @since 3.0.0 + * + * @return {number} [description] + */ getScaleY: function () { return this.game.config.height / this.bounds.height; diff --git a/src/input/InputPlugin.js b/src/input/InputPlugin.js index 333eaebd0..64cffa22c 100644 --- a/src/input/InputPlugin.js +++ b/src/input/InputPlugin.js @@ -1,21 +1,16 @@ -var Class = require('../utils/Class'); -var EventEmitter = require('eventemitter3'); -var DistanceBetween = require('../math/distance/DistanceBetween'); -var InteractiveObject = require('./InteractiveObject'); var Circle = require('../geom/circle/Circle'); var CircleContains = require('../geom/circle/Contains'); +var Class = require('../utils/Class'); +var DistanceBetween = require('../math/distance/DistanceBetween'); var Ellipse = require('../geom/ellipse/Ellipse'); var EllipseContains = require('../geom/ellipse/Contains'); +var EventEmitter = require('eventemitter3'); +var InteractiveObject = require('./InteractiveObject'); +var PluginManager = require('../plugins/PluginManager'); var Rectangle = require('../geom/rectangle/Rectangle'); var RectangleContains = require('../geom/rectangle/Contains'); var Triangle = require('../geom/triangle/Triangle'); var TriangleContains = require('../geom/triangle/Contains'); -var PluginManager = require('../plugins/PluginManager'); - -// Drag Events -// https://developer.mozilla.org/en-US/docs/Web/API/HTML_Drag_and_Drop_API -// Mouse Events -// https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent var InputPlugin = new Class({ @@ -23,13 +18,35 @@ var InputPlugin = new Class({ initialize: + /** + * [description] + * + * @class InputPlugin + * @extends EventEmitter + * @memberOf Phaser.Input + * @constructor + * @since 3.0.0 + * + * @param {Phaser.Scene} scene - The Scene that owns this plugin. + */ function InputPlugin (scene) { EventEmitter.call(this); - // The Scene that owns this plugin + /** + * The Scene that owns this plugin. + * + * @property {Phaser.Scene} scene + * @since 3.0.0 + */ this.scene = scene; + /** + * [description] + * + * @property {[type]} systems + * @since 3.0.0 + */ this.systems = scene.sys; if (!scene.sys.settings.isBooted) @@ -37,64 +54,189 @@ var InputPlugin = new Class({ scene.sys.events.once('boot', this.boot, this); } - // InputManager + /** + * [description] + * + * @property {Phaser.Input.InputManager} manager + * @since 3.0.0 + */ this.manager = scene.sys.game.input; - // A reference to this.scene.sys.displayList (set in boot) + /** + * A reference to this.scene.sys.displayList (set in boot) + * + * @property {null} displayList + * @since 3.0.0 + */ this.displayList; - // A reference to the this.scene.sys.cameras (set in boot) + /** + * A reference to the this.scene.sys.cameras (set in boot) + * + * @property {null} cameras + * @since 3.0.0 + */ this.cameras; - // Proxy references available via the Scene + /** + * [description] + * + * @property {Phaser.Input.Keyboard.KeyboardManager} keyboard + * @since 3.0.0 + */ this.keyboard = this.manager.keyboard; + + /** + * [description] + * + * @property {Phaser.Input.Mouse.MouseManager} mouse + * @since 3.0.0 + */ this.mouse = this.manager.mouse; + + /** + * [description] + * + * @property {Phaser.Input.Gamepad.GamepadManager} gamepad + * @since 3.0.0 + */ this.gamepad = this.manager.gamepad; - // Only fire callbacks and events on the top-most Game Object in the display list (emulating DOM behavior) - // and ignore any GOs below it, or call them all? + /** + * Only fire callbacks and events on the top-most Game Object in the display list (emulating DOM behavior) + * and ignore any GOs below it, or call them all? + * + * @property {boolean} topOnly + * @default true + * @since 3.0.0 + */ this.topOnly = true; - // How often should the pointer input be checked? - // Time given in ms - // Pointer will *always* be checked if it has been moved by the user. - // This controls how often it will be polled if it hasn't been moved. - // Set to 0 to poll constantly. Set to -1 to only poll on user movement. + /** + * How often should the pointer input be checked? + * Time given in ms + * Pointer will *always* be checked if it has been moved by the user. + * This controls how often it will be polled if it hasn't been moved. + * Set to 0 to poll constantly. Set to -1 to only poll on user movement. + * + * @property {integer} pollRate + * @default -1 + * @since 3.0.0 + */ this.pollRate = -1; - // Internal counter + /** + * [description] + * + * @property {number} _pollTimer + * @private + * @default 0 + * @since 3.0.0 + */ this._pollTimer = 0; - // The distance, in pixels, the pointer has to move while being held down, before it thinks it is being dragged. + /** + * The distance, in pixels, the pointer has to move while being held down, before it thinks it is being dragged. + * + * @property {number} dragDistanceThreshold + * @default 0 + * @since 3.0.0 + */ this.dragDistanceThreshold = 0; - // The amount of time, in ms, the pointer has to be held down before it thinks it is dragging. + /** + * The amount of time, in ms, the pointer has to be held down before it thinks it is dragging. + * + * @property {number} dragTimeThreshold + * @default 0 + * @since 3.0.0 + */ this.dragTimeThreshold = 0; - // Used to temporarily store the results of the Hit Test + /** + * Used to temporarily store the results of the Hit Test + * + * @property {array} _temp + * @private + * @default [] + * @since 3.0.0 + */ this._temp = []; - // list: A list of all Game Objects that have been set to be interactive + /** + * A list of all Game Objects that have been set to be interactive. + * + * @property {array} _list + * @private + * @default [] + * @since 3.0.0 + */ this._list = []; - // pendingInsertion: Objects waiting to be inserted to the list on the next call to 'begin' + /** + * Objects waiting to be inserted to the list on the next call to 'begin'. + * + * @property {array} _pendingInsertion + * @private + * @default [] + * @since 3.0.0 + */ this._pendingInsertion = []; - // pendingRemoval: Objects waiting to be removed from the list on the next call to 'begin' + /** + * Objects waiting to be removed from the list on the next call to 'begin'. + * + * @property {array} _pendingRemoval + * @private + * @default [] + * @since 3.0.0 + */ this._pendingRemoval = []; - // draggable: A list of all Game Objects that have been enabled for dragging + /** + * A list of all Game Objects that have been enabled for dragging. + * + * @property {array} _draggable + * @private + * @default [] + * @since 3.0.0 + */ this._draggable = []; - // drag: A list of all Interactive Objects currently considered as being 'draggable' by any pointer, indexed by pointer ID + /** + * A list of all Interactive Objects currently considered as being 'draggable' by any pointer, indexed by pointer ID. + * + * @property {[type]} _drag + * @private + * @since 3.0.0 + */ this._drag = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [] }; - // over: A list of all Interactive Objects currently considered as being 'over' by any pointer, indexed by pointer ID + /** + * A list of all Interactive Objects currently considered as being 'over' by any pointer, indexed by pointer ID. + * + * @property {[type]} _over + * @private + * @since 3.0.0 + */ this._over = { 0: [], 1: [], 2: [], 3: [], 4: [], 5: [], 6: [], 7: [], 8: [], 9: [] }; + /** + * [description] + * + * @property {[type]} _validTypes + * @private + * @since 3.0.0 + */ this._validTypes = [ 'onDown', 'onUp', 'onOver', 'onOut', 'onMove', 'onDragStart', 'onDrag', 'onDragEnd', 'onDragEnter', 'onDragLeave', 'onDragOver', 'onDrop' ]; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#boot + * @since 3.0.0 + */ boot: function () { var eventEmitter = this.systems.events; @@ -109,6 +251,14 @@ var InputPlugin = new Class({ this.displayList = this.systems.displayList; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#preUpdate + * @since 3.0.0 + * + * @return {[type]} [description] + */ preUpdate: function () { var removeList = this._pendingRemoval; @@ -149,6 +299,16 @@ var InputPlugin = new Class({ this._list = current.concat(insertList.splice(0)); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#clear + * @since 3.0.0 + * + * @param {[type]} gameObject - [description] + * + * @return {[type]} [description] + */ clear: function (gameObject) { var input = gameObject.input; @@ -164,11 +324,31 @@ var InputPlugin = new Class({ return gameObject; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#disable + * @since 3.0.0 + * + * @param {[type]} gameObject - [description] + */ disable: function (gameObject) { gameObject.input.enabled = false; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#enable + * @since 3.0.0 + * + * @param {[type]} gameObject - [description] + * @param {[type]} shape - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ enable: function (gameObject, shape, callback) { if (gameObject.input) @@ -185,6 +365,16 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#hitTestPointer + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + * + * @return {[type]} [description] + */ hitTestPointer: function (pointer) { var camera = this.cameras.getCameraBelowPointer(pointer); @@ -203,6 +393,16 @@ var InputPlugin = new Class({ } }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#processDownEvents + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + * + * @return {[type]} [description] + */ processDownEvents: function (pointer) { var currentlyOver = this._temp; @@ -232,6 +432,17 @@ var InputPlugin = new Class({ return total; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#processDragEvents + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + * @param {[type]} time - [description] + * + * @return {[type]} [description] + */ processDragEvents: function (pointer, time) { if (this._draggable.length === 0) @@ -491,6 +702,16 @@ var InputPlugin = new Class({ return (pointer.dragState > 0); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#processMoveEvents + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + * + * @return {[type]} [description] + */ processMoveEvents: function (pointer) { var currentlyOver = this._temp; @@ -524,6 +745,16 @@ var InputPlugin = new Class({ return total; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#processOverOutEvents + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + * + * @return {[type]} [description] + */ processOverOutEvents: function (pointer) { var currentlyOver = this._temp; @@ -629,6 +860,14 @@ var InputPlugin = new Class({ return previouslyOver.length; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#processUpEvents + * @since 3.0.0 + * + * @param {[type]} pointer - [description] + */ processUpEvents: function (pointer) { var currentlyOver = this._temp; @@ -652,7 +891,16 @@ var InputPlugin = new Class({ } }, - // Queues a Game Object for insertion into this Input Manager on the next update. + /** + * Queues a Game Object for insertion into this Input Manager on the next update. + * + * @method Phaser.Input.InputPlugin#queueForInsertion + * @since 3.0.0 + * + * @param {[type]} child - [description] + * + * @return {[type]} [description] + */ queueForInsertion: function (child) { if (this._pendingInsertion.indexOf(child) === -1 && this._list.indexOf(child) === -1) @@ -663,7 +911,16 @@ var InputPlugin = new Class({ return this; }, - // Queues a Game Object for removal from this Input Manager on the next update. + /** + * Queues a Game Object for removal from this Input Manager on the next update. + * + * @method Phaser.Input.InputPlugin#queueForRemoval + * @since 3.0.0 + * + * @param {[type]} child - [description] + * + * @return {[type]} [description] + */ queueForRemoval: function (child) { this._pendingRemoval.push(child); @@ -671,6 +928,17 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setDraggable + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} value - [description] + * + * @return {[type]} [description] + */ setDraggable: function (gameObjects, value) { if (value === undefined) { value = true; } @@ -701,6 +969,18 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitArea + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} shape - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitArea: function (gameObjects, shape, callback) { if (shape === undefined) @@ -725,6 +1005,20 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitAreaCircle + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * @param {[type]} radius - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitAreaCircle: function (gameObjects, x, y, radius, callback) { if (callback === undefined) { callback = CircleContains; } @@ -734,6 +1028,21 @@ var InputPlugin = new Class({ return this.setHitArea(gameObjects, shape, callback); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitAreaEllipse + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * @param {[type]} width - [description] + * @param {[type]} height - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitAreaEllipse: function (gameObjects, x, y, width, height, callback) { if (callback === undefined) { callback = EllipseContains; } @@ -743,6 +1052,17 @@ var InputPlugin = new Class({ return this.setHitArea(gameObjects, shape, callback); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitAreaFromTexture + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitAreaFromTexture: function (gameObjects, callback) { if (callback === undefined) { callback = RectangleContains; } @@ -782,6 +1102,21 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitAreaRectangle + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} x - [description] + * @param {[type]} y - [description] + * @param {[type]} width - [description] + * @param {[type]} height - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitAreaRectangle: function (gameObjects, x, y, width, height, callback) { if (callback === undefined) { callback = RectangleContains; } @@ -791,6 +1126,23 @@ var InputPlugin = new Class({ return this.setHitArea(gameObjects, shape, callback); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setHitAreaTriangle + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * @param {[type]} x1 - [description] + * @param {[type]} y1 - [description] + * @param {[type]} x2 - [description] + * @param {[type]} y2 - [description] + * @param {[type]} x3 - [description] + * @param {[type]} y3 - [description] + * @param {[type]} callback - [description] + * + * @return {[type]} [description] + */ setHitAreaTriangle: function (gameObjects, x1, y1, x2, y2, x3, y3, callback) { if (callback === undefined) { callback = TriangleContains; } @@ -800,6 +1152,14 @@ var InputPlugin = new Class({ return this.setHitArea(gameObjects, shape, callback); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setPollAlways + * @since 3.0.0 + * + * @return {[type]} [description] + */ setPollAlways: function () { this.pollRate = 0; @@ -808,6 +1168,14 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setPollOnMove + * @since 3.0.0 + * + * @return {[type]} [description] + */ setPollOnMove: function () { this.pollRate = -1; @@ -816,6 +1184,16 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setPollRate + * @since 3.0.0 + * + * @param {[type]} value - [description] + * + * @return {[type]} [description] + */ setPollRate: function (value) { this.pollRate = value; @@ -824,6 +1202,16 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setGlobalTopOnly + * @since 3.0.0 + * + * @param {[type]} value - [description] + * + * @return {[type]} [description] + */ setGlobalTopOnly: function (value) { this.manager.globalTopOnly = value; @@ -831,6 +1219,16 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#setTopOnly + * @since 3.0.0 + * + * @param {[type]} value - [description] + * + * @return {[type]} [description] + */ setTopOnly: function (value) { this.topOnly = value; @@ -838,8 +1236,17 @@ var InputPlugin = new Class({ return this; }, - // Given an array of Game Objects, sort the array and return it, - // so that the objects are in index order with the lowest at the bottom. + /** + * Given an array of Game Objects, sort the array and return it, + * so that the objects are in index order with the lowest at the bottom. + * + * @method Phaser.Input.InputPlugin#sortGameObjects + * @since 3.0.0 + * + * @param {[type]} gameObjects - [description] + * + * @return {[type]} [description] + */ sortGameObjects: function (gameObjects) { if (gameObjects.length < 2) @@ -852,7 +1259,17 @@ var InputPlugin = new Class({ return gameObjects.sort(this.sortHandlerGO.bind(this)); }, - // Return the child lowest down the display list (with the smallest index) + /** + * Return the child lowest down the display list (with the smallest index) + * + * @method Phaser.Input.InputPlugin#sortHandlerGO + * @since 3.0.0 + * + * @param {[type]} childA - [description] + * @param {[type]} childB - [description] + * + * @return {[type]} [description] + */ sortHandlerGO: function (childA, childB) { // The higher the index, the lower down the display list they are. @@ -874,7 +1291,17 @@ var InputPlugin = new Class({ return 0; }, - // Return the child lowest down the display list (with the smallest index) + /** + * Return the child lowest down the display list (with the smallest index) + * + * @method Phaser.Input.InputPlugin#sortHandlerIO + * @since 3.0.0 + * + * @param {[type]} childA - [description] + * @param {[type]} childB - [description] + * + * @return {[type]} [description] + */ sortHandlerIO: function (childA, childB) { // The higher the index, the lower down the display list they are. @@ -896,8 +1323,17 @@ var InputPlugin = new Class({ return 0; }, - // Given an array of Interactive Objects, sort the array and return it, - // so that the objects are in index order with the lowest at the bottom. + /** + * Given an array of Interactive Objects, sort the array and return it, + * so that the objects are in index order with the lowest at the bottom. + * + * @method Phaser.Input.InputPlugin#sortInteractiveObjects + * @since 3.0.0 + * + * @param {[type]} interactiveObjects - [description] + * + * @return {[type]} [description] + */ sortInteractiveObjects: function (interactiveObjects) { if (interactiveObjects.length < 2) @@ -910,6 +1346,14 @@ var InputPlugin = new Class({ return interactiveObjects.sort(this.sortHandlerIO.bind(this)); }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#stopPropagation + * @since 3.0.0 + * + * @return {[type]} [description] + */ stopPropagation: function () { if (this.manager.globalTopOnly) @@ -920,6 +1364,17 @@ var InputPlugin = new Class({ return this; }, + /** + * [description] + * + * @method Phaser.Input.InputPlugin#update + * @since 3.0.0 + * + * @param {[type]} time - [description] + * @param {[type]} delta - [description] + * + * @return {[type]} [description] + */ update: function (time, delta) { var manager = this.manager; @@ -991,7 +1446,12 @@ var InputPlugin = new Class({ } }, - // Scene that owns this is shutting down + /** + * The Scene that owns this plugin is shutting down. + * + * @method Phaser.Input.InputPlugin#shutdown + * @since 3.0.0 + */ shutdown: function () { this._temp.length = 0; @@ -1009,7 +1469,12 @@ var InputPlugin = new Class({ this.removeAllListeners(); }, - // Game level nuke + /** + * [description] + * + * @method Phaser.Input.InputPlugin#destroy + * @since 3.0.0 + */ destroy: function () { this.shutdown(); @@ -1023,6 +1488,13 @@ var InputPlugin = new Class({ this.gamepad = undefined; }, + /** + * The current active input Pointer. + * + * @name Phaser.Input.InputPlugin#activePointer + * @property {Phaser.Input.Pointer} activePointer + * @since 3.0.0 + */ activePointer: { get: function () @@ -1032,8 +1504,14 @@ var InputPlugin = new Class({ }, - // The x/y coordinates of the ActivePointer based on the first camera in the camera list. - // This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch. + /** + * The x coordinates of the ActivePointer based on the first camera in the camera list. + * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch. + * + * @name Phaser.Input.InputPlugin#x + * @property {number} x + * @since 3.0.0 + */ x: { get: function () @@ -1043,6 +1521,14 @@ var InputPlugin = new Class({ }, + /** + * The y coordinates of the ActivePointer based on the first camera in the camera list. + * This is only safe to use if your game has just 1 non-transformed camera and doesn't use multi-touch. + * + * @name Phaser.Input.InputPlugin#y + * @property {number} y + * @since 3.0.0 + */ y: { get: function () @@ -1050,7 +1536,7 @@ var InputPlugin = new Class({ return this.manager.activePointer.y; } - }, + } }); diff --git a/src/input/gamepad/Axis.js b/src/input/gamepad/Axis.js index 9803ae03e..1b1eba635 100644 --- a/src/input/gamepad/Axis.js +++ b/src/input/gamepad/Axis.js @@ -6,26 +6,76 @@ var Axis = new Class({ initialize: + /** + * [description] + * + * @class Axis + * @memberOf Phaser.Input.Gamepad + * @constructor + * @since 3.0.0 + * + * @param {[type]} pad - [description] + * @param {integer} index - [description] + */ function Axis (pad, index) { + /** + * [description] + * + * @property {[type]} pad + * @since 3.0.0 + */ this.pad = pad; + /** + * [description] + * + * @property {[type]} events + * @since 3.0.0 + */ this.events = pad.events; + /** + * [description] + * + * @property {integer} index + * @since 3.0.0 + */ this.index = index; - // Between -1 and 1 with 0 being dead center + /** + * Between -1 and 1 with 0 being dead center. + * + * @property {float} value + * @default 0 + * @since 3.0.0 + */ this.value = 0; this.threshold = 0.05; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.Axis#update + * @since 3.0.0 + * + * @param {[type]} value - [description] + */ update: function (value) { this.value = value; }, - // Applies threshold to the value and returns it + /** + * Applies threshold to the value and returns it. + * + * @method Phaser.Input.Gamepad.Axis#getValue + * @since 3.0.0 + * + * @return {[type]} [description] + */ getValue: function () { var percentage = (Math.abs(this.value) - this.threshold) / (1 - this.threshold); diff --git a/src/input/gamepad/Button.js b/src/input/gamepad/Button.js index a0b3313d4..8a629a369 100644 --- a/src/input/gamepad/Button.js +++ b/src/input/gamepad/Button.js @@ -6,23 +6,79 @@ var Button = new Class({ initialize: + /** + * [description] + * + * @class Button + * @memberOf Phaser.Input.Gamepad + * @constructor + * @since 3.0.0 + * + * @param {[type]} pad - [description] + * @param {integer} index - [description] + */ function Button (pad, index) { + /** + * [description] + * + * @property {[type]} pad + * @since 3.0.0 + */ this.pad = pad; + /** + * [description] + * + * @property {[type]} events + * @since 3.0.0 + */ this.events = pad.events; + /** + * [description] + * + * @property {integer} index + * @since 3.0.0 + */ this.index = index; - // Between 0 and 1 + /** + * Between 0 and 1. + * + * @property {float} value + * @default 0 + * @since 3.0.0 + */ this.value = 0; - // Can be set for Analogue buttons to enable a 'pressure' threshold before considered as 'pressed' + /** + * Can be set for Analogue buttons to enable a 'pressure' threshold before considered as 'pressed'. + * + * @property {float} threshold + * @default 0 + * @since 3.0.0 + */ this.threshold = 0; + /** + * Is the Button being pressed down or not? + * + * @property {boolean} pressed + * @default false + * @since 3.0.0 + */ this.pressed = false; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.Button#update + * @since 3.0.0 + * + * @param {[type]} data - [description] + */ update: function (data) { this.value = data.value; diff --git a/src/input/gamepad/Gamepad.js b/src/input/gamepad/Gamepad.js index 711b0681f..90e16308a 100644 --- a/src/input/gamepad/Gamepad.js +++ b/src/input/gamepad/Gamepad.js @@ -8,54 +8,130 @@ var Gamepad = new Class({ initialize: + /** + * [description] + * + * @class Gamepad + * @memberOf Phaser.Input.Gamepad + * @constructor + * @since 3.0.0 + * + * @param {Phaser.Input.Gamepad.GamepadManager} manager - [description] + * @param {[type]} id - [description] + * @param {[type]} index - [description] + */ function Gamepad (manager, id, index) { + /** + * [description] + * + * @property {Phaser.Input.Gamepad.GamepadManager} manager + * @since 3.0.0 + */ this.manager = manager; + /** + * [description] + * + * @property {[type]} events + * @since 3.0.0 + */ this.events = manager.events; + /** + * [description] + * + * @property {[type]} id + * @since 3.0.0 + */ this.id = id; + /** + * [description] + * + * @property {[type]} index + * @since 3.0.0 + */ this.index = index; + /** + * [description] + * + * @property {boolean} connected + * @default true + * @since 3.0.0 + */ this.connected = true; + /** + * [description] + * + * @property {number} timestamp + * @default 0 + * @since 3.0.0 + */ this.timestamp = 0; + /** + * [description] + * + * @property {array} buttons + * @default [] + * @since 3.0.0 + */ this.buttons = []; + + /** + * [description] + * + * @property {array} axes + * @default [] + * @since 3.0.0 + */ this.axes = []; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.Gamepad#update + * @since 3.0.0 + * + * @param {[type]} data - [description] + */ update: function (data) { this.timestamp = data.timestamp; this.connected = data.connected; - // Buttons + var i; - for (var i = 0; i < data.buttons.length; i++) + var axes = this.axes; + var buttons = this.buttons; + + for (i = 0; i < data.buttons.length; i++) { var buttonData = data.buttons[i]; - if (this.buttons[i] === undefined) + if (buttons[i] === undefined) { - this.buttons[i] = new Button(this, i); + buttons[i] = new Button(this, i); } - this.buttons[i].update(buttonData); + buttons[i].update(buttonData); } // Axes - for (var i = 0; i < data.axes.length; i++) + for (i = 0; i < data.axes.length; i++) { var axisData = data.axes[i]; - if (this.axes[i] === undefined) + if (axes[i] === undefined) { - this.axes[i] = new Axis(this, i); + axes[i] = new Axis(this, i); } - this.axes[i].update(axisData); + axes[i].update(axisData); } } diff --git a/src/input/gamepad/GamepadManager.js b/src/input/gamepad/GamepadManager.js index 76158f4c6..625f57ad1 100644 --- a/src/input/gamepad/GamepadManager.js +++ b/src/input/gamepad/GamepadManager.js @@ -12,24 +12,84 @@ var GamepadManager = new Class({ initialize: + /** + * [description] + * + * @class GamepadManager + * @memberOf Phaser.Input.Gamepad + * @constructor + * @since 3.0.0 + * + * @param {Phaser.Input.InputManager} inputManager - [description] + */ function GamepadManager (inputManager) { + /** + * [description] + * + * @property {Phaser.Input.InputManager} manager + * @since 3.0.0 + */ this.manager = inputManager; + /** + * [description] + * + * @property {[type]} events + * @since 3.0.0 + */ this.events = inputManager.events; + /** + * [description] + * + * @property {boolean} enabled + * @default false + * @since 3.0.0 + */ this.enabled = false; + /** + * [description] + * + * @property {null} target + * @since 3.0.0 + */ this.target; + /** + * [description] + * + * @property {null} handler + * @since 3.0.0 + */ this.handler; + /** + * [description] + * + * @property {array} gamepads + * @default [] + * @since 3.0.0 + */ this.gamepads = []; - // Standard FIFO queue + /** + * Standard FIFO queue. + * + * @property {array} queue + * @default [] + * @since 3.0.0 + */ this.queue = []; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#boot + * @since 3.0.0 + */ boot: function () { var config = this.manager.config; @@ -44,11 +104,19 @@ var GamepadManager = new Class({ } }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#startListeners + * @since 3.0.0 + * + * @return {[type]} [description] + */ startListeners: function () { var queue = this.queue; - var handler = function (event) + var handler = function handler (event) { if (event.defaultPrevented) { @@ -61,25 +129,42 @@ var GamepadManager = new Class({ this.handler = handler; - this.target.addEventListener('gamepadconnected', handler, false); - this.target.addEventListener('gamepaddisconnected', handler, false); + var target = this.target; + + target.addEventListener('gamepadconnected', handler, false); + target.addEventListener('gamepaddisconnected', handler, false); // FF only for now: - this.target.addEventListener('gamepadbuttondown', handler, false); - this.target.addEventListener('gamepadbuttonup', handler, false); - this.target.addEventListener('gamepadaxismove', handler, false); + target.addEventListener('gamepadbuttondown', handler, false); + target.addEventListener('gamepadbuttonup', handler, false); + target.addEventListener('gamepadaxismove', handler, false); }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#stopListeners + * @since 3.0.0 + */ stopListeners: function () { - this.target.removeEventListener('gamepadconnected', this.handler); - this.target.removeEventListener('gamepaddisconnected', this.handler); + var target = this.target; + var handler = this.handler; - this.target.removeEventListener('gamepadbuttondown', this.handler); - this.target.removeEventListener('gamepadbuttonup', this.handler); - this.target.removeEventListener('gamepadaxismove', this.handler); + target.removeEventListener('gamepadconnected', handler); + target.removeEventListener('gamepaddisconnected', handler); + + target.removeEventListener('gamepadbuttondown', handler); + target.removeEventListener('gamepadbuttonup', handler); + target.removeEventListener('gamepadaxismove', handler); }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#disconnectAll + * @since 3.0.0 + */ disconnectAll: function () { for (var i = 0; i < this.gamepads.length; i++) @@ -88,6 +173,16 @@ var GamepadManager = new Class({ } }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#addPad + * @since 3.0.0 + * + * @param {[type]} pad - [description] + * + * @return {[type]} [description] + */ addPad: function (pad) { var gamepad = new Gamepad(this, pad.id, pad.index); @@ -97,10 +192,28 @@ var GamepadManager = new Class({ return gamepad; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#removePad + * @since 3.0.0 + * + * @param {[type]} index - [description] + * @param {[type]} pad - [description] + */ removePad: function (index, pad) { + // TODO }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#refreshPads + * @since 3.0.0 + * + * @param {[type]} pads - [description] + */ refreshPads: function (pads) { if (!pads) @@ -129,6 +242,14 @@ var GamepadManager = new Class({ } }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#getAll + * @since 3.0.0 + * + * @return {[type]} [description] + */ getAll: function () { var out = []; @@ -144,6 +265,16 @@ var GamepadManager = new Class({ return out; }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#getPad + * @since 3.0.0 + * + * @param {[type]} index - [description] + * + * @return {[type]} [description] + */ getPad: function (index) { for (var i = 0; i < this.gamepads.length; i++) @@ -155,6 +286,14 @@ var GamepadManager = new Class({ } }, + /** + * [description] + * + * @method Phaser.Input.Gamepad.GamepadManager#update + * @since 3.0.0 + * + * @return {[type]} [description] + */ update: function () { if (!this.enabled) @@ -200,6 +339,13 @@ var GamepadManager = new Class({ } }, + /** + * The total number of connected game pads. + * + * @name Phaser.Input.Gamepad.GamepadManager#total + * @property {number} total + * @since 3.0.0 + */ total: { get: function ()