diff --git a/README.md b/README.md index ea4498419..37ed07530 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ Version 2.0.4 - "Mos Shirare" - in development * TypeScript definitions fixes and updates (thanks @clark-stevenson) * Timer has removed all use of local temporary vars in the core update loop. +* The Input.reset `hard` reset parameter is now passed down to the Keyboard and Key reset methods. ### New Features @@ -68,6 +69,10 @@ Version 2.0.4 - "Mos Shirare" - in development * Loader now has an onFileStart event you can listen for (thanks @codevinsky, #705) * Timer.clearPendingEvents will purge any events marked for deletion, this is run automatically at the start of the update loop. * Device.crosswalk detects if your game is running under Intels Crosswalk XDK. +* Keyboard.reset has a new `hard` parameter which controls the severity of the reset. A soft reset doesn't remove any callbacks or event listeners. +* Key.reset has a new `hard` parameter which controls the severity of the reset. A soft reset doesn't remove any callbacks or event listeners. +* InputManager.resetLocked - If the Input Manager has been reset locked then all calls made to InputManager.reset, such as from a State change, are ignored. + ### Bug Fixes diff --git a/src/input/Input.js b/src/input/Input.js index 095913f30..2e1d12eec 100644 --- a/src/input/Input.js +++ b/src/input/Input.js @@ -241,6 +241,12 @@ Phaser.Input = function (game) { */ // this.gestures = null; + /** + * @property {boolean} resetLocked - If the Input Manager has been reset locked then all calls made to InputManager.reset, such as from a State change, are ignored. + * @default + */ + this.resetLocked = false; + /** * @property {Phaser.Signal} onDown - A Signal that is dispatched each time a pointer is pressed down. */ @@ -470,20 +476,23 @@ Phaser.Input.prototype = { }, /** - * Reset all of the Pointers and Input states + * Reset all of the Pointers and Input states. The optional `hard` parameter will reset any events or callbacks that may be bound. + * Input.reset is called automatically during a State change or if a game loses focus / visibility. If you wish to control the reset + * directly yourself then set InputManager.resetLocked to `true`. + * * @method Phaser.Input#reset - * @param {boolean} hard - A soft reset (hard = false) won't reset any Signals that might be bound. A hard reset will. + * @param {boolean} [hard=false] - A soft reset won't reset any events or callbacks that are bound. A hard reset will. */ reset: function (hard) { - if (this.game.isBooted === false) + if (!this.game.isBooted || this.resetLocked) { return; } - if (typeof hard == 'undefined') { hard = false; } + if (typeof hard === 'undefined') { hard = false; } - this.keyboard.reset(); + this.keyboard.reset(hard); this.mousePointer.reset(); this.gamepad.reset(); @@ -502,7 +511,7 @@ Phaser.Input.prototype = { this.game.canvas.style.cursor = 'inherit'; } - if (hard === true) + if (hard) { this.onDown.dispose(); this.onUp.dispose(); diff --git a/src/input/Key.js b/src/input/Key.js index 58428cddd..a3a8e8b70 100644 --- a/src/input/Key.js +++ b/src/input/Key.js @@ -193,8 +193,11 @@ Phaser.Key.prototype = { * associated with the onDown and onUp events and nulls the onHoldCallback if set. * * @method Phaser.Key#reset + * @param {boolean} [hard=true] - A soft reset won't reset any events or callbacks that are bound to this Key. A hard reset will. */ - reset: function () { + reset: function (hard) { + + if (typeof hard === 'undefined') { hard = true; } this.isDown = false; this.isUp = true; @@ -202,10 +205,13 @@ Phaser.Key.prototype = { this.duration = this.game.time.now - this.timeDown; this.enabled = true; - this.onDown.removeAll(); - this.onUp.removeAll(); - this.onHoldCallback = null; - this.onHoldContext = null; + if (hard) + { + this.onDown.removeAll(); + this.onUp.removeAll(); + this.onHoldCallback = null; + this.onHoldContext = null; + } }, diff --git a/src/input/Keyboard.js b/src/input/Keyboard.js index 8f8709985..3894bde32 100644 --- a/src/input/Keyboard.js +++ b/src/input/Keyboard.js @@ -358,8 +358,11 @@ Phaser.Keyboard.prototype = { * Resets all Keys. * * @method Phaser.Keyboard#reset + * @param {boolean} [hard=true] - A soft reset won't reset any events or callbacks that are bound to the Keys. A hard reset will. */ - reset: function () { + reset: function (hard) { + + if (typeof hard === 'undefined') { hard = true; } this.event = null; @@ -369,7 +372,7 @@ Phaser.Keyboard.prototype = { { if (this._keys[i]) { - this._keys[i].reset(); + this._keys[i].reset(hard); } }