From b951b02de81f351ef65ecf34f5e2f58e8db8c5f4 Mon Sep 17 00:00:00 2001 From: Richard Davey Date: Mon, 3 Jun 2013 01:22:14 +0100 Subject: [PATCH] Input priority IDs working properly for drag events. --- Phaser/components/sprite/Input.ts | 150 ++++++++++-------- Phaser/input/Pointer.ts | 18 ++- Tests/Tests.csproj | 8 + Tests/assets/pics/ra_einstein.png | Bin 0 -> 77079 bytes .../pics/shadow_of_the_beast2_karamoon.png | Bin 0 -> 2766 bytes .../pics/shadow_of_the_beast2_other_world.png | Bin 0 -> 3445 bytes Tests/assets/sprites/atari1200xl.png | Bin 0 -> 1459 bytes Tests/assets/sprites/atari400.png | Bin 0 -> 2764 bytes Tests/assets/sprites/atari800.png | Bin 0 -> 2393 bytes Tests/assets/sprites/darkwing_crazy.png | Bin 0 -> 1616 bytes Tests/assets/sprites/diamond.png | Bin 0 -> 508 bytes Tests/assets/sprites/firstaid.png | Bin 0 -> 554 bytes .../sprites/ra_dont_crack_under_pressure.png | Bin 0 -> 15662 bytes Tests/input/drag sprite 1.js | 9 +- Tests/input/drag sprite 1.ts | 8 +- Tests/input/drag sprite 2.js | 22 +++ Tests/input/drag sprite 2.ts | 38 +++++ Tests/input/touch priority.js | 28 ++++ Tests/input/touch priority.ts | 41 +++++ Tests/phaser.js | 148 +++++++++-------- build/phaser.d.ts | 8 +- build/phaser.js | 148 +++++++++-------- 22 files changed, 418 insertions(+), 208 deletions(-) create mode 100644 Tests/assets/pics/ra_einstein.png create mode 100644 Tests/assets/pics/shadow_of_the_beast2_karamoon.png create mode 100644 Tests/assets/pics/shadow_of_the_beast2_other_world.png create mode 100644 Tests/assets/sprites/atari1200xl.png create mode 100644 Tests/assets/sprites/atari400.png create mode 100644 Tests/assets/sprites/atari800.png create mode 100644 Tests/assets/sprites/darkwing_crazy.png create mode 100644 Tests/assets/sprites/diamond.png create mode 100644 Tests/assets/sprites/firstaid.png create mode 100644 Tests/assets/sprites/ra_dont_crack_under_pressure.png create mode 100644 Tests/input/drag sprite 2.js create mode 100644 Tests/input/drag sprite 2.ts create mode 100644 Tests/input/touch priority.js create mode 100644 Tests/input/touch priority.ts diff --git a/Phaser/components/sprite/Input.ts b/Phaser/components/sprite/Input.ts index af05c0b4..bfe6c39d 100644 --- a/Phaser/components/sprite/Input.ts +++ b/Phaser/components/sprite/Input.ts @@ -48,52 +48,10 @@ module Phaser.Components { */ public priorityID:number = 0; - public start(priority:number = 0, checkBody?:bool = false, useHandCursor?:bool = false) { - - // Turning on - if (this.enabled) - { - return; - } - else - { - // Register, etc - this.checkBody = checkBody; - this.useHandCursor = useHandCursor; - - this._pointerData = []; - - for (var i = 0; i < 10; i++) - { - this._pointerData.push({ id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: false }); - } - - this.snapOffset = new Point; - this.enabled = true; - - this.game.input.addGameObject(this._sprite); - } - - } - - public stop() { - - // Turning off - if (this.enabled == false) - { - return; - } - else - { - // De-register, etc - this.enabled = false; - this.game.input.removeGameObject(this._sprite); - } - - } - private _dragPoint: Point; + private _draggedPointerID: number; public dragOffset: Point; + public isDragged: bool = false; public dragFromCenter: bool; public dragPixelPerfect:bool = false; public dragPixelPerfectAlpha:number; @@ -238,26 +196,62 @@ module Phaser.Components { return this._pointerData[pointer].isDragged; } + public start(priority:number = 0, checkBody?:bool = false, useHandCursor?:bool = false): Sprite { + + // Turning on + if (this.enabled == false) + { + // Register, etc + this.checkBody = checkBody; + this.useHandCursor = useHandCursor; + this.priorityID = priority; + + this._pointerData = []; + + for (var i = 0; i < 10; i++) + { + this._pointerData.push({ id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, timeDown: 0, timeUp: 0, downDuration: 0, isDragged: false }); + } + + this.snapOffset = new Point; + this.enabled = true; + + this.game.input.addGameObject(this._sprite); + } + + return this._sprite; + + } + + public stop() { + + // Turning off + if (this.enabled == false) + { + return; + } + else + { + // De-register, etc + this.enabled = false; + this.game.input.removeGameObject(this._sprite); + } + + } + /** * Update */ - public update(pointer: Phaser.Pointer) { + public update(pointer: Phaser.Pointer): bool { if (this.enabled == false) { - return; + return false; } - // If was previously touched by this Pointer, check if still is - if (this._pointerData[pointer.id].isDown && pointer.isUp) - { - this._releasedHandler(pointer); - } - - if (this.draggable && this._pointerData[pointer.id].isDragged) + if (this.draggable && this._draggedPointerID == pointer.id) { this.updateDrag(pointer); - //return; } if (RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y)) @@ -280,6 +274,8 @@ module Phaser.Components { this._sprite.events.onInputOver.dispatch(this._sprite, pointer); } + + return true; } else { @@ -296,6 +292,8 @@ module Phaser.Components { this._sprite.events.onInputOut.dispatch(this._sprite, pointer); } + + return false; } } @@ -307,25 +305,42 @@ module Phaser.Components { this._pointerData[pointer.id].isDown = true; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; + this._sprite.events.onInputDown.dispatch(this._sprite, pointer); - // Star drag - if (this.draggable) + // Start drag + if (this.draggable && this.isDragged == false && pointer.draggedObject == null) { this.startDrag(pointer); } + } } public _releasedHandler(pointer: Pointer) { - this._pointerData[pointer.id].isDown = false; - this._pointerData[pointer.id].isUp = true; - this._pointerData[pointer.id].timeUp = this.game.time.now; - //this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; + // If was previously touched by this Pointer, check if still is + if (this._pointerData[pointer.id].isDown && pointer.isUp) + { + this._pointerData[pointer.id].isDown = false; + this._pointerData[pointer.id].isUp = true; + this._pointerData[pointer.id].timeUp = this.game.time.now; + this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; - this._sprite.events.onInputDown.dispatch(this._sprite, pointer); + this._sprite.events.onInputUp.dispatch(this._sprite, pointer); + + // Stop drag + if (this.draggable && this.isDragged && this._draggedPointerID == pointer.id) + { + this.stopDrag(pointer); + } + + if (this.useHandCursor) + { + this.game.stage.canvas.style.cursor = "default"; + } + } } @@ -478,9 +493,8 @@ module Phaser.Components { } this.draggable = false; - - //mouseStartDragCallback = null; - //mouseStopDragCallback = null; + this.isDragged = false; + this._draggedPointerID = -1; } /** @@ -488,6 +502,8 @@ module Phaser.Components { */ public startDrag(pointer: Pointer):void { + this.isDragged = true; + this._draggedPointerID = pointer.id; this._pointerData[pointer.id].isDragged = true; if (this.dragFromCenter) @@ -500,6 +516,8 @@ module Phaser.Components { this._dragPoint.setTo(this._sprite.x - pointer.x, this._sprite.y - pointer.y); } + pointer.draggedObject = this._sprite; + } /** @@ -507,6 +525,8 @@ module Phaser.Components { */ public stopDrag(pointer: Pointer):void { + this.isDragged = false; + this._draggedPointerID = -1; this._pointerData[pointer.id].isDragged = false; if (this.snapOnRelease) @@ -514,6 +534,8 @@ module Phaser.Components { this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX; this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY; } + + pointer.draggedObject = null; } /** diff --git a/Phaser/input/Pointer.ts b/Phaser/input/Pointer.ts index 62d94a76..e69998c9 100644 --- a/Phaser/input/Pointer.ts +++ b/Phaser/input/Pointer.ts @@ -252,8 +252,6 @@ module Phaser { } - // Sprite Drag Related - /** * The Game Object this Pointer is currently dragging. * @property draggedObject @@ -369,15 +367,15 @@ module Phaser { { if (this.game.input.inputObjects[i].input.enabled) { - this.game.input.inputObjects[i].input.update(this); - - if (this.game.input.inputObjects[i].input.priorityID > _highestPriority) + if (this.game.input.inputObjects[i].input.update(this) && this.game.input.inputObjects[i].input.priorityID > _highestPriority) { _highestPriority = this.game.input.inputObjects[i].input.priorityID; } } } + //console.log('highest priority was', _highestPriority); + if (this.isDown) { // Now update all objects with the highest priority ID (can be more than 1) @@ -493,6 +491,16 @@ module Phaser { this.game.input.currentPointers--; } + for (var i = 0; i < this.game.input.totalTrackedObjects; i++) + { + if (this.game.input.inputObjects[i].input.enabled) + { + this.game.input.inputObjects[i].input._releasedHandler(this); + } + } + + this.draggedObject = null; + return this; } diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 2f5b117c..67aec315 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -84,6 +84,10 @@ drag sprite 1.ts + + + drag sprite 2.ts + over sprite 1.ts @@ -91,6 +95,10 @@ over sprite 2.ts + + + touch priority.ts + graphic emitter.ts diff --git a/Tests/assets/pics/ra_einstein.png b/Tests/assets/pics/ra_einstein.png new file mode 100644 index 0000000000000000000000000000000000000000..becfefb9f619edd8ccf799fa9ddcccfa19ba6edc GIT binary patch literal 77079 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

E0^v)`<&e?afEQf?)Q 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 literal 0 HcmV?d00001 diff --git a/Tests/assets/pics/shadow_of_the_beast2_karamoon.png b/Tests/assets/pics/shadow_of_the_beast2_karamoon.png new file mode 100644 index 0000000000000000000000000000000000000000..56bcc8692626c870f2594e008081ac853054b7f9 GIT binary patch literal 2766 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 O0000)dz%~a+n<_d>9IiSI*0NO{J z^sMB>jMIKATzf`x0=`8WJqO1EXdez42Wr(NC!!0p#ZD_6_gS5odo9)AoCq3VTJJHa zm39jpKbuF()#fnzd~w+LW~%q=+t&p;O?&tiAdSZzbnq@%(%*7}g7a_a^J!Nrcq}D_q?XX-;S^^uSdC zl8BxxwBStvniHH0#pn%ilK@Uc(|RM^v>0I#*C$_$8qf8AD_jTM>;UHkhQsIq4g!1N y-2x;LqwpaCbta}^c(pC>F84h+2rvK*o!%N*C3{%_0000=RfXlB$6n0N|cL!Dtjf)%kaMuJ!9R;dg;LMx>T`5m0NC3VhDNPj6#6vzI~ z_MOiWNs^FFLJ0c@6-xUTwt86wf0)KJ8WTl_lAdUn1wEq)>2~PDW`wNjY|!0G%LPSg zd2+u)baX+YcUp{a`kXzy-4%_7lcjdvGXOn)E!0S$m*IC>UjJVFcC`#JJHga)#euU7 zIN!_e5yPQO-!a=+ztvGt*V}!gL+0?y8TF54KH~q9im2CkDLMd0xFu}~EHD)tMgP4$ zxE7dT2d1O7Da{OM!;;(&Q>R(=VyF6A2B7oV{@-^-2wUrI3S8jZABnmkyhB|X+^lCC zfW6x$4K|+vDT8zJ#L^OkH?i7;M&qmk8%0wRSM&TC3@y#T9I2dNq+a_HK=T7uN}$eX zxijh+2z#K(mZ0(T01k?SZgoOxLf8e(pO!!;hBn}49?;21 s;%JN`a!BnS%jveG{tY(%WAY=w00`FCQ)`E_egFUf07*qoM6N<$g0;2wLjV8( literal 0 HcmV?d00001 diff --git a/Tests/assets/sprites/ra_dont_crack_under_pressure.png b/Tests/assets/sprites/ra_dont_crack_under_pressure.png new file mode 100644 index 0000000000000000000000000000000000000000..3eacc510b58128819d80f9f3c17a09eb8a7d7d08 GIT binary patch literal 15662 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 O9f+K&Y`OHCp#KBh_6`34 literal 0 HcmV?d00001 diff --git a/Tests/input/drag sprite 1.js b/Tests/input/drag sprite 1.js index d326bd96..fceb4e57 100644 --- a/Tests/input/drag sprite 1.js +++ b/Tests/input/drag sprite 1.js @@ -9,12 +9,13 @@ var sprite; function create() { sprite = game.add.sprite(200, 200, 'sprite'); - // Enable Input detection + // Enable Input detection. Sprites have this disabled by default, + // so you have to start it if you want to interact with them. sprite.input.start(0, false, true); + // This allows you to drag the sprite. The parameter controls if you drag from the position you touched it (false) + // or if it will snap to the center (true) sprite.input.enableDrag(true); - sprite.input.allowVerticalDrag = false; - //sprite.input.dragOffset.setTo(0, 50); - } + } function render() { game.input.renderDebugInfo(32, 32); sprite.input.renderDebugInfo(300, 32); diff --git a/Tests/input/drag sprite 1.ts b/Tests/input/drag sprite 1.ts index be180808..f9e8ce32 100644 --- a/Tests/input/drag sprite 1.ts +++ b/Tests/input/drag sprite 1.ts @@ -18,14 +18,14 @@ sprite = game.add.sprite(200, 200, 'sprite'); - // Enable Input detection + // Enable Input detection. Sprites have this disabled by default, + // so you have to start it if you want to interact with them. sprite.input.start(0, false, true); + // This allows you to drag the sprite. The parameter controls if you drag from the position you touched it (false) + // or if it will snap to the center (true) sprite.input.enableDrag(true); - //sprite.input.allowVerticalDrag = false; - //sprite.input.dragOffset.setTo(0, 50); - } function render() { diff --git a/Tests/input/drag sprite 2.js b/Tests/input/drag sprite 2.js new file mode 100644 index 00000000..75d6b503 --- /dev/null +++ b/Tests/input/drag sprite 2.js @@ -0,0 +1,22 @@ +/// +(function () { + var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); + function init() { + // Using Phasers asset loader we load up a PNG from the assets folder + game.loader.addImageFile('sprite', 'assets/sprites/atari800.png'); + game.loader.load(); + } + var sprite; + function create() { + sprite = game.add.sprite(200, 200, 'sprite'); + sprite.input.start(0, false, true); + sprite.input.enableDrag(true); + // The drag offset allows us to position the sprite relative to the pointer (+ lock) position + // In this case it will be positioned -100px above the pointer + sprite.input.dragOffset.y = -100; + } + function render() { + game.input.renderDebugInfo(32, 32); + sprite.input.renderDebugInfo(300, 32); + } +})(); diff --git a/Tests/input/drag sprite 2.ts b/Tests/input/drag sprite 2.ts new file mode 100644 index 00000000..8729219e --- /dev/null +++ b/Tests/input/drag sprite 2.ts @@ -0,0 +1,38 @@ +/// + +(function () { + + var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); + + function init() { + + // Using Phasers asset loader we load up a PNG from the assets folder + game.loader.addImageFile('sprite', 'assets/sprites/atari800.png'); + game.loader.load(); + + } + + var sprite: Phaser.Sprite; + + function create() { + + sprite = game.add.sprite(200, 200, 'sprite'); + + sprite.input.start(0, false, true); + + sprite.input.enableDrag(true); + + // The drag offset allows us to position the sprite relative to the pointer (+ lock) position + // In this case it will be positioned -100px above the pointer + sprite.input.dragOffset.y = -100; + + } + + function render() { + + game.input.renderDebugInfo(32, 32); + sprite.input.renderDebugInfo(300, 32); + + } + +})(); diff --git a/Tests/input/touch priority.js b/Tests/input/touch priority.js new file mode 100644 index 00000000..dc45981c --- /dev/null +++ b/Tests/input/touch priority.js @@ -0,0 +1,28 @@ +/// +(function () { + var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); + function init() { + // Using Phasers asset loader we load up a PNG from the assets folder + game.loader.addImageFile('atari1', 'assets/sprites/atari130xe.png'); + game.loader.addImageFile('atari2', 'assets/sprites/atari800xl.png'); + game.loader.addImageFile('sonic', 'assets/sprites/sonic_havok_sanity.png'); + game.loader.load(); + } + var atari1; + var atari2; + var sonic; + function create() { + atari1 = game.add.sprite(100, 100, 'atari1'); + atari2 = game.add.sprite(300, 200, 'atari2'); + sonic = game.add.sprite(400, 300, 'sonic'); + atari1.input.start(0, false, true); + atari2.input.start(1, false, true); + sonic.input.start(2, false, true); + atari1.input.enableDrag(); + atari2.input.enableDrag(); + sonic.input.enableDrag(); + } + function render() { + game.input.renderDebugInfo(32, 32); + } +})(); diff --git a/Tests/input/touch priority.ts b/Tests/input/touch priority.ts new file mode 100644 index 00000000..6c6d75b3 --- /dev/null +++ b/Tests/input/touch priority.ts @@ -0,0 +1,41 @@ +/// + +(function () { + + var game = new Phaser.Game(this, 'game', 800, 600, init, create, null, render); + + function init() { + + // Using Phasers asset loader we load up a PNG from the assets folder + game.loader.addImageFile('atari1', 'assets/sprites/atari130xe.png'); + game.loader.addImageFile('atari2', 'assets/sprites/atari800xl.png'); + game.loader.addImageFile('sonic', 'assets/sprites/sonic_havok_sanity.png'); + game.loader.load(); + + } + + var atari1: Phaser.Sprite; + var atari2: Phaser.Sprite; + var sonic: Phaser.Sprite; + + function create() { + + atari1 = game.add.sprite(100, 100, 'atari1'); + atari2 = game.add.sprite(300, 200, 'atari2'); + sonic = game.add.sprite(400, 300, 'sonic'); + + atari1.input.start(0, false, true); + atari2.input.start(1, false, true); + sonic.input.start(2, false, true); + + atari1.input.enableDrag(); + atari2.input.enableDrag(); + sonic.input.enableDrag(); + + } + + function render() { + game.input.renderDebugInfo(32, 32); + } + +})(); diff --git a/Tests/phaser.js b/Tests/phaser.js index 50b38844..379d16ac 100644 --- a/Tests/phaser.js +++ b/Tests/phaser.js @@ -5583,6 +5583,7 @@ var Phaser; * The PriorityID controls which Sprite receives an Input event first if they should overlap. */ this.priorityID = 0; + this.isDragged = false; this.dragPixelPerfect = false; this.allowHorizontalDrag = true; this.allowVerticalDrag = true; @@ -5609,50 +5610,6 @@ var Phaser; this._sprite = parent; this.enabled = false; } - Input.prototype.start = function (priority, checkBody, useHandCursor) { - if (typeof priority === "undefined") { priority = 0; } - if (typeof checkBody === "undefined") { checkBody = false; } - if (typeof useHandCursor === "undefined") { useHandCursor = false; } - // Turning on - if(this.enabled) { - return; - } else { - // Register, etc - this.checkBody = checkBody; - this.useHandCursor = useHandCursor; - this._pointerData = []; - for(var i = 0; i < 10; i++) { - this._pointerData.push({ - id: i, - x: 0, - y: 0, - isDown: false, - isUp: false, - isOver: false, - isOut: false, - timeOver: 0, - timeOut: 0, - timeDown: 0, - timeUp: 0, - downDuration: 0, - isDragged: false - }); - } - this.snapOffset = new Phaser.Point(); - this.enabled = true; - this.game.input.addGameObject(this._sprite); - } - }; - Input.prototype.stop = function () { - // Turning off - if(this.enabled == false) { - return; - } else { - // De-register, etc - this.enabled = false; - this.game.input.removeGameObject(this._sprite); - } - }; Input.prototype.pointerX = /** * The x coordinate of the Input pointer, relative to the top-left of the parent Sprite. * This value is only set when the pointer is over this Sprite. @@ -5751,21 +5708,60 @@ var Phaser; if (typeof pointer === "undefined") { pointer = 0; } return this._pointerData[pointer].isDragged; }; + Input.prototype.start = function (priority, checkBody, useHandCursor) { + if (typeof priority === "undefined") { priority = 0; } + if (typeof checkBody === "undefined") { checkBody = false; } + if (typeof useHandCursor === "undefined") { useHandCursor = false; } + // Turning on + if(this.enabled == false) { + // Register, etc + this.checkBody = checkBody; + this.useHandCursor = useHandCursor; + this.priorityID = priority; + this._pointerData = []; + for(var i = 0; i < 10; i++) { + this._pointerData.push({ + id: i, + x: 0, + y: 0, + isDown: false, + isUp: false, + isOver: false, + isOut: false, + timeOver: 0, + timeOut: 0, + timeDown: 0, + timeUp: 0, + downDuration: 0, + isDragged: false + }); + } + this.snapOffset = new Phaser.Point(); + this.enabled = true; + this.game.input.addGameObject(this._sprite); + } + return this._sprite; + }; + Input.prototype.stop = function () { + // Turning off + if(this.enabled == false) { + return; + } else { + // De-register, etc + this.enabled = false; + this.game.input.removeGameObject(this._sprite); + } + }; Input.prototype.update = /** * Update */ function (pointer) { if(this.enabled == false) { - return; + return false; } - // If was previously touched by this Pointer, check if still is - if(this._pointerData[pointer.id].isDown && pointer.isUp) { - this._releasedHandler(pointer); - } - if(this.draggable && this._pointerData[pointer.id].isDragged) { + if(this.draggable && this._draggedPointerID == pointer.id) { this.updateDrag(pointer); - //return; - } + } if(Phaser.RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y)) { // { id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, isDragged: false } this._pointerData[pointer.id].x = pointer.x - this._sprite.x; @@ -5779,6 +5775,7 @@ var Phaser; } this._sprite.events.onInputOver.dispatch(this._sprite, pointer); } + return true; } else { if(this._pointerData[pointer.id].isOver) { this._pointerData[pointer.id].isOver = false; @@ -5789,6 +5786,7 @@ var Phaser; } this._sprite.events.onInputOut.dispatch(this._sprite, pointer); } + return false; } }; Input.prototype._touchedHandler = function (pointer) { @@ -5797,18 +5795,28 @@ var Phaser; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; this._sprite.events.onInputDown.dispatch(this._sprite, pointer); - // Star drag - if(this.draggable) { + // Start drag + if(this.draggable && this.isDragged == false && pointer.draggedObject == null) { this.startDrag(pointer); } } }; Input.prototype._releasedHandler = function (pointer) { - this._pointerData[pointer.id].isDown = false; - this._pointerData[pointer.id].isUp = true; - this._pointerData[pointer.id].timeUp = this.game.time.now; - //this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; - this._sprite.events.onInputDown.dispatch(this._sprite, pointer); + // If was previously touched by this Pointer, check if still is + if(this._pointerData[pointer.id].isDown && pointer.isUp) { + this._pointerData[pointer.id].isDown = false; + this._pointerData[pointer.id].isUp = true; + this._pointerData[pointer.id].timeUp = this.game.time.now; + this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; + this._sprite.events.onInputUp.dispatch(this._sprite, pointer); + // Stop drag + if(this.draggable && this.isDragged && this._draggedPointerID == pointer.id) { + this.stopDrag(pointer); + } + if(this.useHandCursor) { + this.game.stage.canvas.style.cursor = "default"; + } + } }; Input.prototype.updateDrag = /** * Updates the Pointer drag on this Sprite. @@ -5935,13 +5943,15 @@ var Phaser; } } this.draggable = false; - //mouseStartDragCallback = null; - //mouseStopDragCallback = null; - }; + this.isDragged = false; + this._draggedPointerID = -1; + }; Input.prototype.startDrag = /** * Called by Pointer when drag starts on this Sprite. Should not usually be called directly. */ function (pointer) { + this.isDragged = true; + this._draggedPointerID = pointer.id; this._pointerData[pointer.id].isDragged = true; if(this.dragFromCenter) { // Move the sprite to the middle of the pointer @@ -5949,16 +5959,20 @@ var Phaser; } else { this._dragPoint.setTo(this._sprite.x - pointer.x, this._sprite.y - pointer.y); } + pointer.draggedObject = this._sprite; }; Input.prototype.stopDrag = /** * Called by Pointer when drag is stopped on this Sprite. Should not usually be called directly. */ function (pointer) { + this.isDragged = false; + this._draggedPointerID = -1; this._pointerData[pointer.id].isDragged = false; if(this.snapOnRelease) { this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX; this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY; } + pointer.draggedObject = null; }; Input.prototype.setDragLock = /** * Restricts this sprite to drag movement only on the given axis. Note: If both are set to false the sprite will never move! @@ -13525,12 +13539,12 @@ var Phaser; var _highestPriority = 0; for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { if(this.game.input.inputObjects[i].input.enabled) { - this.game.input.inputObjects[i].input.update(this); - if(this.game.input.inputObjects[i].input.priorityID > _highestPriority) { + if(this.game.input.inputObjects[i].input.update(this) && this.game.input.inputObjects[i].input.priorityID > _highestPriority) { _highestPriority = this.game.input.inputObjects[i].input.priorityID; } } } + //console.log('highest priority was', _highestPriority); if(this.isDown) { // Now update all objects with the highest priority ID (can be more than 1) for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { @@ -13611,6 +13625,12 @@ var Phaser; if(this.isMouse == false) { this.game.input.currentPointers--; } + for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { + if(this.game.input.inputObjects[i].input.enabled) { + this.game.input.inputObjects[i].input._releasedHandler(this); + } + } + this.draggedObject = null; return this; }; Pointer.prototype.justPressed = /** diff --git a/build/phaser.d.ts b/build/phaser.d.ts index 83980c53..6771c6bb 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -3271,10 +3271,10 @@ module Phaser.Components { * The PriorityID controls which Sprite receives an Input event first if they should overlap. */ public priorityID: number; - public start(priority?: number, checkBody?: bool, useHandCursor?: bool): void; - public stop(): void; private _dragPoint; + private _draggedPointerID; public dragOffset: Point; + public isDragged: bool; public dragFromCenter: bool; public dragPixelPerfect: bool; public dragPixelPerfectAlpha: number; @@ -3377,10 +3377,12 @@ module Phaser.Components { * @default false */ public pointerDragged(pointer?: number): bool; + public start(priority?: number, checkBody?: bool, useHandCursor?: bool): Sprite; + public stop(): void; /** * Update */ - public update(pointer: Pointer): void; + public update(pointer: Pointer): bool; public _touchedHandler(pointer: Pointer): void; public _releasedHandler(pointer: Pointer): void; /** diff --git a/build/phaser.js b/build/phaser.js index 50b38844..379d16ac 100644 --- a/build/phaser.js +++ b/build/phaser.js @@ -5583,6 +5583,7 @@ var Phaser; * The PriorityID controls which Sprite receives an Input event first if they should overlap. */ this.priorityID = 0; + this.isDragged = false; this.dragPixelPerfect = false; this.allowHorizontalDrag = true; this.allowVerticalDrag = true; @@ -5609,50 +5610,6 @@ var Phaser; this._sprite = parent; this.enabled = false; } - Input.prototype.start = function (priority, checkBody, useHandCursor) { - if (typeof priority === "undefined") { priority = 0; } - if (typeof checkBody === "undefined") { checkBody = false; } - if (typeof useHandCursor === "undefined") { useHandCursor = false; } - // Turning on - if(this.enabled) { - return; - } else { - // Register, etc - this.checkBody = checkBody; - this.useHandCursor = useHandCursor; - this._pointerData = []; - for(var i = 0; i < 10; i++) { - this._pointerData.push({ - id: i, - x: 0, - y: 0, - isDown: false, - isUp: false, - isOver: false, - isOut: false, - timeOver: 0, - timeOut: 0, - timeDown: 0, - timeUp: 0, - downDuration: 0, - isDragged: false - }); - } - this.snapOffset = new Phaser.Point(); - this.enabled = true; - this.game.input.addGameObject(this._sprite); - } - }; - Input.prototype.stop = function () { - // Turning off - if(this.enabled == false) { - return; - } else { - // De-register, etc - this.enabled = false; - this.game.input.removeGameObject(this._sprite); - } - }; Input.prototype.pointerX = /** * The x coordinate of the Input pointer, relative to the top-left of the parent Sprite. * This value is only set when the pointer is over this Sprite. @@ -5751,21 +5708,60 @@ var Phaser; if (typeof pointer === "undefined") { pointer = 0; } return this._pointerData[pointer].isDragged; }; + Input.prototype.start = function (priority, checkBody, useHandCursor) { + if (typeof priority === "undefined") { priority = 0; } + if (typeof checkBody === "undefined") { checkBody = false; } + if (typeof useHandCursor === "undefined") { useHandCursor = false; } + // Turning on + if(this.enabled == false) { + // Register, etc + this.checkBody = checkBody; + this.useHandCursor = useHandCursor; + this.priorityID = priority; + this._pointerData = []; + for(var i = 0; i < 10; i++) { + this._pointerData.push({ + id: i, + x: 0, + y: 0, + isDown: false, + isUp: false, + isOver: false, + isOut: false, + timeOver: 0, + timeOut: 0, + timeDown: 0, + timeUp: 0, + downDuration: 0, + isDragged: false + }); + } + this.snapOffset = new Phaser.Point(); + this.enabled = true; + this.game.input.addGameObject(this._sprite); + } + return this._sprite; + }; + Input.prototype.stop = function () { + // Turning off + if(this.enabled == false) { + return; + } else { + // De-register, etc + this.enabled = false; + this.game.input.removeGameObject(this._sprite); + } + }; Input.prototype.update = /** * Update */ function (pointer) { if(this.enabled == false) { - return; + return false; } - // If was previously touched by this Pointer, check if still is - if(this._pointerData[pointer.id].isDown && pointer.isUp) { - this._releasedHandler(pointer); - } - if(this.draggable && this._pointerData[pointer.id].isDragged) { + if(this.draggable && this._draggedPointerID == pointer.id) { this.updateDrag(pointer); - //return; - } + } if(Phaser.RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y)) { // { id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, isDragged: false } this._pointerData[pointer.id].x = pointer.x - this._sprite.x; @@ -5779,6 +5775,7 @@ var Phaser; } this._sprite.events.onInputOver.dispatch(this._sprite, pointer); } + return true; } else { if(this._pointerData[pointer.id].isOver) { this._pointerData[pointer.id].isOver = false; @@ -5789,6 +5786,7 @@ var Phaser; } this._sprite.events.onInputOut.dispatch(this._sprite, pointer); } + return false; } }; Input.prototype._touchedHandler = function (pointer) { @@ -5797,18 +5795,28 @@ var Phaser; this._pointerData[pointer.id].isUp = false; this._pointerData[pointer.id].timeDown = this.game.time.now; this._sprite.events.onInputDown.dispatch(this._sprite, pointer); - // Star drag - if(this.draggable) { + // Start drag + if(this.draggable && this.isDragged == false && pointer.draggedObject == null) { this.startDrag(pointer); } } }; Input.prototype._releasedHandler = function (pointer) { - this._pointerData[pointer.id].isDown = false; - this._pointerData[pointer.id].isUp = true; - this._pointerData[pointer.id].timeUp = this.game.time.now; - //this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; - this._sprite.events.onInputDown.dispatch(this._sprite, pointer); + // If was previously touched by this Pointer, check if still is + if(this._pointerData[pointer.id].isDown && pointer.isUp) { + this._pointerData[pointer.id].isDown = false; + this._pointerData[pointer.id].isUp = true; + this._pointerData[pointer.id].timeUp = this.game.time.now; + this._pointerData[pointer.id].downDuration = this._pointerData[pointer.id].timeUp - this._pointerData[pointer.id].timeDown; + this._sprite.events.onInputUp.dispatch(this._sprite, pointer); + // Stop drag + if(this.draggable && this.isDragged && this._draggedPointerID == pointer.id) { + this.stopDrag(pointer); + } + if(this.useHandCursor) { + this.game.stage.canvas.style.cursor = "default"; + } + } }; Input.prototype.updateDrag = /** * Updates the Pointer drag on this Sprite. @@ -5935,13 +5943,15 @@ var Phaser; } } this.draggable = false; - //mouseStartDragCallback = null; - //mouseStopDragCallback = null; - }; + this.isDragged = false; + this._draggedPointerID = -1; + }; Input.prototype.startDrag = /** * Called by Pointer when drag starts on this Sprite. Should not usually be called directly. */ function (pointer) { + this.isDragged = true; + this._draggedPointerID = pointer.id; this._pointerData[pointer.id].isDragged = true; if(this.dragFromCenter) { // Move the sprite to the middle of the pointer @@ -5949,16 +5959,20 @@ var Phaser; } else { this._dragPoint.setTo(this._sprite.x - pointer.x, this._sprite.y - pointer.y); } + pointer.draggedObject = this._sprite; }; Input.prototype.stopDrag = /** * Called by Pointer when drag is stopped on this Sprite. Should not usually be called directly. */ function (pointer) { + this.isDragged = false; + this._draggedPointerID = -1; this._pointerData[pointer.id].isDragged = false; if(this.snapOnRelease) { this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX; this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY; } + pointer.draggedObject = null; }; Input.prototype.setDragLock = /** * Restricts this sprite to drag movement only on the given axis. Note: If both are set to false the sprite will never move! @@ -13525,12 +13539,12 @@ var Phaser; var _highestPriority = 0; for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { if(this.game.input.inputObjects[i].input.enabled) { - this.game.input.inputObjects[i].input.update(this); - if(this.game.input.inputObjects[i].input.priorityID > _highestPriority) { + if(this.game.input.inputObjects[i].input.update(this) && this.game.input.inputObjects[i].input.priorityID > _highestPriority) { _highestPriority = this.game.input.inputObjects[i].input.priorityID; } } } + //console.log('highest priority was', _highestPriority); if(this.isDown) { // Now update all objects with the highest priority ID (can be more than 1) for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { @@ -13611,6 +13625,12 @@ var Phaser; if(this.isMouse == false) { this.game.input.currentPointers--; } + for(var i = 0; i < this.game.input.totalTrackedObjects; i++) { + if(this.game.input.inputObjects[i].input.enabled) { + this.game.input.inputObjects[i].input._releasedHandler(this); + } + } + this.draggedObject = null; return this; }; Pointer.prototype.justPressed = /**