Skip to content

Commit 2ba6b4f

Browse files
committed
Added support for Pointer Lock API.
1 parent 60f0e89 commit 2ba6b4f

2 files changed

Lines changed: 66 additions & 0 deletions

File tree

src/input/Mouse.js

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ Phaser.Mouse.prototype = {
2323
*/
2424
disabled: false,
2525

26+
/**
27+
* If the mouse has been Pointer Locked successfully this will be set to true.
28+
* @type {bool}
29+
*/
30+
locked: false,
31+
2632
/**
2733
* Starts the event listeners running
2834
* @method start
@@ -115,6 +121,58 @@ Phaser.Mouse.prototype = {
115121

116122
this.game.input.mousePointer.stop(event);
117123

124+
},
125+
126+
requestPointerLock: function () {
127+
128+
if (this.game.device.pointerLock)
129+
{
130+
var element = this.game.stage.canvas;
131+
132+
element.requestPointerLock = element.requestPointerLock || element.mozRequestPointerLock || element.webkitRequestPointerLock;
133+
134+
element.requestPointerLock();
135+
136+
var _this = this;
137+
138+
this._pointerLockChange = function (event) {
139+
return _this.pointerLockChange(event);
140+
};
141+
142+
document.addEventListener('pointerlockchange', this._pointerLockChange, false);
143+
document.addEventListener('mozpointerlockchange', this._pointerLockChange, false);
144+
document.addEventListener('webkitpointerlockchange', this._pointerLockChange, false);
145+
}
146+
147+
},
148+
149+
pointerLockChange: function (event) {
150+
151+
var element = this.game.stage.canvas;
152+
153+
if (document.pointerLockElement === element || document.mozPointerLockElement === element || document.webkitPointerLockElement === element)
154+
{
155+
// Pointer was successfully locked
156+
this.locked = true;
157+
}
158+
else
159+
{
160+
// Pointer was unlocked
161+
this.locked = false;
162+
}
163+
164+
},
165+
166+
releasePointerLock: function () {
167+
168+
document.exitPointerLock = document.exitPointerLock || document.mozExitPointerLock || document.webkitExitPointerLock;
169+
170+
document.exitPointerLock();
171+
172+
document.removeEventListener('pointerlockchange', this._pointerLockChange);
173+
document.removeEventListener('mozpointerlockchange', this._pointerLockChange);
174+
document.removeEventListener('webkitpointerlockchange', this._pointerLockChange);
175+
118176
},
119177

120178
/**

src/system/Device.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ Phaser.Device = function () {
114114
*/
115115
this.css3D = false;
116116

117+
/**
118+
* Is Pointer Lock available?
119+
* @type {boolean}
120+
*/
121+
this.pointerLock = false;
122+
117123
// Browser
118124

119125
/**
@@ -319,6 +325,8 @@ Phaser.Device.prototype = {
319325
if (window.navigator.msPointerEnabled) {
320326
this.mspointer = true;
321327
}
328+
329+
this.pointerLock = 'pointerLockElement' in document || 'mozPointerLockElement' in document || 'webkitPointerLockElement' in document;
322330

323331
},
324332

0 commit comments

Comments
 (0)