Massive input overhaul continued

This commit is contained in:
Richard Davey
2013-05-16 21:34:24 +01:00
parent 3cdd2baff0
commit a6e8436e6d
17 changed files with 1183 additions and 546 deletions
+3 -1
View File
@@ -38,10 +38,12 @@ module Phaser {
* Local private reference to Game.
*/
private _game: Game;
/**
* Local container for storing camera.
* Local container for storing cameras.
*/
private _cameras: Camera[];
/**
* Local helper stores index of next created camera.
*/
+1 -3
View File
@@ -5,7 +5,6 @@
* Phaser - Group
*
* This class is used for organising, updating and sorting game objects.
*
*/
module Phaser {
@@ -179,7 +178,7 @@ module Phaser {
}
/**
* Adds a new <code>Basic</code> subclass (Basic, Basic, Enemy, etc) to the group.
* Adds a new <code>Basic</code> subclass (Basic, GameObject, Sprite, etc) to the group.
* Group will try to replace a null member of the array first.
* Failing that, Group will add it to the end of the member array,
* assuming there is room for it, and doubling the size of the array if necessary.
@@ -188,7 +187,6 @@ module Phaser {
* the object will NOT be added to the group!</p>
*
* @param {Basic} Object The object you want to add to the group.
*
* @return {Basic} The same <code>Basic</code> object that was passed in.
*/
public add(Object: Basic) {
+1 -1
View File
@@ -339,7 +339,7 @@ module Phaser {
public getTileFromInputXY(layer?: number = 0):Tile {
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.worldX, this._game.input.worldY)];
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.getWorldX(), this._game.input.getWorldY())];
}
+132 -32
View File
@@ -19,6 +19,7 @@ module Phaser {
this._game = game;
this.mousePointer = new Pointer(this._game, 0);
this.pointer1 = new Pointer(this._game, 1);
this.pointer2 = new Pointer(this._game, 2);
this.pointer3 = new Pointer(this._game, 3);
@@ -38,6 +39,11 @@ module Phaser {
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
}
@@ -53,6 +59,29 @@ module Phaser {
*/
public disabled: bool = false;
/**
* Controls the expected behaviour when using a mouse and touch together on a multi-input device
*/
public multiInputOverride: number = Input.MOUSE_TOUCH_COMBINE;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it updates the Input.x/y globals regardless if another pointer is active or not
*/
public static MOUSE_OVERRIDES_TOUCH: number = 0;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it only updates the Input.x/y globals if no other pointer is active
*/
public static TOUCH_OVERRIDES_MOUSE: number = 1;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it updates the Input.x/y globals at the same time as any active Pointer objects might
*/
public static MOUSE_TOUCH_COMBINE: number = 2;
/**
* Phaser.Mouse handler
* @type {Mouse}
@@ -109,18 +138,6 @@ module Phaser {
*/
public scaleY: number = 1;
/**
*
* @type {Number}
*/
public worldX: number = 0;
/**
*
* @type {Number}
*/
public worldY: number = 0;
/**
* The maximum number of Pointers allowed to be active at any one time.
* For lots of games it's useful to set this to 1
@@ -128,6 +145,12 @@ module Phaser {
*/
public maxPointers: number = 10;
/**
* The current number of active Pointers.
* @type {Number}
*/
public currentPointers: number = 0;
/**
* A Signal dispatched when a mouse/Pointer object is pressed
* @type {Phaser.Signal}
@@ -158,6 +181,72 @@ module Phaser {
*/
public onHold: Phaser.Signal;
/**
* The number of milliseconds that the Pointer has to be pressed down and then released to be considered a tap or click
* @property tapRate
* @type {Number}
**/
public tapRate: number = 200;
/**
* The number of milliseconds between taps of the same Pointer for it to be considered a double tap / click
* @property doubleTapRate
* @type {Number}
**/
public doubleTapRate: number = 250;
/**
* The number of milliseconds that the Pointer has to be pressed down for it to fire a onHold event
* @property holdRate
* @type {Number}
**/
public holdRate: number = 2000;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* @type {Number}
**/
public justPressedRate: number = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
public justReleasedRate: number = 200;
/**
* Sets if the Pointer objects should record a history of x/y coordinates they have passed through.
* The history is cleared each time the Pointer is pressed down.
* The history is updated at the rate specified in Input.pollRate
* @property recordPointerHistory
* @type {Boolean}
**/
public recordPointerHistory: bool = true;
/**
* The rate in milliseconds at which the Pointer objects should update their tracking history
* @property recordRate
* @type {Number}
*/
public recordRate: number = 100;
/**
* The total number of entries that can be recorded into the Pointer objects tracking history.
* The the Pointer is tracking one event every 100ms, then a trackLimit of 100 would store the last 10 seconds worth of history.
* @property recordLimit
* @type {Number}
*/
public recordLimit: number = 100;
/**
* A Pointer object specifically used by the Mouse
* @property mousePointer
* @type {Pointer}
**/
public mousePointer: Pointer;
/**
* A Pointer object
* @property pointer1
@@ -274,16 +363,22 @@ module Phaser {
public update() {
//this.worldX = this._game.camera.worldView.x + this.x;
//this.worldY = this._game.camera.worldView.y + this.y;
this.mouse.update();
this.mousePointer.update();
this.pointer1.update();
this.pointer2.update();
this.pointer3.update();
this.pointer4.update();
this.pointer5.update();
this.pointer6.update();
this.pointer7.update();
this.pointer8.update();
this.pointer9.update();
this.pointer10.update();
}
public reset() {
this.mouse.reset();
this.keyboard.reset();
this.pointer1.reset();
@@ -299,6 +394,11 @@ module Phaser {
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
}
@@ -309,61 +409,61 @@ module Phaser {
**/
public get totalInactivePointers(): number {
return 10 - this.totalActivePointers;
return 10 - this.currentPointers;
}
/**
* Get the total number of active Pointers
* Recalculates the total number of active Pointers
* @method totalActivePointers
* @return {Number} The number of Pointers currently active
**/
public get totalActivePointers(): number {
var result: number = 0;
this.currentPointers = 0;
if (this.pointer1.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer2.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer3.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer4.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer5.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer6.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer7.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer8.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer9.active == true)
{
result++;
this.currentPointers++;
}
else if (this.pointer10.active == true)
{
result++;
this.currentPointers++;
}
return result;
return this.currentPointers;
}
@@ -671,7 +771,7 @@ module Phaser {
this._game.stage.context.fillStyle = color;
this._game.stage.context.fillText('Input', x, y);
this._game.stage.context.fillText('Screen X: ' + this.x + ' Screen Y: ' + this.y, x, y + 14);
this._game.stage.context.fillText('World X: ' + this.worldX + ' World Y: ' + this.worldY, x, y + 28);
this._game.stage.context.fillText('World X: ' + this.getWorldX() + ' World Y: ' + this.getWorldY(), x, y + 28);
this._game.stage.context.fillText('Scale X: ' + this.scaleX.toFixed(1) + ' Scale Y: ' + this.scaleY.toFixed(1), x, y + 42);
}
+10 -3
View File
@@ -25,7 +25,7 @@ module Phaser {
}
/**
*
* Local private reference to game.
* @property _game
* @type Game
* @private
@@ -39,7 +39,7 @@ module Phaser {
public disabled: bool = false;
/**
*
* Starts the event listeners running
* @method start
*/
public start() {
@@ -111,11 +111,18 @@ module Phaser {
}
/**
*
* Stop the event listeners
* @method stop
*/
public stop() {
if (this._game.device.mspointer == true)
{
//this._game.stage.canvas.addEventListener('MSPointerDown', (event) => this.onPointerDown(event), false);
//this._game.stage.canvas.addEventListener('MSPointerMove', (event) => this.onPointerMove(event), false);
//this._game.stage.canvas.addEventListener('MSPointerUp', (event) => this.onPointerUp(event), false);
}
}
}
+25 -75
View File
@@ -16,12 +16,14 @@ module Phaser {
}
/**
* Local private reference to game.
* @property _game
* @type {Phaser.Game}
* @private
**/
private _game: Game;
private _x: number = 0;
private _y: number = 0;
public button: number;
public static LEFT_BUTTON: number = 0;
public static MIDDLE_BUTTON: number = 1;
@@ -34,30 +36,9 @@ module Phaser {
public disabled: bool = false;
/**
* @type {Boolean}
*/
public isDown: bool = false;
/**
* @type {Boolean}
*/
public isUp: bool = true;
/**
* @type {Number}
*/
public timeDown: number = 0;
/**
* @type {Number}
*/
public duration: number = 0;
/**
* @type {Number}
*/
public timeUp: number = 0;
* Starts the event listeners running
* @method start
*/
public start() {
this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
@@ -66,13 +47,6 @@ module Phaser {
}
public reset() {
this.isDown = false;
this.isUp = true;
}
/**
* @param {MouseEvent} event
*/
@@ -83,31 +57,9 @@ module Phaser {
return;
}
this.button = event.button;
event['identifier'] = 0;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._game.input.onDown.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
}
public update() {
//this._game.input.x = this._x * this._game.input.scaleX;
//this._game.input.y = this._y * this._game.input.scaleY;
if (this.isDown)
{
this.duration = this._game.time.now - this.timeDown;
}
this._game.input.mousePointer.start(event);
}
@@ -121,13 +73,9 @@ module Phaser {
return;
}
this.button = event.button;
event['identifier'] = 0;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this._game.input.mousePointer.move(event);
}
@@ -141,19 +89,21 @@ module Phaser {
return;
}
this.button = event.button;
this.isDown = false;
this.isUp = true;
this.timeUp = this._game.time.now;
this.duration = this.timeUp - this.timeDown;
event['identifier'] = 0;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.mousePointer.stop(event);
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
}
this._game.input.onUp.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
/**
* Stop the event listeners
* @method stop
*/
public stop() {
//this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
//this._game.stage.canvas.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
//this._game.stage.canvas.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
}
+150 -25
View File
@@ -25,6 +25,11 @@ module Phaser {
this.pointB = new Point();
this.circle = new Circle(0, 0, 44);
if (id == 0)
{
this.isMouse = true;
}
}
/**
@@ -36,7 +41,31 @@ module Phaser {
private _game: Game;
/**
* The Pointer ID (a number between 1 and 10)
* Local private variable to store the status of dispatching a hold event
* @property _holdSent
* @type {Boolean}
* @private
*/
private _holdSent: bool = false;
/**
* Local private variable storing the short-term history of pointer movements
* @property _history
* @type {Array}
* @private
*/
private _history = [];
/**
* Local private variable storing the time at which the next history drop should occur
* @property _lastDrop
* @type {Number}
* @private
*/
private _nextDrop: number = 0;
/**
* The Pointer ID (a number between 1 and 10, 0 is reserved for the mouse pointer specifically)
* @property id
* @type {Number}
*/
@@ -87,6 +116,13 @@ module Phaser {
*/
public withinGame: bool = false;
/**
* If this Pointer is a mouse the button property holds the value of which mouse button was pressed down
* @property button
* @type {Number}
*/
public button: number;
/**
* The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
* @property clientX
@@ -151,14 +187,21 @@ module Phaser {
public target;
/**
* If the Pointer is touching the touchscreen isDown is set to true
* If the Pointer is a mouse this is true, otherwise false
* @property isMouse
* @type {Boolean}
**/
public isMouse: bool = false;
/**
* If the Pointer is touching the touchscreen, or the mouse button is held down, isDown is set to true
* @property isDown
* @type {Boolean}
**/
public isDown: bool = false;
/**
* If the Pointer is not touching the touchscreen isUp is set to true
* If the Pointer is not touching the touchscreen, or the mouse button is up, isUp is set to true
* @property isUp
* @type {Boolean}
**/
@@ -179,18 +222,11 @@ module Phaser {
public timeUp: number = 0;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* A timestamp representing when the Pointer was last tapped or clicked
* @property previousTapTime
* @type {Number}
**/
public justPressedRate: number = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
public justReleasedRate: number = 200;
public previousTapTime: number = 0;
/**
* The total number of times this Pointer has been touched to the touchscreen
@@ -200,12 +236,17 @@ module Phaser {
public totalTouches: number = 0;
/**
* How long the Pointer has been depressed on the touchscreen.
* How long the Pointer has been depressed on the touchscreen. If not currently down it returns -1.
* @property duration
* @type {Number}
**/
public get duration(): number {
if (this.isUp)
{
return -1;
}
return this._game.time.now - this.timeDown;
}
@@ -240,6 +281,13 @@ module Phaser {
this.identifier = event.identifier;
this.target = event.target;
if (event.button)
{
this.button = event.button;
}
this._history.length = 0;
this.move(event);
this.pointA.setTo(this.x, this.y);
@@ -249,17 +297,56 @@ module Phaser {
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._holdSent = false;
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
if (this._game.input.multiInputOverride == Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0))
{
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
}
this.totalTouches++;
if (this.isMouse == false)
{
this._game.input.currentPointers++;
}
return this;
}
public update() {
if (this.active)
{
if (this._holdSent == false && this.duration >= this._game.input.holdRate)
{
if (this._game.input.multiInputOverride == Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0))
{
this._game.input.onHold.dispatch(this);
}
this._holdSent = true;
}
// Update the droppings history
if (this._game.input.recordPointerHistory && this._game.time.now >= this._nextDrop)
{
this._nextDrop = this._game.time.now + this._game.input.recordRate;
this._history.push({ x: this.pointB.x, y: this.pointB.y });
if (this._history.length > this._game.input.recordLimit)
{
this._history.shift();
}
}
}
}
/**
* Called when the Pointer is moved on the touchscreen
* @method move
@@ -267,6 +354,11 @@ module Phaser {
*/
public move(event): Pointer {
if (event.button)
{
this.button = event.button;
}
this.clientX = event.clientX;
this.clientY = event.clientY;
this.pageX = event.pageX;
@@ -280,10 +372,11 @@ module Phaser {
this.pointB.setTo(this.x, this.y);
this.circle.setTo(this.x, this.y, 44);
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
// Droppings history (used for gestures and motion tracking)
if (this._game.input.multiInputOverride == Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0))
{
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
}
return this;
@@ -308,6 +401,29 @@ module Phaser {
*/
public stop(event): Pointer {
console.log('duration', this.duration);
if (this._game.input.multiInputOverride == Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0))
{
this._game.input.onUp.dispatch(this);
// Was it a tap?
if (this.duration >= 0 && this.duration <= this._game.input.tapRate)
{
// Yes, let's dispatch the signal
this._game.input.onTap.dispatch(this);
// Was it a double-tap?
if (this.timeUp - this.previousTapTime < this._game.input.doubleTapRate)
{
this._game.input.onDoubleTap.dispatch(this);
}
this.previousTapTime = this.timeUp;
}
}
this.active = false;
this.withinGame = false;
@@ -315,19 +431,22 @@ module Phaser {
this.isUp = true;
this.timeUp = this._game.time.now;
this._game.input.onUp.dispatch(this);
if (this.isMouse == false)
{
this._game.input.currentPointers--;
}
return this;
}
/**
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen is less than justPressedRate
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen or clicked is less than justPressedRate
* @method justPressed
* @param {Number} [duration].
* @return {Boolean}
*/
public justPressed(duration?: number = this.justPressedRate): bool {
public justPressed(duration?: number = this._game.input.justPressedRate): bool {
if (this.isDown === true && (this.timeDown + duration) > this._game.time.now)
{
@@ -346,7 +465,7 @@ module Phaser {
* @param {Number} [duration].
* @return {Boolean}
*/
public justReleased(duration?: number = this.justReleasedRate): bool {
public justReleased(duration?: number = this._game.input.justReleasedRate): bool {
if (this.isUp === true && (this.timeUp + duration) > this._game.time.now)
{
@@ -359,6 +478,10 @@ module Phaser {
}
/**
* Resets the Pointer properties. Called by Input.reset when you perform a State change.
* @method reset
*/
public reset() {
this.active = false;
@@ -366,6 +489,8 @@ module Phaser {
this.isDown = false;
this.isUp = true;
this.totalTouches = 0;
this._holdSent = false;
this._history.length = 0;
}
+23 -17
View File
@@ -27,9 +27,9 @@ module Phaser {
}
/**
*
* Local private reference to game.
* @property _game
* @type {Game}
* @type {Phaser.Game}
* @private
**/
private _game: Game;
@@ -41,19 +41,22 @@ module Phaser {
public disabled: bool = false;
/**
*
* Starts the event listeners running
* @method start
*/
public start() {
this._game.stage.canvas.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
this._game.stage.canvas.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
this._game.stage.canvas.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
this._game.stage.canvas.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
this._game.stage.canvas.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
this._game.stage.canvas.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
if (this._game.device.touch)
{
this._game.stage.canvas.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
this._game.stage.canvas.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
this._game.stage.canvas.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
this._game.stage.canvas.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
this._game.stage.canvas.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
this._game.stage.canvas.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
document.addEventListener('touchmove', (event) => this.consumeTouchMove(event), false);
document.addEventListener('touchmove', (event) => this.consumeTouchMove(event), false);
}
}
@@ -192,17 +195,20 @@ module Phaser {
}
/**
*
* Stop the event listeners
* @method stop
*/
public stop() {
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
if (this._game.device.touch)
{
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
}
}
+39 -36
View File
@@ -22,44 +22,47 @@ Latest Update
V0.9.6
* Virtually every class now has documentation - if you spot a typo or something missing please shout (thanks pixelpicosean)
* Grunt file updated to produce the new Special FX JS file (thanks HackManiac)
* Fixed issue stopping Phaser working on iOS 5 (iPad 1)
* Created new mobile test folder, updated index.php to use mobile CSS and made some mobile specific tests
* Fixed a few speed issues on Android 2.x stock browser
* Moved Camera context save/restore back inside parameter checks (sped-up Samsung S3 stock browser)
* Fixed bug with StageScaleMode.checkOrientation not respecting the NO_SCALE value
* Added MSPointer support (thanks Diego Bezerra)
* Added Camera.clear to perform a clearRect instead of a fillRect if needed (default is false)
* Swapped Camera.opaque default from true to false re: performance
* Updated Stage.visibilityChange to avoid pause screen locking in certain situations
* Added StageScaleMode.enterLandscape and enterPortrait signals for easier device orientation change checks
* Added StageScaleMode.isPortrait
* Updated StageScaleMode to check both window.orientationchange and window.resize events
* Updated RequestAnimationFrame to use performance.now for sub-millisecond precision and to drive the Game.time.update loop
* Updated RequestAnimationFrame setTimeout to use fixed timestep and re-ordered callback sequence. Android 2/iOS5 performance much better now
* Removed Stage.ORIENTATION_LANDSCAPE statics because the values should be taken from Stage.scale.isPortrait / isLandscape
* Removed Stage.maxScaleX/Y and moved them into StageScaleMode.minWidth, minHeight, maxWidth and maxHeight
* Fixed Stage.scale so that it resizes without needing an orientation change first
* Added StageScaleMode.startFullscreen(), stopFullScreen() and isFullScreen for making use of the FullScreen API on desktop browsers
* Swapped Stage.offset from Point to MicroPoint
* Swapped Stage.bounds from Rectangle to Quad
* Added State.destroy support. A states destroy function is called when you switch to a new state (thanks JesseFreeman)
* Added Sprite.fillColor, used in the Sprite render if no image is loaded (set via the property or Sprite.makeGraphic) (thanks JesseFreeman)
* Renamed Phaser.Finger to Phaser.Pointer
* Updated all of the Input classes so they now use Input.pointers 1 through 10
* Updated Touch and MSPointer to allow multi-touch support (when the hardware supports it) and created new tests to show this
* Added Input.getPointer, Input.getPointerFromIdentifier, Input.totalActivePointers and Input.totalInactivePointers
* Added Input.startPointer, Input.updatePointer and Input.stopPointer
* Phaser Input now confirmed working on Windows Phone 8 (Nokia Lumia 920)
* Added Input.maxPointers to allow you to limit the number of fingers your game will listen for on multi-touch systems
* Pointer.totalTouches value keeps a running total of the number of times the Pointer has been pressed
* Added Pointer.pointA and pointB - pointA is placed on touch, pointB is moved on update, useful for tracking distance/direction/gestures
* Added Game.state - now contains a reference to the current state object (if any was given)
* Moved the Input start events from the constructors to a single Input.start method
* Virtually every class now has documentation - if you spot a typo or something missing please shout (thanks pixelpicosean).
* Grunt file updated to produce the new Special FX JS file (thanks HackManiac).
* Fixed issue stopping Phaser working on iOS 5 (iPad 1).
* Created new mobile test folder, updated index.php to use mobile CSS and made some mobile specific tests.
* Fixed a few speed issues on Android 2.x stock browser.
* Moved Camera context save/restore back inside parameter checks (sped-up Samsung S3 stock browser).
* Fixed bug with StageScaleMode.checkOrientation not respecting the NO_SCALE value.
* Added MSPointer support (thanks Diego Bezerra).
* Added Camera.clear to perform a clearRect instead of a fillRect if needed (default is false).
* Swapped Camera.opaque default from true to false re: performance.
* Updated Stage.visibilityChange to avoid pause screen locking in certain situations.
* Added StageScaleMode.enterLandscape and enterPortrait signals for easier device orientation change checks.
* Added StageScaleMode.isPortrait.
* Updated StageScaleMode to check both window.orientationchange and window.resize events.
* Updated RequestAnimationFrame to use performance.now for sub-millisecond precision and to drive the Game.time.update loop.
* Updated RequestAnimationFrame setTimeout to use fixed timestep and re-ordered callback sequence. Android 2/iOS5 performance much better now.
* Removed Stage.ORIENTATION_LANDSCAPE statics because the values should be taken from Stage.scale.isPortrait / isLandscape.
* Removed Stage.maxScaleX/Y and moved them into StageScaleMode.minWidth, minHeight, maxWidth and maxHeight.
* Fixed Stage.scale so that it resizes without needing an orientation change first.
* Added StageScaleMode.startFullscreen(), stopFullScreen() and isFullScreen for making use of the FullScreen API on desktop browsers.
* Swapped Stage.offset from Point to MicroPoint.
* Swapped Stage.bounds from Rectangle to Quad.
* Added State.destroy support. A states destroy function is called when you switch to a new state (thanks JesseFreeman).
* Added Sprite.fillColor, used in the Sprite render if no image is loaded (set via the property or Sprite.makeGraphic) (thanks JesseFreeman).
* Renamed Phaser.Finger to Phaser.Pointer.
* Updated all of the Input classes so they now use Input.pointers 1 through 10.
* Updated Touch and MSPointer to allow multi-touch support (when the hardware supports it) and created new tests to show this.
* Added Input.getPointer, Input.getPointerFromIdentifier, Input.totalActivePointers and Input.totalInactivePointers.
* Added Input.startPointer, Input.updatePointer and Input.stopPointer.
* Phaser Input now confirmed working on Windows Phone 8 (Nokia Lumia 920).
* Added Input.maxPointers to allow you to limit the number of fingers your game will listen for on multi-touch systems.
* Pointer.totalTouches value keeps a running total of the number of times the Pointer has been pressed.
* Added Pointer.pointA and pointB - pointA is placed on touch, pointB is moved on update, useful for tracking distance/direction/gestures.
* Added Game.state - now contains a reference to the current state object (if any was given).
* Moved the Input start events from the constructors to a single Input.start method.
* Added Input.disabled boolean to globally turn off all input event processing.
* Added Input.Mouse.disabled, Input.Touch.disabled, Input.MSPointer.disabled and Input.Keyboard.disabled
* Added Input.Mouse.disabled, Input.Touch.disabled, Input.MSPointer.disabled and Input.Keyboard.disabled.
* Added Device.mspointer boolean. true if MSPointer is available on the device.
* Added Input.onDown, onUp, onTap, onDoubleTap and onHold signals - all fired by the mouse or touch.
* Added Input.recordPointerHistory to record the x/y coordinates a Pointer tracks through. Also Input.recordRate and Input.recordLimit for fine control.
* Added Input.multiInputOverride which can be MOUSE_OVERRIDES_TOUCH, TOUCH_OVERRIDES_MOUSE or MOUSE_TOUCH_COMBINE.
* TODO: Check that tween pausing works with the new performance.now
+4
View File
@@ -120,6 +120,10 @@
<DependentUpon>multitouch.ts</DependentUpon>
</Content>
<TypeScriptCompile Include="input\single touch.ts" />
<TypeScriptCompile Include="input\single tap.ts" />
<Content Include="input\single tap.js">
<DependentUpon>single tap.ts</DependentUpon>
</Content>
<Content Include="input\single touch.js">
<DependentUpon>single touch.ts</DependentUpon>
</Content>
+42
View File
@@ -0,0 +1,42 @@
/// <reference path="../../Phaser/Game.ts" />
(function () {
var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update, render);
function init() {
myGame.loader.addImageFile('ball0', 'assets/sprites/yellow_ball.png');
myGame.loader.addImageFile('ball1', 'assets/sprites/aqua_ball.png');
myGame.loader.addImageFile('ball2', 'assets/sprites/blue_ball.png');
myGame.loader.addImageFile('ball3', 'assets/sprites/green_ball.png');
myGame.loader.addImageFile('ball4', 'assets/sprites/red_ball.png');
myGame.loader.addImageFile('ball5', 'assets/sprites/purple_ball.png');
myGame.loader.load();
}
var balls;
function create() {
balls = myGame.createGroup();
myGame.input.onTap.add(tapped, this);
myGame.input.onDoubleTap.add(doubleTapped, this);
}
function doubleTapped(pointer) {
var tempBall = new Phaser.Sprite(myGame, pointer.x, pointer.y, 'ball' + Math.round(Math.random() * 5));
tempBall.outOfBoundsAction = Phaser.GameObject.OUT_OF_BOUNDS_KILL;
tempBall.velocity.y = 100 + Math.random() * 150;
tempBall.elasticity = 0.9;
tempBall.scale.setTo(4, 4);
balls.add(tempBall);
}
function tapped(pointer) {
var tempBall = new Phaser.Sprite(myGame, pointer.x, pointer.y, 'ball' + Math.round(Math.random() * 5));
tempBall.outOfBoundsAction = Phaser.GameObject.OUT_OF_BOUNDS_KILL;
tempBall.velocity.y = 100 + Math.random() * 150;
tempBall.elasticity = 0.9;
balls.add(tempBall);
}
function update() {
}
function render() {
myGame.input.renderDebugInfo(16, 16);
//myGame.input.pointer1.renderDebug(true);
//myGame.input.pointer2.renderDebug(true);
//myGame.input.pointer3.renderDebug(true);
}
})();
+65
View File
@@ -0,0 +1,65 @@
/// <reference path="../../Phaser/Game.ts" />
(function () {
var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update, render);
function init() {
myGame.loader.addImageFile('ball0', 'assets/sprites/yellow_ball.png');
myGame.loader.addImageFile('ball1', 'assets/sprites/aqua_ball.png');
myGame.loader.addImageFile('ball2', 'assets/sprites/blue_ball.png');
myGame.loader.addImageFile('ball3', 'assets/sprites/green_ball.png');
myGame.loader.addImageFile('ball4', 'assets/sprites/red_ball.png');
myGame.loader.addImageFile('ball5', 'assets/sprites/purple_ball.png');
myGame.loader.load();
}
var balls: Phaser.Group;
function create() {
balls = myGame.createGroup();
myGame.input.onTap.add(tapped, this);
myGame.input.onDoubleTap.add(doubleTapped, this);
}
function doubleTapped(pointer: Phaser.Pointer) {
var tempBall: Phaser.Sprite = new Phaser.Sprite(myGame, pointer.x, pointer.y, 'ball' + Math.round(Math.random() * 5));
tempBall.outOfBoundsAction = Phaser.GameObject.OUT_OF_BOUNDS_KILL;
tempBall.velocity.y = 100 + Math.random() * 150;
tempBall.elasticity = 0.9;
tempBall.scale.setTo(4, 4);
balls.add(tempBall);
}
function tapped(pointer: Phaser.Pointer) {
var tempBall: Phaser.Sprite = new Phaser.Sprite(myGame, pointer.x, pointer.y, 'ball' + Math.round(Math.random() * 5));
tempBall.outOfBoundsAction = Phaser.GameObject.OUT_OF_BOUNDS_KILL;
tempBall.velocity.y = 100 + Math.random() * 150;
tempBall.elasticity = 0.9;
balls.add(tempBall);
}
function update() {
}
function render() {
myGame.input.renderDebugInfo(16, 16);
//myGame.input.pointer1.renderDebug(true);
//myGame.input.pointer2.renderDebug(true);
//myGame.input.pointer3.renderDebug(true);
}
})();
+268 -146
View File
@@ -6769,7 +6769,6 @@ var Phaser;
* Phaser - Group
*
* This class is used for organising, updating and sorting game objects.
*
*/
var Phaser;
(function (Phaser) {
@@ -6867,7 +6866,7 @@ var Phaser;
configurable: true
});
Group.prototype.add = /**
* Adds a new <code>Basic</code> subclass (Basic, Basic, Enemy, etc) to the group.
* Adds a new <code>Basic</code> subclass (Basic, GameObject, Sprite, etc) to the group.
* Group will try to replace a null member of the array first.
* Failing that, Group will add it to the end of the member array,
* assuming there is room for it, and doubling the size of the array if necessary.
@@ -6876,7 +6875,6 @@ var Phaser;
* the object will NOT be added to the group!</p>
*
* @param {Basic} Object The object you want to add to the group.
*
* @return {Basic} The same <code>Basic</code> object that was passed in.
*/
function (Object) {
@@ -10728,6 +10726,27 @@ var Phaser;
* @return {Phaser.Pointer} This object.
*/
function Pointer(game, id) {
/**
* Local private variable to store the status of dispatching a hold event
* @property _holdSent
* @type {Boolean}
* @private
*/
this._holdSent = false;
/**
* Local private variable storing the short-term history of pointer movements
* @property _history
* @type {Array}
* @private
*/
this._history = [];
/**
* Local private variable storing the time at which the next history drop should occur
* @property _lastDrop
* @type {Number}
* @private
*/
this._nextDrop = 0;
/**
* A Point object representing the x/y screen coordinates of the Pointer.
* @property pointA
@@ -10802,13 +10821,19 @@ var Phaser;
*/
this.y = -1;
/**
* If the Pointer is touching the touchscreen isDown is set to true
* If the Pointer is a mouse this is true, otherwise false
* @property isMouse
* @type {Boolean}
**/
this.isMouse = false;
/**
* If the Pointer is touching the touchscreen, or the mouse button is held down, isDown is set to true
* @property isDown
* @type {Boolean}
**/
this.isDown = false;
/**
* If the Pointer is not touching the touchscreen isUp is set to true
* If the Pointer is not touching the touchscreen, or the mouse button is up, isUp is set to true
* @property isUp
* @type {Boolean}
**/
@@ -10826,17 +10851,11 @@ var Phaser;
**/
this.timeUp = 0;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* A timestamp representing when the Pointer was last tapped or clicked
* @property previousTapTime
* @type {Number}
**/
this.justPressedRate = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
this.justReleasedRate = 200;
this.previousTapTime = 0;
/**
* The total number of times this Pointer has been touched to the touchscreen
* @property totalTouches
@@ -10849,14 +10868,20 @@ var Phaser;
this.pointA = new Phaser.Point();
this.pointB = new Phaser.Point();
this.circle = new Phaser.Circle(0, 0, 44);
if(id == 0) {
this.isMouse = true;
}
}
Object.defineProperty(Pointer.prototype, "duration", {
get: /**
* How long the Pointer has been depressed on the touchscreen.
* How long the Pointer has been depressed on the touchscreen. If not currently down it returns -1.
* @property duration
* @type {Number}
**/
function () {
if(this.isUp) {
return -1;
}
return this._game.time.now - this.timeDown;
},
enumerable: true,
@@ -10886,6 +10911,10 @@ var Phaser;
function (event) {
this.identifier = event.identifier;
this.target = event.target;
if(event.button) {
this.button = event.button;
}
this._history.length = 0;
this.move(event);
this.pointA.setTo(this.x, this.y);
this.active = true;
@@ -10893,18 +10922,48 @@ var Phaser;
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
this._holdSent = false;
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
}
this.totalTouches++;
if(this.isMouse == false) {
this._game.input.currentPointers++;
}
return this;
};
Pointer.prototype.update = function () {
if(this.active) {
if(this._holdSent == false && this.duration >= this._game.input.holdRate) {
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.onHold.dispatch(this);
}
this._holdSent = true;
}
// Update the droppings history
if(this._game.input.recordPointerHistory && this._game.time.now >= this._nextDrop) {
this._nextDrop = this._game.time.now + this._game.input.recordRate;
this._history.push({
x: this.pointB.x,
y: this.pointB.y
});
if(this._history.length > this._game.input.recordLimit) {
this._history.shift();
}
}
}
};
Pointer.prototype.move = /**
* Called when the Pointer is moved on the touchscreen
* @method move
* @param {Any} event
*/
function (event) {
if(event.button) {
this.button = event.button;
}
this.clientX = event.clientX;
this.clientY = event.clientY;
this.pageX = event.pageX;
@@ -10915,9 +10974,10 @@ var Phaser;
this.y = this.pageY - this._game.stage.offset.y;
this.pointB.setTo(this.x, this.y);
this.circle.setTo(this.x, this.y, 44);
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
// Droppings history (used for gestures and motion tracking)
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
}
return this;
};
Pointer.prototype.leave = /**
@@ -10935,22 +10995,38 @@ var Phaser;
* @param {Any} event
*/
function (event) {
console.log('duration', this.duration);
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.onUp.dispatch(this);
// Was it a tap?
if(this.duration >= 0 && this.duration <= this._game.input.tapRate) {
// Yes, let's dispatch the signal
this._game.input.onTap.dispatch(this);
// Was it a double-tap?
if(this.timeUp - this.previousTapTime < this._game.input.doubleTapRate) {
this._game.input.onDoubleTap.dispatch(this);
}
this.previousTapTime = this.timeUp;
}
}
this.active = false;
this.withinGame = false;
this.isDown = false;
this.isUp = true;
this.timeUp = this._game.time.now;
this._game.input.onUp.dispatch(this);
if(this.isMouse == false) {
this._game.input.currentPointers--;
}
return this;
};
Pointer.prototype.justPressed = /**
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen is less than justPressedRate
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen or clicked is less than justPressedRate
* @method justPressed
* @param {Number} [duration].
* @return {Boolean}
*/
function (duration) {
if (typeof duration === "undefined") { duration = this.justPressedRate; }
if (typeof duration === "undefined") { duration = this._game.input.justPressedRate; }
if(this.isDown === true && (this.timeDown + duration) > this._game.time.now) {
return true;
} else {
@@ -10964,19 +11040,25 @@ var Phaser;
* @return {Boolean}
*/
function (duration) {
if (typeof duration === "undefined") { duration = this.justReleasedRate; }
if (typeof duration === "undefined") { duration = this._game.input.justReleasedRate; }
if(this.isUp === true && (this.timeUp + duration) > this._game.time.now) {
return true;
} else {
return false;
}
};
Pointer.prototype.reset = function () {
Pointer.prototype.reset = /**
* Resets the Pointer properties. Called by Input.reset when you perform a State change.
* @method reset
*/
function () {
this.active = false;
this.identifier = null;
this.isDown = false;
this.isUp = true;
this.totalTouches = 0;
this._holdSent = false;
this._history.length = 0;
};
Pointer.prototype.renderDebug = /**
* Renders the Pointer.circle object onto the stage in green if down or red if up.
@@ -11050,7 +11132,7 @@ var Phaser;
this._game = game;
}
MSPointer.prototype.start = /**
*
* Starts the event listeners running
* @method start
*/
function () {
@@ -11107,10 +11189,15 @@ var Phaser;
this._game.input.stopPointer(event);
};
MSPointer.prototype.stop = /**
*
* Stop the event listeners
* @method stop
*/
function () {
if(this._game.device.mspointer == true) {
//this._game.stage.canvas.addEventListener('MSPointerDown', (event) => this.onPointerDown(event), false);
//this._game.stage.canvas.addEventListener('MSPointerMove', (event) => this.onPointerMove(event), false);
//this._game.stage.canvas.addEventListener('MSPointerUp', (event) => this.onPointerUp(event), false);
}
};
return MSPointer;
})();
@@ -11174,6 +11261,10 @@ var Phaser;
*/
this.disabled = false;
/**
* Controls the expected behaviour when using a mouse and touch together on a multi-input device
*/
this.multiInputOverride = Input.MOUSE_TOUCH_COMBINE;
/**
* X coordinate of the most recent Pointer event
* @type {Number}
* @private
@@ -11196,22 +11287,69 @@ var Phaser;
*/
this.scaleY = 1;
/**
*
* @type {Number}
*/
this.worldX = 0;
/**
*
* @type {Number}
*/
this.worldY = 0;
/**
* The maximum number of Pointers allowed to be active at any one time.
* For lots of games it's useful to set this to 1
* @type {Number}
*/
this.maxPointers = 10;
/**
* The current number of active Pointers.
* @type {Number}
*/
this.currentPointers = 0;
/**
* The number of milliseconds that the Pointer has to be pressed down and then released to be considered a tap or click
* @property tapRate
* @type {Number}
**/
this.tapRate = 200;
/**
* The number of milliseconds between taps of the same Pointer for it to be considered a double tap / click
* @property doubleTapRate
* @type {Number}
**/
this.doubleTapRate = 250;
/**
* The number of milliseconds that the Pointer has to be pressed down for it to fire a onHold event
* @property holdRate
* @type {Number}
**/
this.holdRate = 2000;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* @type {Number}
**/
this.justPressedRate = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
this.justReleasedRate = 200;
/**
* Sets if the Pointer objects should record a history of x/y coordinates they have passed through.
* The history is cleared each time the Pointer is pressed down.
* The history is updated at the rate specified in Input.pollRate
* @property recordPointerHistory
* @type {Boolean}
**/
this.recordPointerHistory = true;
/**
* The rate in milliseconds at which the Pointer objects should update their tracking history
* @property recordRate
* @type {Number}
*/
this.recordRate = 100;
/**
* The total number of entries that can be recorded into the Pointer objects tracking history.
* The the Pointer is tracking one event every 100ms, then a trackLimit of 100 would store the last 10 seconds worth of history.
* @property recordLimit
* @type {Number}
*/
this.recordLimit = 100;
this._game = game;
this.mousePointer = new Phaser.Pointer(this._game, 0);
this.pointer1 = new Phaser.Pointer(this._game, 1);
this.pointer2 = new Phaser.Pointer(this._game, 2);
this.pointer3 = new Phaser.Pointer(this._game, 3);
@@ -11229,7 +11367,14 @@ var Phaser;
this.gestures = new Phaser.Gestures(this._game);
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
}
Input.MOUSE_OVERRIDES_TOUCH = 0;
Input.TOUCH_OVERRIDES_MOUSE = 1;
Input.MOUSE_TOUCH_COMBINE = 2;
Object.defineProperty(Input.prototype, "x", {
get: /**
* The screen X coordinate
@@ -11268,12 +11413,19 @@ var Phaser;
this.gestures.start();
};
Input.prototype.update = function () {
//this.worldX = this._game.camera.worldView.x + this.x;
//this.worldY = this._game.camera.worldView.y + this.y;
this.mouse.update();
this.mousePointer.update();
this.pointer1.update();
this.pointer2.update();
this.pointer3.update();
this.pointer4.update();
this.pointer5.update();
this.pointer6.update();
this.pointer7.update();
this.pointer8.update();
this.pointer9.update();
this.pointer10.update();
};
Input.prototype.reset = function () {
this.mouse.reset();
this.keyboard.reset();
this.pointer1.reset();
this.pointer2.reset();
@@ -11287,6 +11439,10 @@ var Phaser;
this.pointer10.reset();
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
};
Object.defineProperty(Input.prototype, "totalInactivePointers", {
get: /**
@@ -11295,41 +11451,41 @@ var Phaser;
* @return {Number} The number of Pointers currently inactive
**/
function () {
return 10 - this.totalActivePointers;
return 10 - this.currentPointers;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Input.prototype, "totalActivePointers", {
get: /**
* Get the total number of active Pointers
* Recalculates the total number of active Pointers
* @method totalActivePointers
* @return {Number} The number of Pointers currently active
**/
function () {
var result = 0;
this.currentPointers = 0;
if(this.pointer1.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer2.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer3.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer4.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer5.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer6.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer7.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer8.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer9.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer10.active == true) {
result++;
this.currentPointers++;
}
return result;
return this.currentPointers;
},
enumerable: true,
configurable: true
@@ -11518,7 +11674,7 @@ var Phaser;
this._game.stage.context.fillStyle = color;
this._game.stage.context.fillText('Input', x, y);
this._game.stage.context.fillText('Screen X: ' + this.x + ' Screen Y: ' + this.y, x, y + 14);
this._game.stage.context.fillText('World X: ' + this.worldX + ' World Y: ' + this.worldY, x, y + 28);
this._game.stage.context.fillText('World X: ' + this.getWorldX() + ' World Y: ' + this.getWorldY(), x, y + 28);
this._game.stage.context.fillText('Scale X: ' + this.scaleX.toFixed(1) + ' Scale Y: ' + this.scaleY.toFixed(1), x, y + 42);
};
return Input;
@@ -11799,39 +11955,21 @@ var Phaser;
(function (Phaser) {
var Mouse = (function () {
function Mouse(game) {
this._x = 0;
this._y = 0;
/**
* You can disable all Input by setting disabled = true. While set all new input related events will be ignored.
* @type {Boolean}
*/
this.disabled = false;
/**
* @type {Boolean}
*/
this.isDown = false;
/**
* @type {Boolean}
*/
this.isUp = true;
/**
* @type {Number}
*/
this.timeDown = 0;
/**
* @type {Number}
*/
this.duration = 0;
/**
* @type {Number}
*/
this.timeUp = 0;
this._game = game;
}
Mouse.LEFT_BUTTON = 0;
Mouse.MIDDLE_BUTTON = 1;
Mouse.RIGHT_BUTTON = 2;
Mouse.prototype.start = function () {
Mouse.prototype.start = /**
* Starts the event listeners running
* @method start
*/
function () {
var _this = this;
this._game.stage.canvas.addEventListener('mousedown', function (event) {
return _this.onMouseDown(event);
@@ -11843,10 +11981,6 @@ var Phaser;
return _this.onMouseUp(event);
}, true);
};
Mouse.prototype.reset = function () {
this.isDown = false;
this.isUp = true;
};
Mouse.prototype.onMouseDown = /**
* @param {MouseEvent} event
*/
@@ -11854,22 +11988,8 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._game.input.onDown.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
};
Mouse.prototype.update = function () {
//this._game.input.x = this._x * this._game.input.scaleX;
//this._game.input.y = this._y * this._game.input.scaleY;
if(this.isDown) {
this.duration = this._game.time.now - this.timeDown;
}
event['identifier'] = 0;
this._game.input.mousePointer.start(event);
};
Mouse.prototype.onMouseMove = /**
* @param {MouseEvent} event
@@ -11878,11 +11998,8 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
event['identifier'] = 0;
this._game.input.mousePointer.move(event);
};
Mouse.prototype.onMouseUp = /**
* @param {MouseEvent} event
@@ -11891,17 +12008,18 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this.isDown = false;
this.isUp = true;
this.timeUp = this._game.time.now;
this.duration = this.timeUp - this.timeDown;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this._game.input.onUp.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
event['identifier'] = 0;
this._game.input.mousePointer.stop(event);
};
Mouse.prototype.stop = /**
* Stop the event listeners
* @method stop
*/
function () {
//this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
//this._game.stage.canvas.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
//this._game.stage.canvas.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
};
return Mouse;
})();
Phaser.Mouse = Mouse;
@@ -11934,32 +12052,34 @@ var Phaser;
this._game = game;
}
Touch.prototype.start = /**
*
* Starts the event listeners running
* @method start
*/
function () {
var _this = this;
this._game.stage.canvas.addEventListener('touchstart', function (event) {
return _this.onTouchStart(event);
}, false);
this._game.stage.canvas.addEventListener('touchmove', function (event) {
return _this.onTouchMove(event);
}, false);
this._game.stage.canvas.addEventListener('touchend', function (event) {
return _this.onTouchEnd(event);
}, false);
this._game.stage.canvas.addEventListener('touchenter', function (event) {
return _this.onTouchEnter(event);
}, false);
this._game.stage.canvas.addEventListener('touchleave', function (event) {
return _this.onTouchLeave(event);
}, false);
this._game.stage.canvas.addEventListener('touchcancel', function (event) {
return _this.onTouchCancel(event);
}, false);
document.addEventListener('touchmove', function (event) {
return _this.consumeTouchMove(event);
}, false);
if(this._game.device.touch) {
this._game.stage.canvas.addEventListener('touchstart', function (event) {
return _this.onTouchStart(event);
}, false);
this._game.stage.canvas.addEventListener('touchmove', function (event) {
return _this.onTouchMove(event);
}, false);
this._game.stage.canvas.addEventListener('touchend', function (event) {
return _this.onTouchEnd(event);
}, false);
this._game.stage.canvas.addEventListener('touchenter', function (event) {
return _this.onTouchEnter(event);
}, false);
this._game.stage.canvas.addEventListener('touchleave', function (event) {
return _this.onTouchLeave(event);
}, false);
this._game.stage.canvas.addEventListener('touchcancel', function (event) {
return _this.onTouchCancel(event);
}, false);
document.addEventListener('touchmove', function (event) {
return _this.consumeTouchMove(event);
}, false);
}
};
Touch.prototype.consumeTouchMove = /**
* Prevent iOS bounce-back (doesn't work?)
@@ -12056,17 +12176,19 @@ var Phaser;
}
};
Touch.prototype.stop = /**
*
* Stop the event listeners
* @method stop
*/
function () {
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
};
if(this._game.device.touch) {
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
}
};
return Touch;
})();
Phaser.Touch = Touch;
@@ -13666,7 +13788,7 @@ var Phaser;
};
Tilemap.prototype.getTileFromInputXY = function (layer) {
if (typeof layer === "undefined") { layer = 0; }
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.worldX, this._game.input.worldY)];
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.getWorldX(), this._game.input.getWorldY())];
};
Tilemap.prototype.getTileOverlaps = /**
* Get tiles overlaps the given object.
+1 -1
View File
@@ -32,7 +32,7 @@
map.collide();
marker.x = myGame.math.snapToFloor(myGame.input.worldX, 16);
marker.y = myGame.math.snapToFloor(myGame.input.worldY, 16);
if(myGame.input.mouse.isDown) {
if(myGame.input.mousePointer.isDown) {
map.putTile(marker.x, marker.y, 32);
}
}
+1 -1
View File
@@ -48,7 +48,7 @@
marker.x = myGame.math.snapToFloor(myGame.input.worldX, 16);
marker.y = myGame.math.snapToFloor(myGame.input.worldY, 16);
if (myGame.input.mouse.isDown)
if (myGame.input.mousePointer.isDown)
{
map.putTile(marker.x, marker.y, 32);
}
+150 -59
View File
@@ -1681,7 +1681,7 @@ module Phaser {
*/
private _game;
/**
* Local container for storing camera.
* Local container for storing cameras.
*/
private _cameras;
/**
@@ -4064,7 +4064,6 @@ module Phaser {
* Phaser - Group
*
* This class is used for organising, updating and sorting game objects.
*
*/
module Phaser {
class Group extends Basic {
@@ -4125,7 +4124,7 @@ module Phaser {
*/
public maxSize : number;
/**
* Adds a new <code>Basic</code> subclass (Basic, Basic, Enemy, etc) to the group.
* Adds a new <code>Basic</code> subclass (Basic, GameObject, Sprite, etc) to the group.
* Group will try to replace a null member of the array first.
* Failing that, Group will add it to the end of the member array,
* assuming there is room for it, and doubling the size of the array if necessary.
@@ -4134,7 +4133,6 @@ module Phaser {
* the object will NOT be added to the group!</p>
*
* @param {Basic} Object The object you want to add to the group.
*
* @return {Basic} The same <code>Basic</code> object that was passed in.
*/
public add(Object: Basic): Basic;
@@ -6165,7 +6163,28 @@ module Phaser {
**/
private _game;
/**
* The Pointer ID (a number between 1 and 10)
* Local private variable to store the status of dispatching a hold event
* @property _holdSent
* @type {Boolean}
* @private
*/
private _holdSent;
/**
* Local private variable storing the short-term history of pointer movements
* @property _history
* @type {Array}
* @private
*/
private _history;
/**
* Local private variable storing the time at which the next history drop should occur
* @property _lastDrop
* @type {Number}
* @private
*/
private _nextDrop;
/**
* The Pointer ID (a number between 1 and 10, 0 is reserved for the mouse pointer specifically)
* @property id
* @type {Number}
*/
@@ -6210,6 +6229,12 @@ module Phaser {
*/
public withinGame: bool;
/**
* If this Pointer is a mouse the button property holds the value of which mouse button was pressed down
* @property button
* @type {Number}
*/
public button: number;
/**
* The horizontal coordinate of point relative to the viewport in pixels, excluding any scroll offset
* @property clientX
* @type {Number}
@@ -6264,13 +6289,19 @@ module Phaser {
*/
public target;
/**
* If the Pointer is touching the touchscreen isDown is set to true
* If the Pointer is a mouse this is true, otherwise false
* @property isMouse
* @type {Boolean}
**/
public isMouse: bool;
/**
* If the Pointer is touching the touchscreen, or the mouse button is held down, isDown is set to true
* @property isDown
* @type {Boolean}
**/
public isDown: bool;
/**
* If the Pointer is not touching the touchscreen isUp is set to true
* If the Pointer is not touching the touchscreen, or the mouse button is up, isUp is set to true
* @property isUp
* @type {Boolean}
**/
@@ -6288,17 +6319,11 @@ module Phaser {
**/
public timeUp: number;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* A timestamp representing when the Pointer was last tapped or clicked
* @property previousTapTime
* @type {Number}
**/
public justPressedRate: number;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
public justReleasedRate: number;
public previousTapTime: number;
/**
* The total number of times this Pointer has been touched to the touchscreen
* @property totalTouches
@@ -6306,7 +6331,7 @@ module Phaser {
**/
public totalTouches: number;
/**
* How long the Pointer has been depressed on the touchscreen.
* How long the Pointer has been depressed on the touchscreen. If not currently down it returns -1.
* @property duration
* @type {Number}
**/
@@ -6327,6 +6352,7 @@ module Phaser {
* @param {Any} event
*/
public start(event): Pointer;
public update(): void;
/**
* Called when the Pointer is moved on the touchscreen
* @method move
@@ -6346,7 +6372,7 @@ module Phaser {
*/
public stop(event): Pointer;
/**
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen is less than justPressedRate
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen or clicked is less than justPressedRate
* @method justPressed
* @param {Number} [duration].
* @return {Boolean}
@@ -6359,6 +6385,10 @@ module Phaser {
* @return {Boolean}
*/
public justReleased(duration?: number): bool;
/**
* Resets the Pointer properties. Called by Input.reset when you perform a State change.
* @method reset
*/
public reset(): void;
/**
* Renders the Pointer.circle object onto the stage in green if down or red if up.
@@ -6389,7 +6419,7 @@ module Phaser {
*/
constructor(game: Game);
/**
*
* Local private reference to game.
* @property _game
* @type Game
* @private
@@ -6401,7 +6431,7 @@ module Phaser {
*/
public disabled: bool;
/**
*
* Starts the event listeners running
* @method start
*/
public start(): void;
@@ -6424,7 +6454,7 @@ module Phaser {
**/
private onPointerUp(event);
/**
*
* Stop the event listeners
* @method stop
*/
public stop(): void;
@@ -6484,6 +6514,25 @@ module Phaser {
*/
public disabled: bool;
/**
* Controls the expected behaviour when using a mouse and touch together on a multi-input device
*/
public multiInputOverride: number;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it updates the Input.x/y globals regardless if another pointer is active or not
*/
static MOUSE_OVERRIDES_TOUCH: number;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it only updates the Input.x/y globals if no other pointer is active
*/
static TOUCH_OVERRIDES_MOUSE: number;
/**
* Static defining the behaviour expected on a multi-input device system.
* With this setting when the mouse is used it updates the Input.x/y globals at the same time as any active Pointer objects might
*/
static MOUSE_TOUCH_COMBINE: number;
/**
* Phaser.Mouse handler
* @type {Mouse}
*/
@@ -6531,22 +6580,17 @@ module Phaser {
*/
public scaleY: number;
/**
*
* @type {Number}
*/
public worldX: number;
/**
*
* @type {Number}
*/
public worldY: number;
/**
* The maximum number of Pointers allowed to be active at any one time.
* For lots of games it's useful to set this to 1
* @type {Number}
*/
public maxPointers: number;
/**
* The current number of active Pointers.
* @type {Number}
*/
public currentPointers: number;
/**
* A Signal dispatched when a mouse/Pointer object is pressed
* @type {Phaser.Signal}
*/
@@ -6572,6 +6616,63 @@ module Phaser {
*/
public onHold: Signal;
/**
* The number of milliseconds that the Pointer has to be pressed down and then released to be considered a tap or click
* @property tapRate
* @type {Number}
**/
public tapRate: number;
/**
* The number of milliseconds between taps of the same Pointer for it to be considered a double tap / click
* @property doubleTapRate
* @type {Number}
**/
public doubleTapRate: number;
/**
* The number of milliseconds that the Pointer has to be pressed down for it to fire a onHold event
* @property holdRate
* @type {Number}
**/
public holdRate: number;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* @type {Number}
**/
public justPressedRate: number;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
public justReleasedRate: number;
/**
* Sets if the Pointer objects should record a history of x/y coordinates they have passed through.
* The history is cleared each time the Pointer is pressed down.
* The history is updated at the rate specified in Input.pollRate
* @property recordPointerHistory
* @type {Boolean}
**/
public recordPointerHistory: bool;
/**
* The rate in milliseconds at which the Pointer objects should update their tracking history
* @property recordRate
* @type {Number}
*/
public recordRate: number;
/**
* The total number of entries that can be recorded into the Pointer objects tracking history.
* The the Pointer is tracking one event every 100ms, then a trackLimit of 100 would store the last 10 seconds worth of history.
* @property recordLimit
* @type {Number}
*/
public recordLimit: number;
/**
* A Pointer object specifically used by the Mouse
* @property mousePointer
* @type {Pointer}
**/
public mousePointer: Pointer;
/**
* A Pointer object
* @property pointer1
* @type {Pointer}
@@ -6653,7 +6754,7 @@ module Phaser {
**/
public totalInactivePointers : number;
/**
* Get the total number of active Pointers
* Recalculates the total number of active Pointers
* @method totalActivePointers
* @return {Number} The number of Pointers currently active
**/
@@ -6871,10 +6972,13 @@ module Phaser {
module Phaser {
class Mouse {
constructor(game: Game);
/**
* Local private reference to game.
* @property _game
* @type {Phaser.Game}
* @private
**/
private _game;
private _x;
private _y;
public button: number;
static LEFT_BUTTON: number;
static MIDDLE_BUTTON: number;
static RIGHT_BUTTON: number;
@@ -6884,32 +6988,14 @@ module Phaser {
*/
public disabled: bool;
/**
* @type {Boolean}
* Starts the event listeners running
* @method start
*/
public isDown: bool;
/**
* @type {Boolean}
*/
public isUp: bool;
/**
* @type {Number}
*/
public timeDown: number;
/**
* @type {Number}
*/
public duration: number;
/**
* @type {Number}
*/
public timeUp: number;
public start(): void;
public reset(): void;
/**
* @param {MouseEvent} event
*/
public onMouseDown(event: MouseEvent): void;
public update(): void;
/**
* @param {MouseEvent} event
*/
@@ -6918,6 +7004,11 @@ module Phaser {
* @param {MouseEvent} event
*/
public onMouseUp(event: MouseEvent): void;
/**
* Stop the event listeners
* @method stop
*/
public stop(): void;
}
}
/**
@@ -6938,9 +7029,9 @@ module Phaser {
*/
constructor(game: Game);
/**
*
* Local private reference to game.
* @property _game
* @type {Game}
* @type {Phaser.Game}
* @private
**/
private _game;
@@ -6950,7 +7041,7 @@ module Phaser {
*/
public disabled: bool;
/**
*
* Starts the event listeners running
* @method start
*/
public start(): void;
@@ -7000,7 +7091,7 @@ module Phaser {
**/
private onTouchEnd(event);
/**
*
* Stop the event listeners
* @method stop
*/
public stop(): void;
+268 -146
View File
@@ -6769,7 +6769,6 @@ var Phaser;
* Phaser - Group
*
* This class is used for organising, updating and sorting game objects.
*
*/
var Phaser;
(function (Phaser) {
@@ -6867,7 +6866,7 @@ var Phaser;
configurable: true
});
Group.prototype.add = /**
* Adds a new <code>Basic</code> subclass (Basic, Basic, Enemy, etc) to the group.
* Adds a new <code>Basic</code> subclass (Basic, GameObject, Sprite, etc) to the group.
* Group will try to replace a null member of the array first.
* Failing that, Group will add it to the end of the member array,
* assuming there is room for it, and doubling the size of the array if necessary.
@@ -6876,7 +6875,6 @@ var Phaser;
* the object will NOT be added to the group!</p>
*
* @param {Basic} Object The object you want to add to the group.
*
* @return {Basic} The same <code>Basic</code> object that was passed in.
*/
function (Object) {
@@ -10728,6 +10726,27 @@ var Phaser;
* @return {Phaser.Pointer} This object.
*/
function Pointer(game, id) {
/**
* Local private variable to store the status of dispatching a hold event
* @property _holdSent
* @type {Boolean}
* @private
*/
this._holdSent = false;
/**
* Local private variable storing the short-term history of pointer movements
* @property _history
* @type {Array}
* @private
*/
this._history = [];
/**
* Local private variable storing the time at which the next history drop should occur
* @property _lastDrop
* @type {Number}
* @private
*/
this._nextDrop = 0;
/**
* A Point object representing the x/y screen coordinates of the Pointer.
* @property pointA
@@ -10802,13 +10821,19 @@ var Phaser;
*/
this.y = -1;
/**
* If the Pointer is touching the touchscreen isDown is set to true
* If the Pointer is a mouse this is true, otherwise false
* @property isMouse
* @type {Boolean}
**/
this.isMouse = false;
/**
* If the Pointer is touching the touchscreen, or the mouse button is held down, isDown is set to true
* @property isDown
* @type {Boolean}
**/
this.isDown = false;
/**
* If the Pointer is not touching the touchscreen isUp is set to true
* If the Pointer is not touching the touchscreen, or the mouse button is up, isUp is set to true
* @property isUp
* @type {Boolean}
**/
@@ -10826,17 +10851,11 @@ var Phaser;
**/
this.timeUp = 0;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* A timestamp representing when the Pointer was last tapped or clicked
* @property previousTapTime
* @type {Number}
**/
this.justPressedRate = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
this.justReleasedRate = 200;
this.previousTapTime = 0;
/**
* The total number of times this Pointer has been touched to the touchscreen
* @property totalTouches
@@ -10849,14 +10868,20 @@ var Phaser;
this.pointA = new Phaser.Point();
this.pointB = new Phaser.Point();
this.circle = new Phaser.Circle(0, 0, 44);
if(id == 0) {
this.isMouse = true;
}
}
Object.defineProperty(Pointer.prototype, "duration", {
get: /**
* How long the Pointer has been depressed on the touchscreen.
* How long the Pointer has been depressed on the touchscreen. If not currently down it returns -1.
* @property duration
* @type {Number}
**/
function () {
if(this.isUp) {
return -1;
}
return this._game.time.now - this.timeDown;
},
enumerable: true,
@@ -10886,6 +10911,10 @@ var Phaser;
function (event) {
this.identifier = event.identifier;
this.target = event.target;
if(event.button) {
this.button = event.button;
}
this._history.length = 0;
this.move(event);
this.pointA.setTo(this.x, this.y);
this.active = true;
@@ -10893,18 +10922,48 @@ var Phaser;
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
this._holdSent = false;
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
this._game.input.onDown.dispatch(this);
}
this.totalTouches++;
if(this.isMouse == false) {
this._game.input.currentPointers++;
}
return this;
};
Pointer.prototype.update = function () {
if(this.active) {
if(this._holdSent == false && this.duration >= this._game.input.holdRate) {
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.onHold.dispatch(this);
}
this._holdSent = true;
}
// Update the droppings history
if(this._game.input.recordPointerHistory && this._game.time.now >= this._nextDrop) {
this._nextDrop = this._game.time.now + this._game.input.recordRate;
this._history.push({
x: this.pointB.x,
y: this.pointB.y
});
if(this._history.length > this._game.input.recordLimit) {
this._history.shift();
}
}
}
};
Pointer.prototype.move = /**
* Called when the Pointer is moved on the touchscreen
* @method move
* @param {Any} event
*/
function (event) {
if(event.button) {
this.button = event.button;
}
this.clientX = event.clientX;
this.clientY = event.clientY;
this.pageX = event.pageX;
@@ -10915,9 +10974,10 @@ var Phaser;
this.y = this.pageY - this._game.stage.offset.y;
this.pointB.setTo(this.x, this.y);
this.circle.setTo(this.x, this.y, 44);
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
// Droppings history (used for gestures and motion tracking)
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.x = this.x * this._game.input.scaleX;
this._game.input.y = this.y * this._game.input.scaleY;
}
return this;
};
Pointer.prototype.leave = /**
@@ -10935,22 +10995,38 @@ var Phaser;
* @param {Any} event
*/
function (event) {
console.log('duration', this.duration);
if(this._game.input.multiInputOverride == Phaser.Input.MOUSE_OVERRIDES_TOUCH || this._game.input.multiInputOverride == Phaser.Input.MOUSE_TOUCH_COMBINE || (this._game.input.multiInputOverride == Phaser.Input.TOUCH_OVERRIDES_MOUSE && this._game.input.currentPointers == 0)) {
this._game.input.onUp.dispatch(this);
// Was it a tap?
if(this.duration >= 0 && this.duration <= this._game.input.tapRate) {
// Yes, let's dispatch the signal
this._game.input.onTap.dispatch(this);
// Was it a double-tap?
if(this.timeUp - this.previousTapTime < this._game.input.doubleTapRate) {
this._game.input.onDoubleTap.dispatch(this);
}
this.previousTapTime = this.timeUp;
}
}
this.active = false;
this.withinGame = false;
this.isDown = false;
this.isUp = true;
this.timeUp = this._game.time.now;
this._game.input.onUp.dispatch(this);
if(this.isMouse == false) {
this._game.input.currentPointers--;
}
return this;
};
Pointer.prototype.justPressed = /**
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen is less than justPressedRate
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen or clicked is less than justPressedRate
* @method justPressed
* @param {Number} [duration].
* @return {Boolean}
*/
function (duration) {
if (typeof duration === "undefined") { duration = this.justPressedRate; }
if (typeof duration === "undefined") { duration = this._game.input.justPressedRate; }
if(this.isDown === true && (this.timeDown + duration) > this._game.time.now) {
return true;
} else {
@@ -10964,19 +11040,25 @@ var Phaser;
* @return {Boolean}
*/
function (duration) {
if (typeof duration === "undefined") { duration = this.justReleasedRate; }
if (typeof duration === "undefined") { duration = this._game.input.justReleasedRate; }
if(this.isUp === true && (this.timeUp + duration) > this._game.time.now) {
return true;
} else {
return false;
}
};
Pointer.prototype.reset = function () {
Pointer.prototype.reset = /**
* Resets the Pointer properties. Called by Input.reset when you perform a State change.
* @method reset
*/
function () {
this.active = false;
this.identifier = null;
this.isDown = false;
this.isUp = true;
this.totalTouches = 0;
this._holdSent = false;
this._history.length = 0;
};
Pointer.prototype.renderDebug = /**
* Renders the Pointer.circle object onto the stage in green if down or red if up.
@@ -11050,7 +11132,7 @@ var Phaser;
this._game = game;
}
MSPointer.prototype.start = /**
*
* Starts the event listeners running
* @method start
*/
function () {
@@ -11107,10 +11189,15 @@ var Phaser;
this._game.input.stopPointer(event);
};
MSPointer.prototype.stop = /**
*
* Stop the event listeners
* @method stop
*/
function () {
if(this._game.device.mspointer == true) {
//this._game.stage.canvas.addEventListener('MSPointerDown', (event) => this.onPointerDown(event), false);
//this._game.stage.canvas.addEventListener('MSPointerMove', (event) => this.onPointerMove(event), false);
//this._game.stage.canvas.addEventListener('MSPointerUp', (event) => this.onPointerUp(event), false);
}
};
return MSPointer;
})();
@@ -11174,6 +11261,10 @@ var Phaser;
*/
this.disabled = false;
/**
* Controls the expected behaviour when using a mouse and touch together on a multi-input device
*/
this.multiInputOverride = Input.MOUSE_TOUCH_COMBINE;
/**
* X coordinate of the most recent Pointer event
* @type {Number}
* @private
@@ -11196,22 +11287,69 @@ var Phaser;
*/
this.scaleY = 1;
/**
*
* @type {Number}
*/
this.worldX = 0;
/**
*
* @type {Number}
*/
this.worldY = 0;
/**
* The maximum number of Pointers allowed to be active at any one time.
* For lots of games it's useful to set this to 1
* @type {Number}
*/
this.maxPointers = 10;
/**
* The current number of active Pointers.
* @type {Number}
*/
this.currentPointers = 0;
/**
* The number of milliseconds that the Pointer has to be pressed down and then released to be considered a tap or click
* @property tapRate
* @type {Number}
**/
this.tapRate = 200;
/**
* The number of milliseconds between taps of the same Pointer for it to be considered a double tap / click
* @property doubleTapRate
* @type {Number}
**/
this.doubleTapRate = 250;
/**
* The number of milliseconds that the Pointer has to be pressed down for it to fire a onHold event
* @property holdRate
* @type {Number}
**/
this.holdRate = 2000;
/**
* The number of milliseconds below which the Pointer is considered justPressed
* @property justPressedRate
* @type {Number}
**/
this.justPressedRate = 200;
/**
* The number of milliseconds below which the Pointer is considered justReleased
* @property justReleasedRate
* @type {Number}
**/
this.justReleasedRate = 200;
/**
* Sets if the Pointer objects should record a history of x/y coordinates they have passed through.
* The history is cleared each time the Pointer is pressed down.
* The history is updated at the rate specified in Input.pollRate
* @property recordPointerHistory
* @type {Boolean}
**/
this.recordPointerHistory = true;
/**
* The rate in milliseconds at which the Pointer objects should update their tracking history
* @property recordRate
* @type {Number}
*/
this.recordRate = 100;
/**
* The total number of entries that can be recorded into the Pointer objects tracking history.
* The the Pointer is tracking one event every 100ms, then a trackLimit of 100 would store the last 10 seconds worth of history.
* @property recordLimit
* @type {Number}
*/
this.recordLimit = 100;
this._game = game;
this.mousePointer = new Phaser.Pointer(this._game, 0);
this.pointer1 = new Phaser.Pointer(this._game, 1);
this.pointer2 = new Phaser.Pointer(this._game, 2);
this.pointer3 = new Phaser.Pointer(this._game, 3);
@@ -11229,7 +11367,14 @@ var Phaser;
this.gestures = new Phaser.Gestures(this._game);
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
}
Input.MOUSE_OVERRIDES_TOUCH = 0;
Input.TOUCH_OVERRIDES_MOUSE = 1;
Input.MOUSE_TOUCH_COMBINE = 2;
Object.defineProperty(Input.prototype, "x", {
get: /**
* The screen X coordinate
@@ -11268,12 +11413,19 @@ var Phaser;
this.gestures.start();
};
Input.prototype.update = function () {
//this.worldX = this._game.camera.worldView.x + this.x;
//this.worldY = this._game.camera.worldView.y + this.y;
this.mouse.update();
this.mousePointer.update();
this.pointer1.update();
this.pointer2.update();
this.pointer3.update();
this.pointer4.update();
this.pointer5.update();
this.pointer6.update();
this.pointer7.update();
this.pointer8.update();
this.pointer9.update();
this.pointer10.update();
};
Input.prototype.reset = function () {
this.mouse.reset();
this.keyboard.reset();
this.pointer1.reset();
this.pointer2.reset();
@@ -11287,6 +11439,10 @@ var Phaser;
this.pointer10.reset();
this.onDown = new Phaser.Signal();
this.onUp = new Phaser.Signal();
this.onTap = new Phaser.Signal();
this.onDoubleTap = new Phaser.Signal();
this.onHold = new Phaser.Signal();
this.currentPointers = 0;
};
Object.defineProperty(Input.prototype, "totalInactivePointers", {
get: /**
@@ -11295,41 +11451,41 @@ var Phaser;
* @return {Number} The number of Pointers currently inactive
**/
function () {
return 10 - this.totalActivePointers;
return 10 - this.currentPointers;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Input.prototype, "totalActivePointers", {
get: /**
* Get the total number of active Pointers
* Recalculates the total number of active Pointers
* @method totalActivePointers
* @return {Number} The number of Pointers currently active
**/
function () {
var result = 0;
this.currentPointers = 0;
if(this.pointer1.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer2.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer3.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer4.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer5.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer6.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer7.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer8.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer9.active == true) {
result++;
this.currentPointers++;
} else if(this.pointer10.active == true) {
result++;
this.currentPointers++;
}
return result;
return this.currentPointers;
},
enumerable: true,
configurable: true
@@ -11518,7 +11674,7 @@ var Phaser;
this._game.stage.context.fillStyle = color;
this._game.stage.context.fillText('Input', x, y);
this._game.stage.context.fillText('Screen X: ' + this.x + ' Screen Y: ' + this.y, x, y + 14);
this._game.stage.context.fillText('World X: ' + this.worldX + ' World Y: ' + this.worldY, x, y + 28);
this._game.stage.context.fillText('World X: ' + this.getWorldX() + ' World Y: ' + this.getWorldY(), x, y + 28);
this._game.stage.context.fillText('Scale X: ' + this.scaleX.toFixed(1) + ' Scale Y: ' + this.scaleY.toFixed(1), x, y + 42);
};
return Input;
@@ -11799,39 +11955,21 @@ var Phaser;
(function (Phaser) {
var Mouse = (function () {
function Mouse(game) {
this._x = 0;
this._y = 0;
/**
* You can disable all Input by setting disabled = true. While set all new input related events will be ignored.
* @type {Boolean}
*/
this.disabled = false;
/**
* @type {Boolean}
*/
this.isDown = false;
/**
* @type {Boolean}
*/
this.isUp = true;
/**
* @type {Number}
*/
this.timeDown = 0;
/**
* @type {Number}
*/
this.duration = 0;
/**
* @type {Number}
*/
this.timeUp = 0;
this._game = game;
}
Mouse.LEFT_BUTTON = 0;
Mouse.MIDDLE_BUTTON = 1;
Mouse.RIGHT_BUTTON = 2;
Mouse.prototype.start = function () {
Mouse.prototype.start = /**
* Starts the event listeners running
* @method start
*/
function () {
var _this = this;
this._game.stage.canvas.addEventListener('mousedown', function (event) {
return _this.onMouseDown(event);
@@ -11843,10 +11981,6 @@ var Phaser;
return _this.onMouseUp(event);
}, true);
};
Mouse.prototype.reset = function () {
this.isDown = false;
this.isUp = true;
};
Mouse.prototype.onMouseDown = /**
* @param {MouseEvent} event
*/
@@ -11854,22 +11988,8 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this.isDown = true;
this.isUp = false;
this.timeDown = this._game.time.now;
this._game.input.onDown.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
};
Mouse.prototype.update = function () {
//this._game.input.x = this._x * this._game.input.scaleX;
//this._game.input.y = this._y * this._game.input.scaleY;
if(this.isDown) {
this.duration = this._game.time.now - this.timeDown;
}
event['identifier'] = 0;
this._game.input.mousePointer.start(event);
};
Mouse.prototype.onMouseMove = /**
* @param {MouseEvent} event
@@ -11878,11 +11998,8 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
event['identifier'] = 0;
this._game.input.mousePointer.move(event);
};
Mouse.prototype.onMouseUp = /**
* @param {MouseEvent} event
@@ -11891,17 +12008,18 @@ var Phaser;
if(this._game.input.disabled || this.disabled) {
return;
}
this.button = event.button;
this.isDown = false;
this.isUp = true;
this.timeUp = this._game.time.now;
this.duration = this.timeUp - this.timeDown;
this._x = event.clientX - this._game.stage.x;
this._y = event.clientY - this._game.stage.y;
this._game.input.x = this._x * this._game.input.scaleX;
this._game.input.y = this._y * this._game.input.scaleY;
this._game.input.onUp.dispatch(this._game.input.x, this._game.input.y, this.timeDown);
event['identifier'] = 0;
this._game.input.mousePointer.stop(event);
};
Mouse.prototype.stop = /**
* Stop the event listeners
* @method stop
*/
function () {
//this._game.stage.canvas.addEventListener('mousedown', (event: MouseEvent) => this.onMouseDown(event), true);
//this._game.stage.canvas.addEventListener('mousemove', (event: MouseEvent) => this.onMouseMove(event), true);
//this._game.stage.canvas.addEventListener('mouseup', (event: MouseEvent) => this.onMouseUp(event), true);
};
return Mouse;
})();
Phaser.Mouse = Mouse;
@@ -11934,32 +12052,34 @@ var Phaser;
this._game = game;
}
Touch.prototype.start = /**
*
* Starts the event listeners running
* @method start
*/
function () {
var _this = this;
this._game.stage.canvas.addEventListener('touchstart', function (event) {
return _this.onTouchStart(event);
}, false);
this._game.stage.canvas.addEventListener('touchmove', function (event) {
return _this.onTouchMove(event);
}, false);
this._game.stage.canvas.addEventListener('touchend', function (event) {
return _this.onTouchEnd(event);
}, false);
this._game.stage.canvas.addEventListener('touchenter', function (event) {
return _this.onTouchEnter(event);
}, false);
this._game.stage.canvas.addEventListener('touchleave', function (event) {
return _this.onTouchLeave(event);
}, false);
this._game.stage.canvas.addEventListener('touchcancel', function (event) {
return _this.onTouchCancel(event);
}, false);
document.addEventListener('touchmove', function (event) {
return _this.consumeTouchMove(event);
}, false);
if(this._game.device.touch) {
this._game.stage.canvas.addEventListener('touchstart', function (event) {
return _this.onTouchStart(event);
}, false);
this._game.stage.canvas.addEventListener('touchmove', function (event) {
return _this.onTouchMove(event);
}, false);
this._game.stage.canvas.addEventListener('touchend', function (event) {
return _this.onTouchEnd(event);
}, false);
this._game.stage.canvas.addEventListener('touchenter', function (event) {
return _this.onTouchEnter(event);
}, false);
this._game.stage.canvas.addEventListener('touchleave', function (event) {
return _this.onTouchLeave(event);
}, false);
this._game.stage.canvas.addEventListener('touchcancel', function (event) {
return _this.onTouchCancel(event);
}, false);
document.addEventListener('touchmove', function (event) {
return _this.consumeTouchMove(event);
}, false);
}
};
Touch.prototype.consumeTouchMove = /**
* Prevent iOS bounce-back (doesn't work?)
@@ -12056,17 +12176,19 @@ var Phaser;
}
};
Touch.prototype.stop = /**
*
* Stop the event listeners
* @method stop
*/
function () {
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
};
if(this._game.device.touch) {
//this._domElement.addEventListener('touchstart', (event) => this.onTouchStart(event), false);
//this._domElement.addEventListener('touchmove', (event) => this.onTouchMove(event), false);
//this._domElement.addEventListener('touchend', (event) => this.onTouchEnd(event), false);
//this._domElement.addEventListener('touchenter', (event) => this.onTouchEnter(event), false);
//this._domElement.addEventListener('touchleave', (event) => this.onTouchLeave(event), false);
//this._domElement.addEventListener('touchcancel', (event) => this.onTouchCancel(event), false);
}
};
return Touch;
})();
Phaser.Touch = Touch;
@@ -13666,7 +13788,7 @@ var Phaser;
};
Tilemap.prototype.getTileFromInputXY = function (layer) {
if (typeof layer === "undefined") { layer = 0; }
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.worldX, this._game.input.worldY)];
return this.tiles[this.layers[layer].getTileFromWorldXY(this._game.input.getWorldX(), this._game.input.getWorldY())];
};
Tilemap.prototype.getTileOverlaps = /**
* Get tiles overlaps the given object.