@vpmedia/phaser 1.123.0 → 1.124.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/dist/index.js +339 -323
  2. package/dist/index.js.map +1 -1
  3. package/dist/phaser/core/animation.d.ts +3 -3
  4. package/dist/phaser/core/animation.d.ts.map +1 -1
  5. package/dist/phaser/core/animation_manager.d.ts.map +1 -1
  6. package/dist/phaser/core/animation_parser.d.ts +27 -2
  7. package/dist/phaser/core/animation_parser.d.ts.map +1 -1
  8. package/dist/phaser/core/array_set.d.ts +11 -11
  9. package/dist/phaser/core/array_set.d.ts.map +1 -1
  10. package/dist/phaser/core/cache.d.ts.map +1 -1
  11. package/dist/phaser/core/callback.d.ts.map +1 -1
  12. package/dist/phaser/core/dom.d.ts +125 -19
  13. package/dist/phaser/core/dom.d.ts.map +1 -1
  14. package/dist/phaser/core/factory.d.ts +3 -2
  15. package/dist/phaser/core/factory.d.ts.map +1 -1
  16. package/dist/phaser/core/input.d.ts +3 -2
  17. package/dist/phaser/core/input.d.ts.map +1 -1
  18. package/dist/phaser/core/input_handler.d.ts.map +1 -1
  19. package/dist/phaser/core/input_mouse.d.ts +5 -1
  20. package/dist/phaser/core/input_mouse.d.ts.map +1 -1
  21. package/dist/phaser/core/input_pointer.d.ts +3 -3
  22. package/dist/phaser/core/input_pointer.d.ts.map +1 -1
  23. package/dist/phaser/core/input_touch.d.ts +8 -8
  24. package/dist/phaser/core/input_touch.d.ts.map +1 -1
  25. package/dist/phaser/core/loader.d.ts +11 -2
  26. package/dist/phaser/core/loader.d.ts.map +1 -1
  27. package/dist/phaser/core/loader_parser.d.ts +14 -1
  28. package/dist/phaser/core/loader_parser.d.ts.map +1 -1
  29. package/dist/phaser/core/raf.d.ts +1 -1
  30. package/dist/phaser/core/raf.d.ts.map +1 -1
  31. package/dist/phaser/core/scale_manager.d.ts.map +1 -1
  32. package/dist/phaser/core/scene_manager.d.ts.map +1 -1
  33. package/dist/phaser/core/signal.d.ts.map +1 -1
  34. package/dist/phaser/core/sound.d.ts.map +1 -1
  35. package/dist/phaser/core/sound_manager.d.ts +1 -1
  36. package/dist/phaser/core/sound_manager.d.ts.map +1 -1
  37. package/dist/phaser/core/stage.d.ts +16 -6
  38. package/dist/phaser/core/stage.d.ts.map +1 -1
  39. package/dist/phaser/core/time.d.ts.map +1 -1
  40. package/dist/phaser/core/timer.d.ts +1 -1
  41. package/dist/phaser/core/timer.d.ts.map +1 -1
  42. package/dist/phaser/core/tween.d.ts +13 -5
  43. package/dist/phaser/core/tween.d.ts.map +1 -1
  44. package/dist/phaser/core/tween_data.d.ts +9 -7
  45. package/dist/phaser/core/tween_data.d.ts.map +1 -1
  46. package/dist/phaser/core/tween_manager.d.ts.map +1 -1
  47. package/dist/phaser/display/button.d.ts +6 -5
  48. package/dist/phaser/display/button.d.ts.map +1 -1
  49. package/dist/phaser/display/canvas/buffer.d.ts +1 -1
  50. package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
  51. package/dist/phaser/display/canvas/masker.d.ts +1 -1
  52. package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
  53. package/dist/phaser/display/canvas/pool.d.ts +2 -2
  54. package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
  55. package/dist/phaser/display/canvas/renderer.d.ts +9 -8
  56. package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
  57. package/dist/phaser/display/display_object.d.ts +3 -1
  58. package/dist/phaser/display/display_object.d.ts.map +1 -1
  59. package/dist/phaser/display/graphics.d.ts +1 -1
  60. package/dist/phaser/display/graphics.d.ts.map +1 -1
  61. package/dist/phaser/display/group.d.ts +1 -1
  62. package/dist/phaser/display/group.d.ts.map +1 -1
  63. package/dist/phaser/display/image.d.ts +6 -5
  64. package/dist/phaser/display/image.d.ts.map +1 -1
  65. package/dist/phaser/display/sprite_util.d.ts +3 -2
  66. package/dist/phaser/display/sprite_util.d.ts.map +1 -1
  67. package/dist/phaser/display/text.d.ts +2 -16
  68. package/dist/phaser/display/text.d.ts.map +1 -1
  69. package/dist/phaser/display/webgl/abstract_filter.d.ts +14 -8
  70. package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
  71. package/dist/phaser/display/webgl/blend_manager.d.ts +2 -3
  72. package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
  73. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +11 -5
  74. package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
  75. package/dist/phaser/display/webgl/filter_manager.d.ts +6 -4
  76. package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
  77. package/dist/phaser/display/webgl/filter_texture.d.ts +4 -4
  78. package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
  79. package/dist/phaser/display/webgl/graphics.d.ts +2 -2
  80. package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
  81. package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
  82. package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
  83. package/dist/phaser/display/webgl/render_texture.d.ts +11 -8
  84. package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
  85. package/dist/phaser/display/webgl/renderer.d.ts +8 -4
  86. package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
  87. package/dist/phaser/display/webgl/shader/normal.d.ts +28 -3
  88. package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
  89. package/dist/phaser/display/webgl/sprite_batch.d.ts +6 -5
  90. package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
  91. package/dist/phaser/display/webgl/stencil_manager.d.ts +3 -3
  92. package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
  93. package/dist/phaser/display/webgl/texture_util.d.ts +2 -2
  94. package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
  95. package/dist/phaser/display/webgl/util.d.ts +1 -1
  96. package/dist/phaser/display/webgl/util.d.ts.map +1 -1
  97. package/dist/phaser/geom/circle.d.ts.map +1 -1
  98. package/dist/phaser/geom/line.d.ts +10 -1
  99. package/dist/phaser/geom/line.d.ts.map +1 -1
  100. package/dist/phaser/geom/rectangle.d.ts.map +1 -1
  101. package/dist/phaser/geom/util/circle.d.ts +2 -1
  102. package/dist/phaser/geom/util/circle.d.ts.map +1 -1
  103. package/dist/phaser/geom/util/point.d.ts +1 -1
  104. package/dist/phaser/geom/util/point.d.ts.map +1 -1
  105. package/dist/phaser/geom/util/rectangle.d.ts +1 -1
  106. package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
  107. package/dist/phaser/util/math.d.ts.map +1 -1
  108. package/package.json +1 -1
  109. package/src/phaser/core/animation.ts +4 -4
  110. package/src/phaser/core/animation_manager.ts +10 -10
  111. package/src/phaser/core/animation_parser.ts +30 -24
  112. package/src/phaser/core/array_set.ts +27 -27
  113. package/src/phaser/core/cache.test.ts +33 -33
  114. package/src/phaser/core/cache.ts +3 -3
  115. package/src/phaser/core/callback.ts +1 -0
  116. package/src/phaser/core/callback_context.test.ts +8 -8
  117. package/src/phaser/core/dom.ts +15 -5
  118. package/src/phaser/core/factory.ts +9 -2
  119. package/src/phaser/core/frame_data.test.ts +23 -23
  120. package/src/phaser/core/input.ts +9 -8
  121. package/src/phaser/core/input_handler.test.ts +18 -18
  122. package/src/phaser/core/input_handler.ts +1 -1
  123. package/src/phaser/core/input_mouse.ts +9 -8
  124. package/src/phaser/core/input_pointer.test.ts +26 -26
  125. package/src/phaser/core/input_pointer.ts +3 -3
  126. package/src/phaser/core/input_touch.ts +8 -8
  127. package/src/phaser/core/loader.test.ts +26 -26
  128. package/src/phaser/core/loader.ts +25 -25
  129. package/src/phaser/core/loader_parser.test.ts +16 -16
  130. package/src/phaser/core/loader_parser.ts +16 -6
  131. package/src/phaser/core/raf.ts +1 -1
  132. package/src/phaser/core/registry.test.ts +6 -6
  133. package/src/phaser/core/scale_manager.ts +2 -2
  134. package/src/phaser/core/scene_manager.test.ts +30 -30
  135. package/src/phaser/core/scene_manager.ts +1 -1
  136. package/src/phaser/core/signal.test.ts +8 -8
  137. package/src/phaser/core/signal.ts +1 -1
  138. package/src/phaser/core/signal_dispatch.test.ts +30 -30
  139. package/src/phaser/core/sound.ts +20 -8
  140. package/src/phaser/core/sound_manager.ts +6 -6
  141. package/src/phaser/core/stage.ts +19 -9
  142. package/src/phaser/core/time.ts +1 -1
  143. package/src/phaser/core/timer.test.ts +47 -47
  144. package/src/phaser/core/timer.ts +1 -1
  145. package/src/phaser/core/tween.ts +28 -25
  146. package/src/phaser/core/tween_data.test.ts +119 -0
  147. package/src/phaser/core/tween_data.ts +54 -39
  148. package/src/phaser/core/tween_easing.test.ts +5 -5
  149. package/src/phaser/core/tween_manager.ts +2 -2
  150. package/src/phaser/display/bitmap_text.test.ts +30 -30
  151. package/src/phaser/display/button.ts +8 -6
  152. package/src/phaser/display/canvas/buffer.ts +2 -2
  153. package/src/phaser/display/canvas/masker.ts +1 -1
  154. package/src/phaser/display/canvas/pool.test.ts +20 -20
  155. package/src/phaser/display/canvas/pool.ts +3 -3
  156. package/src/phaser/display/canvas/renderer.ts +12 -11
  157. package/src/phaser/display/canvas/util.test.ts +25 -25
  158. package/src/phaser/display/display_object.ts +3 -1
  159. package/src/phaser/display/graphics.test.ts +70 -20
  160. package/src/phaser/display/graphics.ts +38 -32
  161. package/src/phaser/display/group.ts +4 -4
  162. package/src/phaser/display/image.ts +28 -25
  163. package/src/phaser/display/sprite_util.ts +3 -2
  164. package/src/phaser/display/text.test.ts +28 -25
  165. package/src/phaser/display/text.ts +21 -18
  166. package/src/phaser/display/webgl/abstract_filter.ts +20 -10
  167. package/src/phaser/display/webgl/blend_manager.ts +4 -5
  168. package/src/phaser/display/webgl/earcut.test.ts +20 -20
  169. package/src/phaser/display/webgl/fast_sprite_batch.ts +21 -16
  170. package/src/phaser/display/webgl/filter_manager.ts +7 -4
  171. package/src/phaser/display/webgl/filter_texture.ts +5 -5
  172. package/src/phaser/display/webgl/graphics.ts +2 -2
  173. package/src/phaser/display/webgl/mask_manager.ts +9 -14
  174. package/src/phaser/display/webgl/render_texture.ts +15 -14
  175. package/src/phaser/display/webgl/renderer.ts +7 -6
  176. package/src/phaser/display/webgl/shader/normal.ts +41 -31
  177. package/src/phaser/display/webgl/shader/shader.test.ts +24 -24
  178. package/src/phaser/display/webgl/shader_manager.test.ts +18 -18
  179. package/src/phaser/display/webgl/sprite_batch.ts +8 -8
  180. package/src/phaser/display/webgl/stencil_manager.ts +4 -4
  181. package/src/phaser/display/webgl/texture_util.ts +2 -2
  182. package/src/phaser/display/webgl/util.ts +1 -1
  183. package/src/phaser/geom/circle.test.ts +38 -38
  184. package/src/phaser/geom/circle.ts +7 -7
  185. package/src/phaser/geom/ellipse.test.ts +12 -12
  186. package/src/phaser/geom/line.test.ts +15 -15
  187. package/src/phaser/geom/line.ts +5 -2
  188. package/src/phaser/geom/matrix.test.ts +31 -31
  189. package/src/phaser/geom/point.test.ts +31 -31
  190. package/src/phaser/geom/polygon.test.ts +27 -27
  191. package/src/phaser/geom/rectangle.test.ts +87 -87
  192. package/src/phaser/geom/rectangle.ts +11 -11
  193. package/src/phaser/geom/rounded_rectangle.test.ts +9 -9
  194. package/src/phaser/geom/util/circle.test.ts +5 -5
  195. package/src/phaser/geom/util/circle.ts +2 -1
  196. package/src/phaser/geom/util/ellipse.test.ts +2 -2
  197. package/src/phaser/geom/util/line.test.ts +2 -2
  198. package/src/phaser/geom/util/matrix.test.ts +4 -4
  199. package/src/phaser/geom/util/point.test.ts +2 -2
  200. package/src/phaser/geom/util/point.ts +1 -1
  201. package/src/phaser/geom/util/polygon.test.ts +2 -2
  202. package/src/phaser/geom/util/rectangle.test.ts +2 -2
  203. package/src/phaser/geom/util/rectangle.ts +1 -1
  204. package/src/phaser/geom/util/rounded_rectangle.test.ts +2 -2
  205. package/src/phaser/util/math.test.ts +41 -41
  206. package/src/phaser/util/math.ts +5 -2
@@ -14,6 +14,7 @@ import type { Game } from './game.js';
14
14
  import type { DisplayObject } from '../display/display_object.js';
15
15
  import type { InputEvent } from './input_event.js';
16
16
  import type { CandidateHandler, PointerMoveCallback } from './callback.js';
17
+ import type { InputHandler } from './input_handler.js';
17
18
 
18
19
  const MAX_POINTERS = 10;
19
20
 
@@ -50,7 +51,7 @@ export class Input {
50
51
  public pointer7!: Pointer | null;
51
52
  public pointer8!: Pointer | null;
52
53
  public pointer9!: Pointer | null;
53
- public pointer10!: any;
54
+ public pointer10!: Pointer | null;
54
55
  public pointers!: Pointer[];
55
56
  public activePointer!: Pointer;
56
57
  public mousePointer!: Pointer;
@@ -63,7 +64,7 @@ export class Input {
63
64
  public onTap!: Signal;
64
65
  public onHold!: Signal;
65
66
  public minPriorityID!: number;
66
- public interactiveItems!: ArraySet;
67
+ public interactiveItems!: ArraySet<InputHandler>;
67
68
  public _localPoint!: Point;
68
69
  public _pollCounter!: number;
69
70
  public _oldPosition!: Point;
@@ -118,7 +119,7 @@ export class Input {
118
119
  this.onTap = null!;
119
120
  this.onHold = null!;
120
121
  this.minPriorityID = 0;
121
- this.interactiveItems = new ArraySet();
122
+ this.interactiveItems = new ArraySet<InputHandler>();
122
123
  this._localPoint = new Point();
123
124
  this._pollCounter = 0;
124
125
  this._oldPosition = null!;
@@ -291,7 +292,7 @@ export class Input {
291
292
  * @param {MouseEvent|TouchEvent|PointerEvent} event - TBD.
292
293
  * @returns {Pointer} TBD.
293
294
  */
294
- public startPointer(event: InputEvent) {
295
+ public startPointer(event: InputEvent): Pointer | null {
295
296
  if (this.maxPointers >= 0 && this.countActivePointers(this.maxPointers) >= this.maxPointers) {
296
297
  return null;
297
298
  }
@@ -315,7 +316,7 @@ export class Input {
315
316
  * @param {MouseEvent|TouchEvent|PointerEvent} event - TBD.
316
317
  * @returns {Pointer} TBD.
317
318
  */
318
- public updatePointer(event: InputEvent) {
319
+ public updatePointer(event: InputEvent): Pointer | null {
319
320
  if (this.pointer1.active && this.pointer1.identifier === event.identifier) {
320
321
  return this.pointer1.move(event);
321
322
  }
@@ -336,7 +337,7 @@ export class Input {
336
337
  * @param {MouseEvent|TouchEvent|PointerEvent} event - TBD.
337
338
  * @returns {Pointer} TBD.
338
339
  */
339
- public stopPointer(event: InputEvent) {
340
+ public stopPointer(event: InputEvent): Pointer | null {
340
341
  if (this.pointer1.active && this.pointer1.identifier === event.identifier) {
341
342
  return this.pointer1.stop(event);
342
343
  }
@@ -489,7 +490,7 @@ export class Input {
489
490
  /**
490
491
  * TBD.
491
492
  */
492
- public set x(value) {
493
+ public set x(value: number) {
493
494
  this._x = Math.floor(value);
494
495
  }
495
496
 
@@ -504,7 +505,7 @@ export class Input {
504
505
  /**
505
506
  * TBD.
506
507
  */
507
- public set y(value) {
508
+ public set y(value: number) {
508
509
  this._y = Math.floor(value);
509
510
  }
510
511
 
@@ -9,28 +9,28 @@ const createSprite = (): Image =>
9
9
  game: {
10
10
  time: { time: 0 },
11
11
  canvas: { style: { cursor: 'default' } },
12
- input: { interactiveItems: { add: () => undefined, remove: () => undefined } },
12
+ input: { interactiveItems: { add: (): undefined => undefined, remove: (): undefined => undefined } },
13
13
  },
14
14
  events: {
15
- onAddedToGroup: { add: () => undefined },
16
- onRemovedFromGroup: { add: () => undefined },
15
+ onAddedToGroup: { add: (): undefined => undefined },
16
+ onRemovedFromGroup: { add: (): undefined => undefined },
17
17
  },
18
18
  }) as unknown as Image;
19
19
 
20
- describe('InputHandler', () => {
21
- describe('pointerData', () => {
22
- it('seeds pointer 0 from the constructor', () => {
20
+ describe('InputHandler', (): void => {
21
+ describe('pointerData', (): void => {
22
+ it('seeds pointer 0 from the constructor', (): void => {
23
23
  const handler = new InputHandler(createSprite());
24
24
  expect(handler._pointerData).toHaveLength(1);
25
25
  expect(handler.pointerData(0).id).toBe(0);
26
26
  });
27
27
 
28
- it('returns the same record on repeat access', () => {
28
+ it('returns the same record on repeat access', (): void => {
29
29
  const handler = new InputHandler(createSprite());
30
30
  expect(handler.pointerData(0)).toBe(handler.pointerData(0));
31
31
  });
32
32
 
33
- it('creates a record on first access of an unseeded pointer', () => {
33
+ it('creates a record on first access of an unseeded pointer', (): void => {
34
34
  const handler = new InputHandler(createSprite());
35
35
  const data = handler.pointerData(7);
36
36
  expect(data.id).toBe(7);
@@ -38,13 +38,13 @@ describe('InputHandler', () => {
38
38
  expect(handler.pointerData(7)).toBe(data);
39
39
  });
40
40
 
41
- it('hands back a record whose mutations are visible through the array', () => {
41
+ it('hands back a record whose mutations are visible through the array', (): void => {
42
42
  const handler = new InputHandler(createSprite());
43
43
  handler.pointerData(3).isOver = true;
44
44
  expect(handler._pointerData[3]?.isOver).toBe(true);
45
45
  });
46
46
 
47
- it('exposes every field a fresh record needs', () => {
47
+ it('exposes every field a fresh record needs', (): void => {
48
48
  const handler = new InputHandler(createSprite());
49
49
  expect(handler.pointerData(1)).toStrictEqual({
50
50
  id: 1,
@@ -66,18 +66,18 @@ describe('InputHandler', () => {
66
66
  });
67
67
  });
68
68
 
69
- describe('start', () => {
70
- it('populates the ten pointer slots the input system tracks', () => {
69
+ describe('start', (): void => {
70
+ it('populates the ten pointer slots the input system tracks', (): void => {
71
71
  const handler = new InputHandler(createSprite());
72
72
  handler.start();
73
73
  expect(handler._pointerData).toHaveLength(10);
74
- expect(handler._pointerData.map((data) => data.id)).toStrictEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
74
+ expect(handler._pointerData.map((data): number => data.id)).toStrictEqual([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
75
75
  expect(handler.enabled).toBe(true);
76
76
  });
77
77
  });
78
78
 
79
- describe('reset', () => {
80
- it('clears pointer state back to a fresh record', () => {
79
+ describe('reset', (): void => {
80
+ it('clears pointer state back to a fresh record', (): void => {
81
81
  const handler = new InputHandler(createSprite());
82
82
  handler.start();
83
83
  handler.pointerData(2).isDown = true;
@@ -89,8 +89,8 @@ describe('InputHandler', () => {
89
89
  });
90
90
  });
91
91
 
92
- describe('pointer accessors', () => {
93
- it('read through to the backing record', () => {
92
+ describe('pointer accessors', (): void => {
93
+ it('read through to the backing record', (): void => {
94
94
  const handler = new InputHandler(createSprite());
95
95
  handler.start();
96
96
  const data = handler.pointerData(4);
@@ -104,7 +104,7 @@ describe('InputHandler', () => {
104
104
  expect(handler.pointerTimeDown(4)).toBe(99);
105
105
  });
106
106
 
107
- it('default to pointer 0', () => {
107
+ it('default to pointer 0', (): void => {
108
108
  const handler = new InputHandler(createSprite());
109
109
  handler.pointerData(0).x = 5;
110
110
  expect(handler.pointerX()).toBe(5);
@@ -138,7 +138,7 @@ export class InputHandler {
138
138
  * @param {boolean} useHandCursor - TBD.
139
139
  * @returns {DisplayObject} TBD.
140
140
  */
141
- public start(priority = 0, useHandCursor = false) {
141
+ public start(priority = 0, useHandCursor = false): Image {
142
142
  // Turning on
143
143
  if (!this.enabled) {
144
144
  // Register, etc
@@ -2,6 +2,9 @@ import type { InputEvent } from './input_event.js';
2
2
  import type { Input } from './input.js';
3
3
  import type { Game } from './game.js';
4
4
 
5
+ /** The legacy wheel-event adapter Phaser 2 installed for old browsers; nothing sets it any more. */
6
+ export type WheelEventProxy = { bindEvent: (event: InputEvent) => InputEvent };
7
+
5
8
  export class Mouse {
6
9
  public game!: Game;
7
10
  public input!: Input;
@@ -27,7 +30,7 @@ export class Mouse {
27
30
  public _onMouseWheel: EventListener | null;
28
31
  public _onMouseUpGlobal!: EventListener;
29
32
  public _onMouseOutGlobal!: EventListener;
30
- public _wheelEvent!: any;
33
+ public _wheelEvent!: WheelEventProxy | null;
31
34
  /**
32
35
  * TBD.
33
36
  * @param {Game} game - TBD.
@@ -262,15 +265,13 @@ export class Mouse {
262
265
  * @param {WheelEvent} event - TBD.
263
266
  */
264
267
  public onMouseWheel(event: InputEvent): void {
265
- if (this._wheelEvent) {
266
- event = this._wheelEvent.bindEvent(event);
267
- }
268
- this.event = event;
269
- this.eventPreventDefault(event);
268
+ const wheelEvent = this._wheelEvent ? this._wheelEvent.bindEvent(event) : event;
269
+ this.event = wheelEvent;
270
+ this.eventPreventDefault(wheelEvent);
270
271
  // reverse detail for firefox
271
- this.wheelDelta = Math.max(-1, Math.min(1, -(event.deltaY ?? 0)));
272
+ this.wheelDelta = Math.max(-1, Math.min(1, -(wheelEvent.deltaY ?? 0)));
272
273
  if (this.mouseWheelCallback) {
273
- this.mouseWheelCallback.call(this.callbackContext, event);
274
+ this.mouseWheelCallback.call(this.callbackContext, wheelEvent);
274
275
  }
275
276
  }
276
277
 
@@ -9,82 +9,82 @@ import { Pointer } from './input_pointer.js';
9
9
  const createGame = (): Game =>
10
10
  ({
11
11
  time: { time: 0 },
12
- scale: { bounds: { contains: () => true }, offset: { x: 0, y: 0 } },
12
+ scale: { bounds: { contains: (): boolean => true }, offset: { x: 0, y: 0 } },
13
13
  input: {
14
14
  enabled: true,
15
15
  multiInputOverride: 0,
16
16
  moveCallbacks: [],
17
- interactiveItems: { total: 0, callAll: () => undefined },
17
+ interactiveItems: { total: 0, callAll: (): undefined => undefined },
18
18
  mouse: { locked: false },
19
19
  scale: new Point(1, 1),
20
20
  position: new Point(),
21
21
  circle: new Circle(),
22
22
  speed: new Point(),
23
23
  activePointer: null,
24
- onDown: { dispatch: () => undefined },
25
- onUp: { dispatch: () => undefined },
26
- onHold: { dispatch: () => undefined },
27
- onTap: { dispatch: () => undefined },
24
+ onDown: { dispatch: (): undefined => undefined },
25
+ onUp: { dispatch: (): undefined => undefined },
26
+ onHold: { dispatch: (): undefined => undefined },
27
+ onTap: { dispatch: (): undefined => undefined },
28
28
  x: 0,
29
29
  y: 0,
30
- resetSpeed: () => undefined,
30
+ resetSpeed: (): undefined => undefined,
31
31
  },
32
32
  }) as unknown as Game;
33
33
 
34
34
  const createPointer = (id = 1): Pointer => new Pointer(createGame(), id, POINTER_CURSOR);
35
35
 
36
36
  const event = (fields: Partial<InputEvent> = {}): InputEvent =>
37
- ({ type: 'pointerdown', target: null, preventDefault: () => undefined, ...fields }) as InputEvent;
37
+ ({ type: 'pointerdown', target: null, preventDefault: (): undefined => undefined, ...fields }) as InputEvent;
38
38
 
39
- describe('Pointer', () => {
40
- describe('updateButtons', () => {
41
- it('reads a down event as pressed', () => {
39
+ describe('Pointer', (): void => {
40
+ describe('updateButtons', (): void => {
41
+ it('reads a down event as pressed', (): void => {
42
42
  const pointer = createPointer();
43
43
  pointer.updateButtons(event({ type: 'pointerdown' }));
44
44
  expect(pointer.isDown).toBe(true);
45
45
  expect(pointer.isUp).toBe(false);
46
46
  });
47
47
 
48
- it('reads an up event as released', () => {
48
+ it('reads an up event as released', (): void => {
49
49
  const pointer = createPointer();
50
50
  pointer.updateButtons(event({ type: 'pointerup' }));
51
51
  expect(pointer.isDown).toBe(false);
52
52
  expect(pointer.isUp).toBe(true);
53
53
  });
54
54
 
55
- it('matches the suffix case insensitively, as the legacy events are capitalised', () => {
55
+ it('matches the suffix case insensitively, as the legacy events are capitalised', (): void => {
56
56
  const pointer = createPointer();
57
57
  pointer.updateButtons(event({ type: 'MSPointerDown' }));
58
58
  expect(pointer.isDown).toBe(true);
59
59
  });
60
60
 
61
- it('treats a move event as not pressed', () => {
61
+ it('treats a move event as not pressed', (): void => {
62
62
  const pointer = createPointer();
63
63
  pointer.updateButtons(event({ type: 'pointermove' }));
64
64
  expect(pointer.isUp).toBe(true);
65
65
  });
66
66
  });
67
67
 
68
- describe('start', () => {
69
- it('records the identifier the event carries', () => {
68
+ describe('start', (): void => {
69
+ it('records the identifier the event carries', (): void => {
70
70
  const pointer = createPointer();
71
71
  pointer.start(event({ identifier: 7 }));
72
72
  expect(pointer.identifier).toBe(7);
73
73
  });
74
74
 
75
- it('records a null identifier when the event has none', () => {
75
+ it('records a null identifier when the event has none', (): void => {
76
76
  const pointer = createPointer();
77
77
  pointer.start(event({}));
78
78
  expect(pointer.identifier).toBeNull();
79
79
  });
80
80
 
81
- it('records the pointerId when the event carries one', () => {
81
+ it('records the pointerId when the event carries one', (): void => {
82
82
  const pointer = createPointer();
83
83
  pointer.start(event({ pointerId: 3 }));
84
84
  expect(pointer.pointerId).toBe(3);
85
85
  });
86
86
 
87
- it('marks the pointer active and down', () => {
87
+ it('marks the pointer active and down', (): void => {
88
88
  const pointer = createPointer();
89
89
  pointer.start(event({ identifier: 1 }));
90
90
  expect(pointer.active).toBe(true);
@@ -92,8 +92,8 @@ describe('Pointer', () => {
92
92
  });
93
93
  });
94
94
 
95
- describe('move', () => {
96
- it('copies the coordinate set off the event', () => {
95
+ describe('move', (): void => {
96
+ it('copies the coordinate set off the event', (): void => {
97
97
  const pointer = createPointer();
98
98
  pointer.start(event({ identifier: 1 }));
99
99
  pointer.move(
@@ -115,7 +115,7 @@ describe('Pointer', () => {
115
115
  expect(pointer.screenY).toBe(66);
116
116
  });
117
117
 
118
- it('falls back to zero for coordinates the event omits', () => {
118
+ it('falls back to zero for coordinates the event omits', (): void => {
119
119
  const pointer = createPointer();
120
120
  pointer.start(event({ identifier: 1 }));
121
121
  pointer.move(event({ type: 'pointermove' }));
@@ -124,8 +124,8 @@ describe('Pointer', () => {
124
124
  });
125
125
  });
126
126
 
127
- describe('stop', () => {
128
- it('clears the identifiers it recorded', () => {
127
+ describe('stop', (): void => {
128
+ it('clears the identifiers it recorded', (): void => {
129
129
  const pointer = createPointer();
130
130
  pointer.start(event({ identifier: 5, pointerId: 5 }));
131
131
  pointer.stop(event({ type: 'pointerup' }));
@@ -135,8 +135,8 @@ describe('Pointer', () => {
135
135
  });
136
136
  });
137
137
 
138
- describe('reset', () => {
139
- it('returns the pointer to its resting state', () => {
138
+ describe('reset', (): void => {
139
+ it('returns the pointer to its resting state', (): void => {
140
140
  const pointer = createPointer();
141
141
  pointer.start(event({ identifier: 5 }));
142
142
  pointer.reset();
@@ -362,7 +362,7 @@ export class Pointer {
362
362
  * @param {InputHandler} newTarget - TBD.
363
363
  * @param {boolean} silent - TBD.
364
364
  */
365
- public swapTarget(newTarget: InputHandler, silent = false): void {
365
+ public swapTarget(newTarget: InputHandler | null, silent = false): void {
366
366
  // Now we know the top-most item (if any) we can process it
367
367
  if (newTarget === null) {
368
368
  // The pointer isn't currently over anything, check if we've got a lingering previous target
@@ -456,7 +456,7 @@ export class Pointer {
456
456
  * @param {number} duration - TBD.
457
457
  * @returns {boolean} TBD.
458
458
  */
459
- public justPressed(duration: number): boolean {
459
+ public justPressed(duration = 0): boolean {
460
460
  const window = duration || this.game.input.justPressedRate;
461
461
  return this.isDown && this.timeDown + window > this.game.time.time;
462
462
  }
@@ -466,7 +466,7 @@ export class Pointer {
466
466
  * @param {number} duration - TBD.
467
467
  * @returns {boolean} TBD.
468
468
  */
469
- public justReleased(duration: number): boolean {
469
+ public justReleased(duration = 0): boolean {
470
470
  const window = duration || this.game.input.justReleasedRate;
471
471
  return this.isUp && this.timeUp + window > this.game.time.time;
472
472
  }
@@ -2,15 +2,15 @@ import type { Game } from './game.js';
2
2
  import type { InputEvent } from './input_event.js';
3
3
  export class Touch {
4
4
  public game!: Game;
5
- public enabled!: any;
5
+ public enabled!: boolean;
6
6
  public callbackContext!: unknown;
7
- public touchStartCallback!: any;
8
- public touchMoveCallback!: any;
9
- public touchEndCallback!: any;
10
- public touchEnterCallback!: any;
11
- public touchLeaveCallback!: any;
12
- public touchCancelCallback!: any;
13
- public preventDefault!: any;
7
+ public touchStartCallback: EventListener | null;
8
+ public touchMoveCallback: EventListener | null;
9
+ public touchEndCallback: EventListener | null;
10
+ public touchEnterCallback: EventListener | null;
11
+ public touchLeaveCallback: EventListener | null;
12
+ public touchCancelCallback: EventListener | null;
13
+ public preventDefault!: boolean;
14
14
  public event!: InputEvent | null;
15
15
  public _onTouchStart: EventListener | null;
16
16
  public _onTouchMove: EventListener | null;
@@ -4,7 +4,7 @@ import { Loader } from './loader.js';
4
4
 
5
5
  const createGame = (formats: Record<string, boolean> = {}, noAudio = false): Game =>
6
6
  ({
7
- logger: { warn: () => undefined, info: () => undefined, debug: () => undefined },
7
+ logger: { warn: (): undefined => undefined, info: (): undefined => undefined, debug: (): undefined => undefined },
8
8
  config: { maxParallelDownloads: 4 },
9
9
  cache: {},
10
10
  sound: { noAudio },
@@ -14,35 +14,35 @@ const createGame = (formats: Record<string, boolean> = {}, noAudio = false): Gam
14
14
  const createLoader = (formats: Record<string, boolean> = {}, noAudio = false): Loader =>
15
15
  new Loader(createGame(formats, noAudio));
16
16
 
17
- describe('Loader', () => {
18
- describe('getAudioURL', () => {
19
- it('returns null when the device has no audio', () => {
17
+ describe('Loader', (): void => {
18
+ describe('getAudioURL', (): void => {
19
+ it('returns null when the device has no audio', (): void => {
20
20
  expect(createLoader({}, true).getAudioURL(['track.ogg'])).toBeNull();
21
21
  });
22
22
 
23
- it('picks a plain url whose extension the device can play', () => {
23
+ it('picks a plain url whose extension the device can play', (): void => {
24
24
  expect(createLoader({ ogg: true }).getAudioURL(['track.ogg'])).toBe('track.ogg');
25
25
  });
26
26
 
27
- it('skips an extension the device cannot play', () => {
27
+ it('skips an extension the device cannot play', (): void => {
28
28
  expect(createLoader({ ogg: false, mp3: true }).getAudioURL(['track.ogg', 'track.mp3'])).toBe('track.mp3');
29
29
  });
30
30
 
31
- it('returns null when no candidate is playable', () => {
31
+ it('returns null when no candidate is playable', (): void => {
32
32
  expect(createLoader({ ogg: false, mp3: false }).getAudioURL(['track.ogg', 'track.mp3'])).toBeNull();
33
33
  });
34
34
 
35
- it('accepts a bare string as a single candidate', () => {
35
+ it('accepts a bare string as a single candidate', (): void => {
36
36
  expect(createLoader({ mp3: true }).getAudioURL('track.mp3')).toBe('track.mp3');
37
37
  });
38
38
 
39
- it('reads the format from a uri and type pair', () => {
39
+ it('reads the format from a uri and type pair', (): void => {
40
40
  expect(createLoader({ ogg: true }).getAudioURL([{ uri: 'track-no-extension', type: 'ogg' }])).toBe(
41
41
  'track-no-extension'
42
42
  );
43
43
  });
44
44
 
45
- it('skips a pair whose type the device cannot play', () => {
45
+ it('skips a pair whose type the device cannot play', (): void => {
46
46
  const loader = createLoader({ ogg: false, mp3: true });
47
47
  expect(
48
48
  loader.getAudioURL([
@@ -52,55 +52,55 @@ describe('Loader', () => {
52
52
  ).toBe('b');
53
53
  });
54
54
 
55
- it('takes a blob url without checking the format', () => {
55
+ it('takes a blob url without checking the format', (): void => {
56
56
  expect(createLoader().getAudioURL(['blob:https://example.test/abc'])).toBe('blob:https://example.test/abc');
57
57
  });
58
58
 
59
- it('takes a data uri without checking the format', () => {
59
+ it('takes a data uri without checking the format', (): void => {
60
60
  expect(createLoader().getAudioURL(['data:audio/mp3;base64,AAAA'])).toBe('data:audio/mp3;base64,AAAA');
61
61
  });
62
62
 
63
- it('ignores a query string when reading the extension', () => {
63
+ it('ignores a query string when reading the extension', (): void => {
64
64
  expect(createLoader({ mp3: true }).getAudioURL(['track.mp3?v=2'])).toBe('track.mp3?v=2');
65
65
  });
66
66
 
67
- it('returns null for an empty candidate list', () => {
67
+ it('returns null for an empty candidate list', (): void => {
68
68
  expect(createLoader({ mp3: true }).getAudioURL([])).toBeNull();
69
69
  });
70
70
  });
71
71
 
72
- describe('transformUrl', () => {
72
+ describe('transformUrl', (): void => {
73
73
  const file = { path: 'assets/' } as Parameters<Loader['transformUrl']>[1];
74
74
 
75
- it('returns false for a missing url', () => {
75
+ it('returns false for a missing url', (): void => {
76
76
  expect(createLoader().transformUrl(null, file)).toBe(false);
77
77
  });
78
78
 
79
- it('returns false for an unresolved candidate list', () => {
79
+ it('returns false for an unresolved candidate list', (): void => {
80
80
  expect(createLoader().transformUrl(['a.mp3'], file)).toBe(false);
81
81
  });
82
82
 
83
- it('passes an absolute url through', () => {
83
+ it('passes an absolute url through', (): void => {
84
84
  expect(createLoader().transformUrl('https://example.test/a.png', file)).toBe('https://example.test/a.png');
85
85
  });
86
86
 
87
- it('passes a protocol relative url through', () => {
87
+ it('passes a protocol relative url through', (): void => {
88
88
  expect(createLoader().transformUrl('//example.test/a.png', file)).toBe('//example.test/a.png');
89
89
  });
90
90
 
91
- it('passes a data uri through', () => {
91
+ it('passes a data uri through', (): void => {
92
92
  expect(createLoader().transformUrl('data:image/png;base64,AAAA', file)).toBe('data:image/png;base64,AAAA');
93
93
  });
94
94
 
95
- it('prefixes a relative url with the base url and file path', () => {
95
+ it('prefixes a relative url with the base url and file path', (): void => {
96
96
  const loader = createLoader();
97
97
  loader.baseURL = 'https://cdn.test/';
98
98
  expect(loader.transformUrl('a.png', file)).toBe('https://cdn.test/assets/a.png');
99
99
  });
100
100
  });
101
101
 
102
- describe('addToFileList', () => {
103
- it('records the core fields for a queued file', () => {
102
+ describe('addToFileList', (): void => {
103
+ it('records the core fields for a queued file', (): void => {
104
104
  const loader = createLoader();
105
105
  loader.image('logo', 'logo.png');
106
106
  const asset = loader.getAsset('image', 'logo');
@@ -114,7 +114,7 @@ describe('Loader', () => {
114
114
  });
115
115
  });
116
116
 
117
- it('folds the per-type extras onto the file', () => {
117
+ it('folds the per-type extras onto the file', (): void => {
118
118
  const loader = createLoader();
119
119
  loader.audio('theme', ['theme.mp3']);
120
120
  expect(loader.getAsset('audio', 'theme')?.file).toMatchObject({
@@ -124,13 +124,13 @@ describe('Loader', () => {
124
124
  });
125
125
  });
126
126
 
127
- it('skips a file with no key', () => {
127
+ it('skips a file with no key', (): void => {
128
128
  const loader = createLoader();
129
129
  loader.image('', 'logo.png');
130
130
  expect(loader.getAsset('image', '')).toBeNull();
131
131
  });
132
132
 
133
- it('derives the url from the key and extension when none is given', () => {
133
+ it('derives the url from the key and extension when none is given', (): void => {
134
134
  const loader = createLoader();
135
135
  loader.image('logo');
136
136
  expect(loader.getAsset('image', 'logo')?.file.url).toBe('logo.png');