2013-08-31 12:54:59 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* @ author Richard Davey < rich @ photonstorm . com >
2014-02-05 05:54:25 +00:00
* @ copyright 2014 Photon Storm Ltd .
2013-10-01 12:54:29 +00:00
* @ license { @ link https : //github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
* /
/ * *
* Phaser - Pointer constructor .
2013-08-31 12:54:59 +00:00
*
2013-10-01 12:54:29 +00:00
* @ class Phaser . Pointer
* @ classdesc A Pointer object is used by the Mouse , Touch and MSPoint managers and represents a single finger on the touch screen .
* @ constructor
* @ param { Phaser . Game } game - A reference to the currently running game .
2013-11-25 03:13:04 +00:00
* @ param { number } id - The ID of the Pointer object within the game . Each game can have up to 10 active pointers .
2013-08-31 12:54:59 +00:00
* /
2013-08-31 20:50:34 +00:00
Phaser . Pointer = function ( game , id ) {
2013-08-31 12:54:59 +00:00
2013-10-02 14:05:55 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { Phaser . Game } game - A reference to the currently running game .
2013-10-02 14:05:55 +00:00
* /
this . game = game ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { number } id - The ID of the Pointer object within the game . Each game can have up to 10 active pointers .
2013-10-02 14:05:55 +00:00
* /
this . id = id ;
2014-05-06 01:45:10 +00:00
/ * *
* @ property { number } type - The const type of this object .
* @ readonly
* /
this . type = Phaser . POINTER ;
/ * *
* @ property { boolean } exists - A Pointer object that exists is allowed to be checked for physics collisions and overlaps .
* @ default
* /
this . exists = true ;
2014-05-01 22:35:23 +00:00
/ * *
* @ property { number } identifier - The identifier property of the Pointer as set by the DOM event when this Pointer is started .
* @ default
* /
this . identifier = 0 ;
2014-05-02 11:14:05 +00:00
/ * *
* @ property { number } pointerId - The pointerId property of the Pointer as set by the DOM event when this Pointer is started . The browser can and will recycle this value .
* @ default
* /
this . pointerId = null ;
2014-05-01 22:35:23 +00:00
/ * *
* @ property { any } target - The target property of the Pointer as set by the DOM event when this Pointer is started .
* @ default
* /
this . target = null ;
/ * *
* @ property { any } button - The button property of the Pointer as set by the DOM event when this Pointer is started .
* @ default
* /
this . button = null ;
2013-09-10 19:40:34 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } _holdSent - Local private variable to store the status of dispatching a hold event .
2013-09-10 19:40:34 +00:00
* @ private
2013-10-01 12:54:29 +00:00
* @ default
2013-09-10 19:40:34 +00:00
* /
this . _holdSent = false ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { array } _history - Local private variable storing the short - term history of pointer movements .
2013-09-10 19:40:34 +00:00
* @ private
* /
this . _history = [ ] ;
/ * *
2014-05-01 22:35:23 +00:00
* @ property { number } _nextDrop - Local private variable storing the time at which the next history drop should occur .
2013-09-10 19:40:34 +00:00
* @ private
* /
this . _nextDrop = 0 ;
2013-10-01 12:54:29 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } _stateReset - Monitor events outside of a state reset loop .
* @ private
* /
2013-09-10 19:40:34 +00:00
this . _stateReset = false ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { boolean } withinGame - true if the Pointer is over the game canvas , otherwise false .
2013-09-10 19:40:34 +00:00
* /
this . withinGame = false ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } clientX - The horizontal coordinate of the Pointer within the application ' s client area at which the event occurred ( as opposed to the coordinates within the page ) .
2013-09-10 19:40:34 +00:00
* /
this . clientX = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } clientY - The vertical coordinate of the Pointer within the application ' s client area at which the event occurred ( as opposed to the coordinates within the page ) .
2013-09-10 19:40:34 +00:00
* /
this . clientY = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } pageX - The horizontal coordinate of the Pointer relative to whole document .
2013-09-10 19:40:34 +00:00
* /
this . pageX = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } pageY - The vertical coordinate of the Pointer relative to whole document .
2013-09-10 19:40:34 +00:00
* /
this . pageY = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } screenX - The horizontal coordinate of the Pointer relative to the screen .
2013-09-10 19:40:34 +00:00
* /
this . screenX = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } screenY - The vertical coordinate of the Pointer relative to the screen .
2013-09-10 19:40:34 +00:00
* /
this . screenY = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } rawMovementX - The horizontal raw relative movement of the Pointer in pixels since last event .
2014-05-17 09:32:11 +00:00
* @ default
* /
2014-05-17 09:27:31 +00:00
this . rawMovementX = 0 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } rawMovementY - The vertical raw relative movement of the Pointer in pixels since last event .
2014-05-17 09:32:11 +00:00
* @ default
* /
2014-05-17 09:27:31 +00:00
this . rawMovementY = 0 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } movementX - The horizontal processed relative movement of the Pointer in pixels since last event .
2014-05-17 09:32:11 +00:00
* @ default
* /
2014-05-17 09:27:31 +00:00
this . movementX = 0 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } movementY - The vertical processed relative movement of the Pointer in pixels since last event .
2014-05-17 09:32:11 +00:00
* @ default
* /
2014-05-17 09:27:31 +00:00
this . movementY = 0 ;
2014-05-17 09:32:11 +00:00
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } x - The horizontal coordinate of the Pointer . This value is automatically scaled based on the game scale .
2013-10-01 12:54:29 +00:00
* @ default
2013-09-10 19:40:34 +00:00
* /
this . x = - 1 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } y - The vertical coordinate of the Pointer . This value is automatically scaled based on the game scale .
2013-10-01 12:54:29 +00:00
* @ default
2013-09-10 19:40:34 +00:00
* /
this . y = - 1 ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } isMouse - If the Pointer is a mouse this is true , otherwise false .
* @ default
2013-10-01 12:54:29 +00:00
* /
2013-09-10 19:40:34 +00:00
this . isMouse = false ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } isDown - If the Pointer is touching the touchscreen , or the mouse button is held down , isDown is set to true .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . isDown = false ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } isUp - If the Pointer is not touching the touchscreen , or the mouse button is up , isUp is set to true .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . isUp = true ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { number } timeDown - A timestamp representing when the Pointer first touched the touchscreen .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . timeDown = 0 ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { number } timeUp - A timestamp representing when the Pointer left the touchscreen .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . timeUp = 0 ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { number } previousTapTime - A timestamp representing when the Pointer was last tapped or clicked .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . previousTapTime = 0 ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { number } totalTouches - The total number of times this Pointer has been touched to the touchscreen .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . totalTouches = 0 ;
/ * *
2014-05-19 17:49:16 +00:00
* @ property { number } msSinceLastClick - The number of milliseconds since the last click or touch event .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . msSinceLastClick = Number . MAX _VALUE ;
/ * *
2013-11-25 03:13:04 +00:00
* @ property { any } targetObject - The Game Object this Pointer is currently over / touching / dragging .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-09-10 19:40:34 +00:00
this . targetObject = null ;
2013-10-01 12:54:29 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { boolean } active - An active pointer is one that is currently pressed down on the display . A Mouse is always active .
2013-10-01 12:54:29 +00:00
* @ default
* /
2013-08-31 12:54:59 +00:00
this . active = false ;
2013-10-01 12:54:29 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { Phaser . Point } position - A Phaser . Point object containing the current x / y values of the pointer on the display .
2013-10-01 12:54:29 +00:00
* /
2013-08-31 12:54:59 +00:00
this . position = new Phaser . Point ( ) ;
2014-03-23 07:59:28 +00:00
2013-10-01 12:54:29 +00:00
/ * *
2013-11-25 03:13:04 +00:00
* @ property { Phaser . Point } positionDown - A Phaser . Point object containing the x / y values of the pointer when it was last in a down state on the display .
2013-10-01 12:54:29 +00:00
* /
2013-08-31 12:54:59 +00:00
this . positionDown = new Phaser . Point ( ) ;
2014-03-31 14:07:19 +00:00
/ * *
* @ property { Phaser . Point } positionUp - A Phaser . Point object containing the x / y values of the pointer when it was last released .
* /
this . positionUp = new Phaser . Point ( ) ;
2013-08-31 12:54:59 +00:00
2013-10-01 12:54:29 +00:00
/ * *
2013-11-13 06:49:24 +00:00
* A Phaser . Circle that is centered on the x / y coordinates of this pointer , useful for hit detection .
* The Circle size is 44 px ( Apples recommended "finger tip" size ) .
2013-10-01 12:54:29 +00:00
* @ property { Phaser . Circle } circle
* /
2013-08-31 12:54:59 +00:00
this . circle = new Phaser . Circle ( 0 , 0 , 44 ) ;
2013-11-25 03:13:04 +00:00
if ( id === 0 )
2013-08-31 12:54:59 +00:00
{
this . isMouse = true ;
}
} ;
2013-08-31 20:50:34 +00:00
Phaser . Pointer . prototype = {
2013-08-31 12:54:59 +00:00
2013-11-25 03:13:04 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* Called when the Pointer is pressed onto the touchscreen .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # start
2014-05-02 11:14:05 +00:00
* @ param { any } event - The DOM event from the browser .
2013-08-31 12:54:59 +00:00
* /
start : function ( event ) {
2014-05-02 11:14:05 +00:00
if ( event [ 'pointerId' ] )
{
this . pointerId = event . pointerId ;
}
2013-08-31 12:54:59 +00:00
this . identifier = event . identifier ;
this . target = event . target ;
2013-10-11 19:02:12 +00:00
if ( typeof event . button !== 'undefined' )
2013-08-31 12:54:59 +00:00
{
this . button = event . button ;
}
2014-04-08 02:31:13 +00:00
this . _history = [ ] ;
2013-08-31 12:54:59 +00:00
this . active = true ;
this . withinGame = true ;
this . isDown = true ;
this . isUp = false ;
// Work out how long it has been since the last click
this . msSinceLastClick = this . game . time . now - this . timeDown ;
this . timeDown = this . game . time . now ;
this . _holdSent = false ;
// This sets the x/y and other local values
2014-02-12 01:25:36 +00:00
this . move ( event , true ) ;
2013-08-31 12:54:59 +00:00
// x and y are the old values here?
this . positionDown . setTo ( this . x , this . y ) ;
2014-02-12 01:25:36 +00:00
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 ) )
2013-08-31 12:54:59 +00:00
{
2013-11-01 02:07:21 +00:00
this . game . input . x = this . x ;
this . game . input . y = this . y ;
2013-08-31 12:54:59 +00:00
this . game . input . position . setTo ( this . x , this . y ) ;
2013-10-24 03:27:28 +00:00
this . game . input . onDown . dispatch ( this , event ) ;
2013-08-31 12:54:59 +00:00
this . game . input . resetSpeed ( this . x , this . y ) ;
}
this . _stateReset = false ;
this . totalTouches ++ ;
2014-02-12 01:25:36 +00:00
if ( ! this . isMouse )
2013-08-31 12:54:59 +00:00
{
this . game . input . currentPointers ++ ;
}
if ( this . targetObject !== null )
{
2013-09-08 21:38:19 +00:00
this . targetObject . _touchedHandler ( this ) ;
2013-08-31 12:54:59 +00:00
}
return this ;
} ,
2013-11-25 03:13:04 +00:00
/ * *
2014-01-20 20:14:34 +00:00
* Called by the Input Manager .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # update
2013-10-01 12:54:29 +00:00
* /
2013-08-31 12:54:59 +00:00
update : function ( ) {
if ( this . active )
{
2013-11-25 03:13:04 +00:00
if ( this . _holdSent === false && this . duration >= this . game . input . holdRate )
2013-08-31 12:54:59 +00:00
{
2013-11-25 03:13:04 +00:00
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 ) )
2013-08-31 12:54:59 +00:00
{
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 . position . x ,
y : this . position . y
} ) ;
2014-03-23 07:59:28 +00:00
2013-08-31 12:54:59 +00:00
if ( this . _history . length > this . game . input . recordLimit )
{
this . _history . shift ( ) ;
}
}
}
} ,
2013-11-25 03:13:04 +00:00
/ * *
* Called when the Pointer is moved .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # move
2013-11-25 03:13:04 +00:00
* @ param { MouseEvent | PointerEvent | TouchEvent } event - The event passed up from the input handler .
2014-02-12 01:25:36 +00:00
* @ param { boolean } [ fromClick = false ] - Was this called from the click event ?
2013-08-31 12:54:59 +00:00
* /
2014-02-12 01:25:36 +00:00
move : function ( event , fromClick ) {
2013-08-31 12:54:59 +00:00
if ( this . game . input . pollLocked )
{
return ;
}
2014-02-12 01:25:36 +00:00
if ( typeof fromClick === 'undefined' ) { fromClick = false ; }
2013-10-11 19:02:12 +00:00
if ( typeof event . button !== 'undefined' )
2013-08-31 12:54:59 +00:00
{
this . button = event . button ;
}
this . clientX = event . clientX ;
this . clientY = event . clientY ;
this . pageX = event . pageX ;
this . pageY = event . pageY ;
this . screenX = event . screenX ;
this . screenY = event . screenY ;
2014-05-19 12:11:58 +00:00
if ( this . isMouse && this . game . input . mouse . locked && ! fromClick )
{
2014-05-17 09:27:31 +00:00
this . rawMovementX = event . movementX || event . mozMovementX || event . webkitMovementX || 0 ;
this . rawMovementY = event . movementY || event . mozMovementY || event . webkitMovementY || 0 ;
this . movementX += this . rawMovementX ;
this . movementY += this . rawMovementY ;
}
2013-08-31 12:54:59 +00:00
this . x = ( this . pageX - this . game . stage . offset . x ) * this . game . input . scale . x ;
this . y = ( this . pageY - this . game . stage . offset . y ) * this . game . input . scale . y ;
this . position . setTo ( this . x , this . y ) ;
this . circle . x = this . x ;
this . circle . y = this . y ;
2014-05-19 17:49:16 +00:00
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 ) )
2013-08-31 12:54:59 +00:00
{
this . game . input . activePointer = this ;
this . game . input . x = this . x ;
this . game . input . y = this . y ;
this . game . input . position . setTo ( this . game . input . x , this . game . input . y ) ;
this . game . input . circle . x = this . game . input . x ;
this . game . input . circle . y = this . game . input . y ;
}
2014-05-19 17:49:16 +00:00
this . withinGame = this . game . scale . bounds . contains ( this . pageX , this . pageY ) ;
2014-01-20 20:14:34 +00:00
// If the game is paused we don't process any target objects or callbacks
2013-08-31 12:54:59 +00:00
if ( this . game . paused )
{
return this ;
}
2014-05-14 02:01:24 +00:00
// DEPRECATED - Soon to be removed
2014-01-20 20:14:34 +00:00
if ( this . game . input . moveCallback )
{
this . game . input . moveCallback . call ( this . game . input . moveCallbackContext , this , this . x , this . y ) ;
}
2014-05-14 02:01:24 +00:00
var i = this . game . input . moveCallbacks . length ;
while ( i -- )
{
this . game . input . moveCallbacks [ i ] . callback . call ( this . game . input . moveCallbacks [ i ] . context , this , this . x , this . y ) ;
}
2013-08-31 12:54:59 +00:00
// Easy out if we're dragging something and it still exists
2013-11-25 03:13:04 +00:00
if ( this . targetObject !== null && this . targetObject . isDragged === true )
2013-08-31 12:54:59 +00:00
{
2013-11-25 03:13:04 +00:00
if ( this . targetObject . update ( this ) === false )
2013-08-31 12:54:59 +00:00
{
this . targetObject = null ;
}
return this ;
}
// Work out which object is on the top
2014-02-28 19:45:15 +00:00
this . _highestRenderOrderID = Number . MAX _SAFE _INTEGER ;
2013-09-08 16:39:23 +00:00
this . _highestRenderObject = null ;
2013-08-31 12:54:59 +00:00
this . _highestInputPriorityID = - 1 ;
2014-04-25 14:11:54 +00:00
// Run through the list
2013-09-08 21:38:19 +00:00
if ( this . game . input . interactiveItems . total > 0 )
2013-09-08 12:23:21 +00:00
{
2014-04-25 14:11:54 +00:00
var currentNode = this . game . input . interactiveItems . first ;
2013-09-08 21:38:19 +00:00
2013-11-25 03:13:04 +00:00
do
2013-09-08 12:23:21 +00:00
{
2013-09-21 12:07:06 +00:00
// If the object is using pixelPerfect checks, or has a higher InputManager.PriorityID OR if the priority ID is the same as the current highest AND it has a higher renderOrderID, then set it to the top
2014-04-25 14:11:54 +00:00
if ( currentNode && currentNode . validForInput ( this . _highestInputPriorityID , this . _highestRenderOrderID ) )
2013-09-08 12:23:21 +00:00
{
2014-02-12 01:25:36 +00:00
if ( ( ! fromClick && currentNode . checkPointerOver ( this ) ) || ( fromClick && currentNode . checkPointerDown ( this ) ) )
2013-09-08 21:38:19 +00:00
{
2014-02-28 19:45:15 +00:00
this . _highestRenderOrderID = currentNode . sprite . _cache [ 3 ] ; // renderOrderID
2013-09-08 21:38:19 +00:00
this . _highestInputPriorityID = currentNode . priorityID ;
this . _highestRenderObject = currentNode ;
}
2013-09-08 12:23:21 +00:00
}
2014-04-25 14:11:54 +00:00
currentNode = this . game . input . interactiveItems . next ;
2013-09-08 12:23:21 +00:00
}
2014-04-25 14:11:54 +00:00
while ( currentNode !== null ) ;
2013-08-31 12:54:59 +00:00
}
2014-02-10 02:14:59 +00:00
if ( this . _highestRenderObject === null )
2013-08-31 12:54:59 +00:00
{
2013-09-08 16:39:23 +00:00
// The pointer isn't currently over anything, check if we've got a lingering previous target
if ( this . targetObject )
2013-08-31 12:54:59 +00:00
{
2013-09-08 16:39:23 +00:00
this . targetObject . _pointerOutHandler ( this ) ;
2013-08-31 12:54:59 +00:00
this . targetObject = null ;
}
}
else
{
2014-02-10 02:14:59 +00:00
if ( this . targetObject === null )
2013-08-31 12:54:59 +00:00
{
// And now set the new one
2013-09-08 16:39:23 +00:00
this . targetObject = this . _highestRenderObject ;
this . _highestRenderObject . _pointerOverHandler ( this ) ;
2013-08-31 12:54:59 +00:00
}
else
{
// We've got a target from the last update
2014-02-10 02:14:59 +00:00
if ( this . targetObject === this . _highestRenderObject )
2013-08-31 12:54:59 +00:00
{
// Same target as before, so update it
2013-11-25 03:13:04 +00:00
if ( this . _highestRenderObject . update ( this ) === false )
2013-08-31 12:54:59 +00:00
{
this . targetObject = null ;
}
}
else
{
// The target has changed, so tell the old one we've left it
2013-09-08 16:39:23 +00:00
this . targetObject . _pointerOutHandler ( this ) ;
2013-08-31 12:54:59 +00:00
// And now set the new one
2013-09-08 16:39:23 +00:00
this . targetObject = this . _highestRenderObject ;
this . targetObject . _pointerOverHandler ( this ) ;
2013-08-31 12:54:59 +00:00
}
}
}
return this ;
} ,
2013-11-25 03:13:04 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* Called when the Pointer leaves the target area .
2014-05-02 11:21:57 +00:00
*
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # leave
2013-11-25 03:13:04 +00:00
* @ param { MouseEvent | PointerEvent | TouchEvent } event - The event passed up from the input handler .
2013-08-31 12:54:59 +00:00
* /
leave : function ( event ) {
this . withinGame = false ;
2014-02-12 01:25:36 +00:00
this . move ( event , false ) ;
2013-08-31 12:54:59 +00:00
} ,
2013-11-25 03:13:04 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* Called when the Pointer leaves the touchscreen .
2014-05-02 11:21:57 +00:00
*
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # stop
2013-11-25 03:13:04 +00:00
* @ param { MouseEvent | PointerEvent | TouchEvent } event - The event passed up from the input handler .
2013-08-31 12:54:59 +00:00
* /
stop : function ( event ) {
if ( this . _stateReset )
{
event . preventDefault ( ) ;
return ;
}
this . timeUp = this . game . time . now ;
2014-05-14 01:42:44 +00:00
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 ) )
2013-08-31 12:54:59 +00:00
{
2013-10-24 03:27:28 +00:00
this . game . input . onUp . dispatch ( this , event ) ;
2013-08-31 12:54:59 +00:00
// Was it a tap?
if ( this . duration >= 0 && this . duration <= this . game . input . tapRate )
{
// Was it a double-tap?
if ( this . timeUp - this . previousTapTime < this . game . input . doubleTapRate )
{
// Yes, let's dispatch the signal then with the 2nd parameter set to true
this . game . input . onTap . dispatch ( this , true ) ;
}
else
{
// Wasn't a double-tap, so dispatch a single tap signal
this . game . input . onTap . dispatch ( this , false ) ;
}
this . previousTapTime = this . timeUp ;
}
}
// Mouse is always active
if ( this . id > 0 )
{
this . active = false ;
}
this . withinGame = false ;
this . isDown = false ;
this . isUp = true ;
2014-05-02 11:21:57 +00:00
this . pointerId = null ;
this . identifier = null ;
2014-03-31 14:07:19 +00:00
this . positionUp . setTo ( this . x , this . y ) ;
2013-11-25 03:13:04 +00:00
if ( this . isMouse === false )
2013-08-31 12:54:59 +00:00
{
this . game . input . currentPointers -- ;
}
2014-04-25 14:11:54 +00:00
this . game . input . interactiveItems . callAll ( '_releasedHandler' , this ) ;
2013-08-31 12:54:59 +00:00
this . targetObject = null ;
2014-04-25 14:11:54 +00:00
2013-08-31 12:54:59 +00:00
return this ;
} ,
2013-11-25 03:13:04 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* The Pointer is considered justPressed if the time it was pressed onto the touchscreen or clicked is less than justPressedRate .
2013-11-25 03:13:04 +00:00
* Note that calling justPressed doesn ' t reset the pressed status of the Pointer , it will return ` true ` for as long as the duration is valid .
* If you wish to check if the Pointer was pressed down just once then see the Sprite . events . onInputDown event .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # justPressed
2013-11-25 03:13:04 +00:00
* @ param { number } [ duration ] - The time to check against . If none given it will use InputManager . justPressedRate .
* @ return { boolean } true if the Pointer was pressed down within the duration given .
2013-08-31 12:54:59 +00:00
* /
justPressed : function ( duration ) {
2013-09-08 16:39:23 +00:00
duration = duration || this . game . input . justPressedRate ;
2013-08-31 12:54:59 +00:00
return ( this . isDown === true && ( this . timeDown + duration ) > this . game . time . now ) ;
} ,
2013-11-25 03:13:04 +00:00
/ * *
2013-10-01 12:54:29 +00:00
* The Pointer is considered justReleased if the time it left the touchscreen is less than justReleasedRate .
2013-11-25 03:13:04 +00:00
* Note that calling justReleased doesn ' t reset the pressed status of the Pointer , it will return ` true ` for as long as the duration is valid .
* If you wish to check if the Pointer was released just once then see the Sprite . events . onInputUp event .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # justReleased
2013-11-25 03:13:04 +00:00
* @ param { number } [ duration ] - The time to check against . If none given it will use InputManager . justReleasedRate .
* @ return { boolean } true if the Pointer was released within the duration given .
2013-08-31 12:54:59 +00:00
* /
justReleased : function ( duration ) {
2013-09-08 16:39:23 +00:00
duration = duration || this . game . input . justReleasedRate ;
2013-08-31 12:54:59 +00:00
return ( this . isUp === true && ( this . timeUp + duration ) > this . game . time . now ) ;
} ,
2013-11-25 03:13:04 +00:00
/ * *
2013-08-31 12:54:59 +00:00
* Resets the Pointer properties . Called by InputManager . reset when you perform a State change .
2013-10-02 14:05:55 +00:00
* @ method Phaser . Pointer # reset
2013-08-31 12:54:59 +00:00
* /
reset : function ( ) {
2013-11-25 03:13:04 +00:00
if ( this . isMouse === false )
2013-08-31 12:54:59 +00:00
{
this . active = false ;
}
2014-05-02 11:14:05 +00:00
this . pointerId = null ;
2013-08-31 12:54:59 +00:00
this . identifier = null ;
this . isDown = false ;
this . isUp = true ;
this . totalTouches = 0 ;
this . _holdSent = false ;
this . _history . length = 0 ;
this . _stateReset = true ;
2013-09-08 16:39:23 +00:00
if ( this . targetObject )
2013-08-31 12:54:59 +00:00
{
2013-09-08 16:39:23 +00:00
this . targetObject . _releasedHandler ( this ) ;
2013-08-31 12:54:59 +00:00
}
this . targetObject = null ;
2014-05-17 09:27:31 +00:00
} ,
/ * *
* Resets the movementX and movementY properties . Use in your update handler after retrieving the values .
* @ method Phaser . Pointer # resetMovement
* /
resetMovement : function ( ) {
2014-05-19 12:11:58 +00:00
2014-05-17 09:27:31 +00:00
this . movementX = 0 ;
this . movementY = 0 ;
2014-05-19 12:11:58 +00:00
2013-08-31 12:54:59 +00:00
}
} ;
2013-12-30 16:54:00 +00:00
Phaser . Pointer . prototype . constructor = Phaser . Pointer ;
2013-10-01 12:54:29 +00:00
/ * *
* How long the Pointer has been depressed on the touchscreen . If not currently down it returns - 1.
2013-10-02 14:05:55 +00:00
* @ name Phaser . Pointer # duration
* @ property { number } duration - How long the Pointer has been depressed on the touchscreen . If not currently down it returns - 1.
* @ readonly
2013-10-01 12:54:29 +00:00
* /
2013-08-31 20:50:34 +00:00
Object . defineProperty ( Phaser . Pointer . prototype , "duration" , {
2013-08-31 12:54:59 +00:00
get : function ( ) {
if ( this . isUp )
{
return - 1 ;
}
return this . game . time . now - this . timeDown ;
2013-09-11 12:21:07 +00:00
}
2013-08-31 12:54:59 +00:00
} ) ;
2013-10-01 12:54:29 +00:00
/ * *
2013-10-02 14:05:55 +00:00
* Gets the X value of this Pointer in world coordinates based on the world camera .
* @ name Phaser . Pointer # worldX
* @ property { number } duration - The X value of this Pointer in world coordinates based on the world camera .
* @ readonly
* /
2013-08-31 20:50:34 +00:00
Object . defineProperty ( Phaser . Pointer . prototype , "worldX" , {
2013-08-31 12:54:59 +00:00
get : function ( ) {
2013-11-25 03:13:04 +00:00
return this . game . world . camera . x + this . x ;
2013-08-31 12:54:59 +00:00
2013-09-11 12:21:07 +00:00
}
2013-08-31 12:54:59 +00:00
} ) ;
2013-10-01 12:54:29 +00:00
/ * *
2013-10-02 14:05:55 +00:00
* Gets the Y value of this Pointer in world coordinates based on the world camera .
* @ name Phaser . Pointer # worldY
* @ property { number } duration - The Y value of this Pointer in world coordinates based on the world camera .
* @ readonly
* /
2013-08-31 20:50:34 +00:00
Object . defineProperty ( Phaser . Pointer . prototype , "worldY" , {
2013-08-31 12:54:59 +00:00
get : function ( ) {
2013-11-25 03:13:04 +00:00
return this . game . world . camera . y + this . y ;
2013-08-31 12:54:59 +00:00
2013-09-11 12:21:07 +00:00
}
2013-08-31 12:54:59 +00:00
} ) ;