diff --git a/src/input/Mouse.js b/src/input/Mouse.js index 6b82e0a4..30797375 100644 --- a/src/input/Mouse.js +++ b/src/input/Mouse.js @@ -23,6 +23,12 @@ Phaser.Mouse.prototype = { */ disabled: false, + /** + * If the mouse has been Pointer Locked successfully this will be set to true. + * @type {bool} + */ + locked: false, + /** * Starts the event listeners running * @method start @@ -115,6 +121,58 @@ Phaser.Mouse.prototype = { this.game.input.mousePointer.stop(event); + }, + + requestPointerLock: function () { + + if (this.game.device.pointerLock) + { + var element = this.game.stage.canvas; + + element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock; + + element.requestPointerLock(); + + var _this = this; + + this._pointerLockChange = function (event) { + return _this.pointerLockChange(event); + }; + + document.addEventListener('pointerlockchange', this._pointerLockChange, false); + document.addEventListener('mozpointerlockchange', this._pointerLockChange, false); + document.addEventListener('webkitpointerlockchange', this._pointerLockChange, false); + } + + }, + + pointerLockChange: function (event) { + + var element = this.game.stage.canvas; + + if (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element) + { + // Pointer was successfully locked + this.locked = true; + } + else + { + // Pointer was unlocked + this.locked = false; + } + + }, + + releasePointerLock: function () { + + document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock; + + document.exitPointerLock(); + + document.removeEventListener('pointerlockchange', this._pointerLockChange); + document.removeEventListener('mozpointerlockchange', this._pointerLockChange); + document.removeEventListener('webkitpointerlockchange', this._pointerLockChange); + }, /** diff --git a/src/system/Device.js b/src/system/Device.js index e5d28df1..d3da1582 100644 --- a/src/system/Device.js +++ b/src/system/Device.js @@ -114,6 +114,12 @@ Phaser.Device = function () { */ this.css3D = false; + /** + * Is Pointer Lock available? + * @type {boolean} + */ + this.pointerLock = false; + // Browser /** @@ -319,6 +325,8 @@ Phaser.Device.prototype = { if (window.navigator.msPointerEnabled) { this.mspointer = true; } + + this.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document; },