Skip to content

Commit 82d4ba4

Browse files
committed
Re-done the pointer handler so it respects the top-most rendered sprite in priority to anything below it, for both mouse over and click events.
1 parent 1c37cd1 commit 82d4ba4

18 files changed

Lines changed: 682 additions & 134 deletions

File tree

Phaser/components/animation/AnimationManager.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ module Phaser.Components {
251251

252252
this._parent.frameBounds.width = this.currentFrame.width;
253253
this._parent.frameBounds.height = this.currentFrame.height;
254+
//this._parent.frameBounds.width = this.currentFrame.sourceSizeW;
255+
//this._parent.frameBounds.height = this.currentFrame.sourceSizeH;
254256
this._frameIndex = this.currentFrame.index;
255257
}
256258

Phaser/components/animation/Frame.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ module Phaser {
2222
*/
2323
constructor(x: number, y: number, width: number, height: number, name: string) {
2424

25+
console.log('Creating Frame', name, 'x', x, 'y', y, 'width', width, 'height', height);
26+
2527
this.x = x;
2628
this.y = y;
2729
this.width = width;
@@ -134,10 +136,10 @@ module Phaser {
134136
* @param trimmed {boolean} Whether this frame trimmed or not.
135137
* @param actualWidth {number} Actual width of this frame.
136138
* @param actualHeight {number} Actual height of this frame.
137-
* @param destX {number} Destiny x position.
138-
* @param destY {number} Destiny y position.
139-
* @param destWidth {number} Destiny draw width.
140-
* @param destHeight {number} Destiny draw height.
139+
* @param destX {number} Destination x position.
140+
* @param destY {number} Destination y position.
141+
* @param destWidth {number} Destination draw width.
142+
* @param destHeight {number} Destination draw height.
141143
*/
142144
public setTrim(trimmed: bool, actualWidth: number, actualHeight: number, destX: number, destY: number, destWidth: number, destHeight: number) {
143145

Phaser/components/animation/FrameData.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ module Phaser {
2424
* Local frame container.
2525
*/
2626
private _frames: Frame[];
27+
2728
/**
2829
* Local frameName<->index container.
2930
*/
@@ -76,7 +77,7 @@ module Phaser {
7677
*/
7778
public getFrameByName(name: string): Frame {
7879

79-
if (this._frameNames[name] >= 0)
80+
if (this._frameNames[name] !== '')
8081
{
8182
return this._frames[this._frameNames[name]];
8283
}
@@ -92,7 +93,7 @@ module Phaser {
9293
*/
9394
public checkFrameName(name: string): bool {
9495

95-
if (this._frameNames[name] >= 0)
96+
if (this._frameNames[name])
9697
{
9798
return true;
9899
}
@@ -138,7 +139,7 @@ module Phaser {
138139
}
139140

140141
/**
141-
* Get all names of frames by giving their indexes.
142+
* Get the frame indexes by giving the frame names.
142143
* @param [output] {number[]} result will be added into this array.
143144
* @return {number[]} Names of specific frames in an array.
144145
*/

Phaser/components/sprite/Input.ts

Lines changed: 82 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,17 @@ module Phaser.Components {
223223

224224
}
225225

226+
public reset() {
227+
228+
this.enabled = false;
229+
230+
for (var i = 0; i < 10; i++)
231+
{
232+
this._pointerData[i] = { 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 };
233+
}
234+
235+
}
236+
226237
public stop() {
227238

228239
// Turning off
@@ -239,83 +250,112 @@ module Phaser.Components {
239250

240251
}
241252

253+
public checkPointerOver(pointer: Phaser.Pointer): bool {
254+
255+
if (this.enabled == false || this._sprite.visible == false)
256+
{
257+
return false;
258+
}
259+
else
260+
{
261+
return RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y);
262+
}
263+
264+
}
265+
242266
/**
243267
* Update
244268
*/
245269
public update(pointer: Phaser.Pointer): bool {
246270

247-
if (this.enabled == false)
271+
if (this.enabled == false || this._sprite.visible == false)
248272
{
249273
return false;
250274
}
251275

252-
if (this.draggable && this._draggedPointerID == pointer.id)
253-
{
254-
this.updateDrag(pointer);
255-
}
256-
257-
if (RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y))
276+
if (this.draggable && this._draggedPointerID == pointer.id)
277+
{
278+
return this.updateDrag(pointer);
279+
}
280+
else if (this._pointerData[pointer.id].isOver == true)
258281
{
259-
// { id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, isDragged: false }
282+
if (RectangleUtils.contains(this._sprite.frameBounds, pointer.x, pointer.y))
283+
{
284+
this._pointerData[pointer.id].x = pointer.x - this._sprite.x;
285+
this._pointerData[pointer.id].y = pointer.y - this._sprite.y;
286+
return true;
287+
}
288+
else
289+
{
290+
this._pointOutHandler(pointer);
291+
return false;
292+
}
293+
}
294+
295+
}
296+
297+
public _pointerOverHandler(pointer: Pointer) {
260298

299+
// { id: i, x: 0, y: 0, isDown: false, isUp: false, isOver: false, isOut: false, timeOver: 0, timeOut: 0, isDragged: false }
300+
301+
if (this._pointerData[pointer.id].isOver == false)
302+
{
303+
this._pointerData[pointer.id].isOver = true;
304+
this._pointerData[pointer.id].isOut = false;
305+
this._pointerData[pointer.id].timeOver = this.game.time.now;
261306
this._pointerData[pointer.id].x = pointer.x - this._sprite.x;
262307
this._pointerData[pointer.id].y = pointer.y - this._sprite.y;
263308

264-
if (this._pointerData[pointer.id].isOver == false)
309+
if (this.useHandCursor && this._pointerData[pointer.id].isDragged == false)
265310
{
266-
this._pointerData[pointer.id].isOver = true;
267-
this._pointerData[pointer.id].isOut = false;
268-
this._pointerData[pointer.id].timeOver = this.game.time.now;
269-
270-
if (this.useHandCursor && this._pointerData[pointer.id].isDragged == false)
271-
{
272-
this.game.stage.canvas.style.cursor = "pointer";
273-
}
274-
275-
this._sprite.events.onInputOver.dispatch(this._sprite, pointer);
311+
this.game.stage.canvas.style.cursor = "pointer";
276312
}
277313

278-
return true;
314+
this._sprite.events.onInputOver.dispatch(this._sprite, pointer);
279315
}
280-
else
281-
{
282-
if (this._pointerData[pointer.id].isOver)
283-
{
284-
this._pointerData[pointer.id].isOver = false;
285-
this._pointerData[pointer.id].isOut = true;
286-
this._pointerData[pointer.id].timeOut = this.game.time.now;
287316

288-
if (this.useHandCursor && this._pointerData[pointer.id].isDragged == false)
289-
{
290-
this.game.stage.canvas.style.cursor = "default";
291-
}
317+
}
292318

293-
this._sprite.events.onInputOut.dispatch(this._sprite, pointer);
294-
}
319+
public _pointOutHandler(pointer: Pointer) {
295320

296-
return false;
321+
this._pointerData[pointer.id].isOver = false;
322+
this._pointerData[pointer.id].isOut = true;
323+
this._pointerData[pointer.id].timeOut = this.game.time.now;
324+
325+
if (this.useHandCursor && this._pointerData[pointer.id].isDragged == false)
326+
{
327+
this.game.stage.canvas.style.cursor = "default";
297328
}
298329

330+
this._sprite.events.onInputOut.dispatch(this._sprite, pointer);
331+
299332
}
300333

301-
public _touchedHandler(pointer: Pointer) {
334+
public consumePointerEvent: bool = false;
335+
336+
public _touchedHandler(pointer: Pointer): bool {
302337

303338
if (this._pointerData[pointer.id].isDown == false && this._pointerData[pointer.id].isOver == true)
304339
{
340+
console.log('touchDown on', this._sprite.texture.cacheKey,this._sprite.frameName, this._sprite.frameBounds.width,this._sprite.frameBounds.height);
305341
this._pointerData[pointer.id].isDown = true;
306342
this._pointerData[pointer.id].isUp = false;
307343
this._pointerData[pointer.id].timeDown = this.game.time.now;
308344

309345
this._sprite.events.onInputDown.dispatch(this._sprite, pointer);
310346

311347
// Start drag
312-
if (this.draggable && this.isDragged == false && pointer.draggedObject == null)
348+
//if (this.draggable && this.isDragged == false && pointer.targetObject == null)
349+
if (this.draggable && this.isDragged == false)
313350
{
314351
this.startDrag(pointer);
315352
}
316353

317354
}
318355

356+
// Consume the event?
357+
return this.consumePointerEvent;
358+
319359
}
320360

321361
public _releasedHandler(pointer: Pointer) {
@@ -347,12 +387,12 @@ module Phaser.Components {
347387
/**
348388
* Updates the Pointer drag on this Sprite.
349389
*/
350-
private updateDrag(pointer: Pointer):void
390+
private updateDrag(pointer: Pointer):bool
351391
{
352392
if (pointer.isUp)
353393
{
354394
this.stopDrag(pointer);
355-
return;
395+
return false;
356396
}
357397

358398
if (this.allowHorizontalDrag)
@@ -380,6 +420,8 @@ module Phaser.Components {
380420
this._sprite.x = Math.floor(this._sprite.x / this.snapX) * this.snapX;
381421
this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY;
382422
}
423+
424+
return true;
383425
}
384426

385427
/**
@@ -516,7 +558,7 @@ module Phaser.Components {
516558
this._dragPoint.setTo(this._sprite.x - pointer.x, this._sprite.y - pointer.y);
517559
}
518560

519-
pointer.draggedObject = this._sprite;
561+
//pointer.draggedObject = this._sprite;
520562

521563
}
522564

@@ -535,7 +577,7 @@ module Phaser.Components {
535577
this._sprite.y = Math.floor(this._sprite.y / this.snapY) * this.snapY;
536578
}
537579

538-
pointer.draggedObject = null;
580+
//pointer.draggedObject = null;
539581
}
540582

541583
/**

Phaser/core/Group.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,55 @@ module Phaser {
253253

254254
}
255255

256+
/**
257+
* Calls render on all members of this Group regardless of their visible status and also ignores the camera blacklist.
258+
* Use this when the Group objects render to hidden canvases for example.
259+
*/
260+
public directRender(camera: Camera) {
261+
262+
if (this.globalCompositeOperation)
263+
{
264+
this.game.stage.context.save();
265+
this.game.stage.context.globalCompositeOperation = this.globalCompositeOperation;
266+
}
267+
268+
if (this.alpha > 0)
269+
{
270+
this._prevAlpha = this.game.stage.context.globalAlpha;
271+
this.game.stage.context.globalAlpha = this.alpha;
272+
}
273+
274+
this._i = 0;
275+
276+
while (this._i < this.length)
277+
{
278+
this._member = this.members[this._i++];
279+
280+
if (this._member != null && this._member.exists)
281+
{
282+
if (this._member.type == Types.GROUP)
283+
{
284+
this._member.directRender(camera);
285+
}
286+
else
287+
{
288+
this.game.renderer.renderGameObject(this._member);
289+
}
290+
}
291+
}
292+
293+
if (this.alpha > 0)
294+
{
295+
this.game.stage.context.globalAlpha = this._prevAlpha;
296+
}
297+
298+
if (this.globalCompositeOperation)
299+
{
300+
this.game.stage.context.restore();
301+
}
302+
303+
}
304+
256305
/**
257306
* The maximum capacity of this group. Default is 0, meaning no max capacity, and the group can just grow.
258307
*/

Phaser/gameobjects/Sprite.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,11 @@ module Phaser {
182182
*/
183183
public z: number = 0;
184184

185+
/**
186+
* Render iteration
187+
*/
188+
public renderOrderID: number = 0;
189+
185190
/**
186191
* This value is added to the angle of the Sprite.
187192
* For example if you had a sprite graphic drawn facing straight up then you could set
@@ -326,6 +331,9 @@ module Phaser {
326331
*/
327332
public destroy() {
328333

334+
//this.input.destroy();
335+
336+
329337
}
330338

331339
/**

0 commit comments

Comments
 (0)