• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

excaliburjs / Excalibur / 29056445523

09 Jul 2026 11:06PM UTC coverage: 88.902% (-0.004%) from 88.906%
29056445523

Pull #3793

github

web-flow
Merge 139f9ef84 into 3ee8a530a
Pull Request #3793: chore: TS6 Upgrades + Typedoc update

6936 of 9094 branches covered (76.27%)

274 of 373 new or added lines in 55 files covered. (73.46%)

3 existing lines in 2 files now uncovered.

15516 of 17453 relevant lines covered (88.9%)

24902.82 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.48
/src/engine/input/pointer-abstraction.ts
1
import { Vector } from '../math/vector';
2
import type { PointerEvent } from './pointer-event';
3
import type { EventKey, Handler, Subscription } from '../event-emitter';
4
import { EventEmitter } from '../event-emitter';
5
import type { PointerEvents } from './pointer-event-receiver';
6
import { GlobalCoordinates } from '../math/global-coordinates';
7
import type { Engine } from '../engine';
8

9
export class PointerAbstraction {
10
  public events = new EventEmitter<PointerEvents>();
1,487✔
11
  /**
12
   * The last position on the document this pointer was at. Can be `null` if pointer was never active.
13
   */
14
  public lastPagePos: Vector = Vector.Zero;
1,487✔
15

16
  /**
17
   * The last position on the screen this pointer was at. Can be `null` if pointer was never active.
18
   */
19
  public lastScreenPos: Vector = Vector.Zero;
1,487✔
20

21
  /**
22
   * The last position in the game world coordinates this pointer was at. Can be `null` if pointer was never active.
23
   */
24
  public lastWorldPos: Vector = Vector.Zero;
1,487✔
25

26
  constructor() {
27
    this.on('move', this._onPointerMove);
1,487✔
28
    this.on('down', this._onPointerDown);
1,487✔
29
  }
30

31
  public emit<TEventName extends EventKey<PointerEvents>>(eventName: TEventName, event: PointerEvents[TEventName]): void;
32
  public emit(eventName: string, event?: any): void;
33
  public emit<TEventName extends EventKey<PointerEvents> | string>(eventName: TEventName, event?: any): void {
34
    this.events.emit(eventName, event);
151✔
35
  }
36

37
  public on<TEventName extends EventKey<PointerEvents>>(eventName: TEventName, handler: Handler<PointerEvents[TEventName]>): Subscription;
38
  public on(eventName: string, handler: Handler<unknown>): Subscription;
39
  public on<TEventName extends EventKey<PointerEvents> | string>(eventName: TEventName, handler: Handler<any>): Subscription {
40
    return this.events.on(eventName, handler);
2,982✔
41
  }
42

43
  public once<TEventName extends EventKey<PointerEvents>>(eventName: TEventName, handler: Handler<PointerEvents[TEventName]>): Subscription;
44
  public once(eventName: string, handler: Handler<unknown>): Subscription;
45
  public once<TEventName extends EventKey<PointerEvents> | string>(eventName: TEventName, handler: Handler<any>): Subscription {
46
    return this.events.once(eventName, handler);
×
47
  }
48

49
  public off<TEventName extends EventKey<PointerEvents>>(eventName: TEventName, handler: Handler<PointerEvents[TEventName]>): void;
50
  public off(eventName: string, handler: Handler<unknown>): void;
51
  public off(eventName: string): void;
52
  public off<TEventName extends EventKey<PointerEvents> | string>(eventName: TEventName, handler?: Handler<any>): void {
NEW
53
    this.events.off(eventName, handler as any);
×
54
  }
55

56
  /**
57
   * Called internally by excalibur to keep pointers up to date
58
   * @internal
59
   * @param engine
60
   */
61
  public _updateWorldPosition(engine: Engine) {
62
    const coord = GlobalCoordinates.fromPagePosition(this.lastPagePos, engine);
1,092✔
63
    this.lastScreenPos = coord.screenPos;
1,092✔
64
    this.lastWorldPos = coord.worldPos;
1,092✔
65
  }
66

67
  private _onPointerMove = (ev: PointerEvent): void => {
1,487✔
68
    this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);
19✔
69
    this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);
19✔
70
    this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);
19✔
71
  };
72

73
  private _onPointerDown = (ev: PointerEvent): void => {
1,487✔
74
    this.lastPagePos = new Vector(ev.pagePos.x, ev.pagePos.y);
55✔
75
    this.lastScreenPos = new Vector(ev.screenPos.x, ev.screenPos.y);
55✔
76
    this.lastWorldPos = new Vector(ev.worldPos.x, ev.worldPos.y);
55✔
77
  };
78
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc