From 1d365b4d1f4b22e79311a93b45a32c882dc72060 Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Sat, 6 Oct 2018 10:26:50 -0500 Subject: [PATCH 1/5] [#1044] Fix iOS pointer events, include down + defense --- src/engine/Input/Pointer.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/engine/Input/Pointer.ts b/src/engine/Input/Pointer.ts index ee660798d0..3a39c748a8 100644 --- a/src/engine/Input/Pointer.ts +++ b/src/engine/Input/Pointer.ts @@ -837,7 +837,12 @@ export class Pointer extends Class { * @param actor An Actor for check; */ public isActorUnderPointer(actor: Actor): boolean { - return actor.contains(this.lastWorldPos.x, this.lastWorldPos.y, !Actors.isUIActor(actor)); + console.log(actor); + console.log(this); + if (this.lastWorldPos) { + return actor.contains(this.lastWorldPos.x, this.lastWorldPos.y, !Actors.isUIActor(actor)); + } + return false; } /** @@ -849,12 +854,17 @@ export class Pointer extends Class { } private _onPointerMove(ev: PointerEvent): void { + console.log('Pointer move', ev); this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y); this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y); this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y); } - private _onPointerDown(): void { + private _onPointerDown(ev: PointerEvent): void { + console.log('Pointer down', ev); + this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y); + this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y); + this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y); this._isDown = true; } From d7f3fbeb9d9c074a473c5f7fdc81fea3e5ccf65b Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Sat, 6 Oct 2018 10:34:06 -0500 Subject: [PATCH 2/5] Remove console logs --- src/engine/Input/Pointer.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/engine/Input/Pointer.ts b/src/engine/Input/Pointer.ts index 3a39c748a8..bd809ddade 100644 --- a/src/engine/Input/Pointer.ts +++ b/src/engine/Input/Pointer.ts @@ -837,8 +837,6 @@ export class Pointer extends Class { * @param actor An Actor for check; */ public isActorUnderPointer(actor: Actor): boolean { - console.log(actor); - console.log(this); if (this.lastWorldPos) { return actor.contains(this.lastWorldPos.x, this.lastWorldPos.y, !Actors.isUIActor(actor)); } @@ -854,14 +852,12 @@ export class Pointer extends Class { } private _onPointerMove(ev: PointerEvent): void { - console.log('Pointer move', ev); this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y); this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y); this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y); } private _onPointerDown(ev: PointerEvent): void { - console.log('Pointer down', ev); this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y); this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y); this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y); From 09474ba81a6858787d8a2f7bb762dbf11a29037a Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Sat, 6 Oct 2018 11:38:49 -0500 Subject: [PATCH 3/5] Update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 67c5b2bb84..a9c167baa3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,11 +15,11 @@ This project adheres to [Semantic Versioning](http://semver.org/). ### Fixed +- Fixed issue where pointer events do not work in mobile ([#1044](https://github.com/excaliburjs/Excalibur/issues/1044)) - Fixed issue where sprites do not work in Firefox ([#980](https://github.com/excaliburjs/Excalibur/issues/978)) - Fixed issue where collision pairs could sometimes be incorrect ([#975](https://github.com/excaliburjs/Excalibur/issues/975)) - Fixed box collision velocity resolution so that objects resting on a surface do not accumulate velocity ([#986](https://github.com/excaliburjs/Excalibur/pull/1034)) - ## [0.18.0] - 2018-08-04 From 785e36b52035cc31395255d20c2af6f1b4e25851 Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Sun, 7 Oct 2018 08:32:51 -0500 Subject: [PATCH 4/5] Add tests --- src/spec/PointerInputSpec.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/spec/PointerInputSpec.ts b/src/spec/PointerInputSpec.ts index 8c671b2ae5..e2f846cfcf 100644 --- a/src/spec/PointerInputSpec.ts +++ b/src/spec/PointerInputSpec.ts @@ -98,7 +98,11 @@ describe('A pointer', () => { expect(eventMoveFired).toBeTruthy(); }); - it('should update last position', () => { + it('should update last position on down and move', () => { + executeMouseEvent('pointerdown', document, null, 10, 800); + expect(engine.input.pointers.primary.lastPagePos.x).toBe(10); + expect(engine.input.pointers.primary.lastPagePos.y).toBe(800); + executeMouseEvent('pointermove', document, null, 100, 200); expect(engine.input.pointers.primary.lastPagePos.x).toBe(100); @@ -109,4 +113,9 @@ describe('A pointer', () => { expect(engine.input.pointers.primary.lastPagePos.x).toBe(300); expect(engine.input.pointers.primary.lastPagePos.y).toBe(400); }); + + it('should not throw when checking if actors are under pointer if no pointer events have happened yet', () => { + let actor = new ex.Actor({ x: 50, y: 50, width: 100, height: 100 }); + expect(() => engine.input.pointers.primary.isActorUnderPointer(actor)).not.toThrowError(); + }); }); From f6a04f1753e4d3f9c6783c8b663d09f90b5bb6e1 Mon Sep 17 00:00:00 2001 From: Erik Onarheim Date: Sun, 7 Oct 2018 08:40:27 -0500 Subject: [PATCH 5/5] Moar tests --- src/spec/PointerInputSpec.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/spec/PointerInputSpec.ts b/src/spec/PointerInputSpec.ts index e2f846cfcf..382d4f00a0 100644 --- a/src/spec/PointerInputSpec.ts +++ b/src/spec/PointerInputSpec.ts @@ -117,5 +117,13 @@ describe('A pointer', () => { it('should not throw when checking if actors are under pointer if no pointer events have happened yet', () => { let actor = new ex.Actor({ x: 50, y: 50, width: 100, height: 100 }); expect(() => engine.input.pointers.primary.isActorUnderPointer(actor)).not.toThrowError(); + expect(engine.input.pointers.primary.isActorUnderPointer(actor)).toBe(false); + }); + + it('should return true when an actor is under the pointer', () => { + let actor = new ex.Actor({ x: 50, y: 50, width: 100, height: 100 }); + executeMouseEvent('pointerdown', document, null, 50, 50); + + expect(engine.input.pointers.primary.isActorUnderPointer(actor)).toBe(true); }); });