@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
@@ -1,9 +1,9 @@
1
1
  import { describe, expect, it, vi } from 'vitest';
2
2
  import { Signal } from './signal.js';
3
3
 
4
- describe('Signal binding management', () => {
5
- describe('add', () => {
6
- it('registers a listener and reports it', () => {
4
+ describe('Signal binding management', (): void => {
5
+ describe('add', (): void => {
6
+ it('registers a listener and reports it', (): void => {
7
7
  const signal = new Signal();
8
8
  const listener = vi.fn();
9
9
  signal.add(listener);
@@ -11,7 +11,7 @@ describe('Signal binding management', () => {
11
11
  expect(signal.has(listener)).toBe(true);
12
12
  });
13
13
 
14
- it('returns the existing binding when the same listener is added twice', () => {
14
+ it('returns the existing binding when the same listener is added twice', (): void => {
15
15
  const signal = new Signal();
16
16
  const listener = vi.fn();
17
17
  const first = signal.add(listener);
@@ -20,7 +20,7 @@ describe('Signal binding management', () => {
20
20
  expect(signal.getNumListeners()).toBe(1);
21
21
  });
22
22
 
23
- it('treats the same listener under a different context as a separate binding', () => {
23
+ it('treats the same listener under a different context as a separate binding', (): void => {
24
24
  const signal = new Signal();
25
25
  const listener = vi.fn();
26
26
  signal.add(listener, { id: 1 });
@@ -28,7 +28,7 @@ describe('Signal binding management', () => {
28
28
  expect(signal.getNumListeners()).toBe(2);
29
29
  });
30
30
 
31
- it('refuses to switch a listener between add and addOnce', () => {
31
+ it('refuses to switch a listener between add and addOnce', (): void => {
32
32
  const signal = new Signal();
33
33
  const listener = vi.fn();
34
34
  signal.add(listener);
@@ -36,18 +36,18 @@ describe('Signal binding management', () => {
36
36
  });
37
37
  });
38
38
 
39
- describe('dispatch', () => {
40
- it('calls listeners in priority order, highest first', () => {
39
+ describe('dispatch', (): void => {
40
+ it('calls listeners in priority order, highest first', (): void => {
41
41
  const signal = new Signal();
42
42
  const order: string[] = [];
43
- signal.add(() => order.push('low'), null, 0);
44
- signal.add(() => order.push('high'), null, 10);
45
- signal.add(() => order.push('mid'), null, 5);
43
+ signal.add((): number => order.push('low'), null, 0);
44
+ signal.add((): number => order.push('high'), null, 10);
45
+ signal.add((): number => order.push('mid'), null, 5);
46
46
  signal.dispatch();
47
47
  expect(order).toStrictEqual(['high', 'mid', 'low']);
48
48
  });
49
49
 
50
- it('forwards its arguments', () => {
50
+ it('forwards its arguments', (): void => {
51
51
  const signal = new Signal();
52
52
  const listener = vi.fn();
53
53
  signal.add(listener);
@@ -55,7 +55,7 @@ describe('Signal binding management', () => {
55
55
  expect(listener).toHaveBeenCalledWith(1, 'two');
56
56
  });
57
57
 
58
- it('removes an addOnce listener after it fires', () => {
58
+ it('removes an addOnce listener after it fires', (): void => {
59
59
  const signal = new Signal();
60
60
  const listener = vi.fn();
61
61
  signal.addOnce(listener);
@@ -65,20 +65,20 @@ describe('Signal binding management', () => {
65
65
  expect(signal.getNumListeners()).toBe(0);
66
66
  });
67
67
 
68
- it('stops propagating once a listener returns false', () => {
68
+ it('stops propagating once a listener returns false', (): void => {
69
69
  const signal = new Signal();
70
70
  const later = vi.fn();
71
- signal.add(() => false, null, 10);
71
+ signal.add((): boolean => false, null, 10);
72
72
  signal.add(later, null, 0);
73
73
  signal.dispatch();
74
74
  expect(later).not.toHaveBeenCalled();
75
75
  });
76
76
 
77
- it('stops propagating once halt is called', () => {
77
+ it('stops propagating once halt is called', (): void => {
78
78
  const signal = new Signal();
79
79
  const later = vi.fn();
80
80
  signal.add(
81
- () => {
81
+ (): void => {
82
82
  signal.halt();
83
83
  },
84
84
  null,
@@ -89,25 +89,25 @@ describe('Signal binding management', () => {
89
89
  expect(later).not.toHaveBeenCalled();
90
90
  });
91
91
 
92
- it('survives a listener that removes every listener mid-dispatch', () => {
92
+ it('survives a listener that removes every listener mid-dispatch', (): void => {
93
93
  const signal = new Signal();
94
94
  const later = vi.fn();
95
95
  signal.add(
96
- () => {
96
+ (): void => {
97
97
  signal.removeAll();
98
98
  },
99
99
  null,
100
100
  10
101
101
  );
102
102
  signal.add(later, null, 0);
103
- expect(() => {
103
+ expect((): void => {
104
104
  signal.dispatch();
105
105
  }).not.toThrow();
106
106
  });
107
107
  });
108
108
 
109
- describe('remove', () => {
110
- it('drops the matching binding', () => {
109
+ describe('remove', (): void => {
110
+ it('drops the matching binding', (): void => {
111
111
  const signal = new Signal();
112
112
  const listener = vi.fn();
113
113
  const other = vi.fn();
@@ -119,7 +119,7 @@ describe('Signal binding management', () => {
119
119
  expect(signal.has(other)).toBe(true);
120
120
  });
121
121
 
122
- it('leaves the list alone for an unregistered listener', () => {
122
+ it('leaves the list alone for an unregistered listener', (): void => {
123
123
  const signal = new Signal();
124
124
  signal.add(vi.fn());
125
125
  signal.remove(vi.fn());
@@ -127,8 +127,8 @@ describe('Signal binding management', () => {
127
127
  });
128
128
  });
129
129
 
130
- describe('removeAll', () => {
131
- it('clears every listener when given no context', () => {
130
+ describe('removeAll', (): void => {
131
+ it('clears every listener when given no context', (): void => {
132
132
  const signal = new Signal();
133
133
  signal.add(vi.fn(), { id: 1 });
134
134
  signal.add(vi.fn(), { id: 2 });
@@ -136,7 +136,7 @@ describe('Signal binding management', () => {
136
136
  expect(signal.getNumListeners()).toBe(0);
137
137
  });
138
138
 
139
- it('clears only the listeners bound to the given context', () => {
139
+ it('clears only the listeners bound to the given context', (): void => {
140
140
  const signal = new Signal();
141
141
  const context = { id: 1 };
142
142
  signal.add(vi.fn(), context);
@@ -146,8 +146,8 @@ describe('Signal binding management', () => {
146
146
  });
147
147
  });
148
148
 
149
- describe('memorize', () => {
150
- it('replays the last dispatch to a listener added afterwards', () => {
149
+ describe('memorize', (): void => {
150
+ it('replays the last dispatch to a listener added afterwards', (): void => {
151
151
  const signal = new Signal();
152
152
  signal.memorize = true;
153
153
  signal.add(vi.fn());
@@ -157,7 +157,7 @@ describe('Signal binding management', () => {
157
157
  expect(listener).toHaveBeenCalledWith('remembered');
158
158
  });
159
159
 
160
- it('records nothing while the signal has never had a binding', () => {
160
+ it('records nothing while the signal has never had a binding', (): void => {
161
161
  const signal = new Signal();
162
162
  signal.memorize = true;
163
163
  signal.dispatch('dropped');
@@ -166,7 +166,7 @@ describe('Signal binding management', () => {
166
166
  expect(listener).not.toHaveBeenCalled();
167
167
  });
168
168
 
169
- it('stops replaying once forgotten', () => {
169
+ it('stops replaying once forgotten', (): void => {
170
170
  const signal = new Signal();
171
171
  signal.memorize = true;
172
172
  signal.add(vi.fn());
@@ -13,6 +13,16 @@ export type SoundMarker = {
13
13
  loop: boolean;
14
14
  };
15
15
 
16
+ /** The pre-standard Web Audio names, still the only ones some older engines expose. */
17
+ type LegacyAudioContext = { createGainNode: () => GainNode };
18
+
19
+ /** The pre-standard source-node names, alongside the playback position those engines reported. */
20
+ type LegacyBufferSource = {
21
+ noteOff: (when: number) => void;
22
+ noteGrainOn: (when: number, offset: number, duration: number) => void;
23
+ currentTime: number;
24
+ };
25
+
16
26
  export class Sound {
17
27
  public _paused!: boolean;
18
28
  public game!: Game;
@@ -101,7 +111,9 @@ export class Sound {
101
111
  this.context = this.game.sound.context;
102
112
  this.masterGainNode = this.game.sound.masterGain;
103
113
  const gainNode: GainNode =
104
- this.context!.createGain === undefined ? (this.context as any).createGainNode() : this.context!.createGain();
114
+ this.context!.createGain === undefined
115
+ ? (this.context as unknown as LegacyAudioContext).createGainNode()
116
+ : this.context!.createGain();
105
117
  this.gainNode = gainNode;
106
118
  gainNode.gain.value = volume * this.game.sound.volume;
107
119
  if (connect && this.masterGainNode) {
@@ -269,7 +281,7 @@ export class Sound {
269
281
  }
270
282
  if (this._sound && this.isPlaying && !this.allowMultiple && (this.override || forceRestart)) {
271
283
  if (this._sound.stop === undefined) {
272
- (this._sound as any).noteOff(0);
284
+ (this._sound as unknown as LegacyBufferSource).noteOff(0);
273
285
  } else {
274
286
  this._sound.stop(0);
275
287
  }
@@ -348,7 +360,7 @@ export class Sound {
348
360
  }
349
361
  // Useful to cache this somewhere perhaps?
350
362
  if (this._sound.start === undefined) {
351
- (this._sound as any).noteGrainOn(0, this.position, this.duration);
363
+ (this._sound as unknown as LegacyBufferSource).noteGrainOn(0, this.position, this.duration);
352
364
  } else if (this.loop && marker === '') {
353
365
  this._sound.start(0, 0);
354
366
  } else {
@@ -387,7 +399,7 @@ export class Sound {
387
399
  this.paused = true;
388
400
  this.pausedPosition = this.currentTime;
389
401
  this.pausedTime = this.game.time.time;
390
- this._tempPause = (this._sound as any).currentTime;
402
+ this._tempPause = (this._sound as unknown as LegacyBufferSource).currentTime;
391
403
  this.onPause.dispatch(this);
392
404
  this.stop();
393
405
  }
@@ -414,7 +426,7 @@ export class Sound {
414
426
  }
415
427
  const duration = this.duration - this.pausedPosition / 1000;
416
428
  if (this._sound.start === undefined) {
417
- (this._sound as any).noteGrainOn(0, p, duration);
429
+ (this._sound as unknown as LegacyBufferSource).noteGrainOn(0, p, duration);
418
430
  } else {
419
431
  this._sound.start(0, p, duration);
420
432
  }
@@ -431,7 +443,7 @@ export class Sound {
431
443
  public stop(): void {
432
444
  if (this.isPlaying && this._sound) {
433
445
  if (this._sound.stop === undefined) {
434
- (this._sound as any).noteOff(0);
446
+ (this._sound as unknown as LegacyBufferSource).noteOff(0);
435
447
  } else {
436
448
  this._sound.stop(0);
437
449
  }
@@ -531,7 +543,7 @@ export class Sound {
531
543
  * Gets the muted state of the sound.
532
544
  * @returns {boolean} True if the sound is muted, false otherwise.
533
545
  */
534
- public get mute() {
546
+ public get mute(): boolean | null {
535
547
  return this._muted || this.game.sound.mute;
536
548
  }
537
549
 
@@ -565,7 +577,7 @@ export class Sound {
565
577
  /**
566
578
  * Sets the volume of the sound.
567
579
  */
568
- public set volume(value) {
580
+ public set volume(value: number) {
569
581
  if (this._muted) {
570
582
  this._muteVolume = value;
571
583
  return;
@@ -27,7 +27,7 @@ export class SoundManager {
27
27
  public _unlockSource!: AudioBufferSourceNode | null;
28
28
  public _volume!: number;
29
29
  public _sounds!: Sound[];
30
- public _watchList!: ArraySet;
30
+ public _watchList!: ArraySet<string>;
31
31
  public _watching!: boolean;
32
32
  public _watchCallback!: Callback | null;
33
33
  public _watchContext!: unknown;
@@ -54,7 +54,7 @@ export class SoundManager {
54
54
  this._volume = 1;
55
55
  /** @type {Sound[]} */
56
56
  this._sounds = [];
57
- this._watchList = new ArraySet();
57
+ this._watchList = new ArraySet<string>();
58
58
  this._watching = false;
59
59
  this._watchCallback = null;
60
60
  this._watchContext = null;
@@ -484,14 +484,14 @@ export class SoundManager {
484
484
  * Gets the muted state of the sound manager.
485
485
  * @returns {boolean} True if the manager is muted, false otherwise.
486
486
  */
487
- public get mute() {
487
+ public get mute(): boolean {
488
488
  return this._muted;
489
489
  }
490
490
 
491
491
  /**
492
492
  * Sets the muted state of the sound manager.
493
493
  */
494
- public set mute(value) {
494
+ public set mute(value: boolean) {
495
495
  if (value || false) {
496
496
  if (this._muted) {
497
497
  return;
@@ -511,14 +511,14 @@ export class SoundManager {
511
511
  * Gets the volume level of the sound manager.
512
512
  * @returns {number} The volume level (0.0 to 1.0).
513
513
  */
514
- public get volume() {
514
+ public get volume(): number {
515
515
  return this._volume;
516
516
  }
517
517
 
518
518
  /**
519
519
  * Sets the volume level of the sound manager.
520
520
  */
521
- public set volume(value) {
521
+ public set volume(value: number) {
522
522
  if (value < 0) {
523
523
  value = 0;
524
524
  } else if (value > 1) {
@@ -5,11 +5,21 @@ import { valueToColor } from '../util/math.js';
5
5
  import { SCALE_LINEAR, SCALE_NEAREST } from './const.js';
6
6
  import type { Game } from './game.js';
7
7
 
8
+ /** The stage clear colour, kept in every form the two renderers need. */
9
+ export type StageBackgroundColor = {
10
+ r: number;
11
+ g: number;
12
+ b: number;
13
+ a: number;
14
+ color: number;
15
+ rgba: string;
16
+ };
17
+
8
18
  export class Stage extends DisplayObject {
9
- declare public name: any;
10
- declare public worldTransform: any;
11
- public currentRenderOrderID!: any;
12
- public _bgColor!: any;
19
+ declare public name: string;
20
+ declare public worldTransform: Matrix;
21
+ public currentRenderOrderID!: number;
22
+ public _bgColor!: StageBackgroundColor;
13
23
  /**
14
24
  * Creates a new Stage instance.
15
25
  * @param {Game} game - The game instance.
@@ -109,22 +119,22 @@ export class Stage extends DisplayObject {
109
119
  public override destroy(): void {
110
120
  this.exists = false;
111
121
  this.game = null!;
112
- this.worldTransform = null;
113
- this._bgColor = null;
122
+ this.worldTransform = null!;
123
+ this._bgColor = null!;
114
124
  }
115
125
 
116
126
  /**
117
127
  * Gets the background color of the stage.
118
128
  * @returns {number} The background color.
119
129
  */
120
- public get backgroundColor() {
130
+ public get backgroundColor(): number {
121
131
  return this._bgColor.color;
122
132
  }
123
133
 
124
134
  /**
125
135
  * Sets the background color of the stage.
126
136
  */
127
- public set backgroundColor(value) {
137
+ public set backgroundColor(value: number) {
128
138
  this.setBackgroundColor(value);
129
139
  }
130
140
 
@@ -139,7 +149,7 @@ export class Stage extends DisplayObject {
139
149
  /**
140
150
  * Sets whether texture smoothing is enabled.
141
151
  */
142
- public set smoothed(value) {
152
+ public set smoothed(value: boolean) {
143
153
  globalThis.PhaserRegistry.TEXTURE_SCALE_MODE = value ? SCALE_LINEAR : SCALE_NEAREST;
144
154
  }
145
155
  }
@@ -268,7 +268,7 @@ export class Time {
268
268
  /**
269
269
  * Sets the desired frames per second.
270
270
  */
271
- public set desiredFps(value) {
271
+ public set desiredFps(value: number) {
272
272
  this._desiredFps = value;
273
273
  this.desiredFpsMult = 1 / value;
274
274
  }
@@ -10,37 +10,37 @@ const createTimer = (startTime = 0): Timer => {
10
10
  return timer;
11
11
  };
12
12
 
13
- describe('Timer', () => {
14
- describe('start', () => {
15
- it('rebases every queued event onto the start time', () => {
13
+ describe('Timer', (): void => {
14
+ describe('start', (): void => {
15
+ it('rebases every queued event onto the start time', (): void => {
16
16
  const timer = createTimer(1000);
17
- timer.add(100, () => undefined);
18
- timer.add(300, () => undefined);
17
+ timer.add(100, (): undefined => undefined);
18
+ timer.add(300, (): undefined => undefined);
19
19
  timer.start();
20
- expect(timer.events.map((event) => event.tick)).toStrictEqual([1100, 1300]);
20
+ expect(timer.events.map((event): number => event.tick)).toStrictEqual([1100, 1300]);
21
21
  });
22
22
 
23
- it('is a no-op once already running', () => {
23
+ it('is a no-op once already running', (): void => {
24
24
  const timer = createTimer(1000);
25
- timer.add(100, () => undefined);
25
+ timer.add(100, (): undefined => undefined);
26
26
  timer.start();
27
- const ticks = timer.events.map((event) => event.tick);
27
+ const ticks = timer.events.map((event): number => event.tick);
28
28
  timer.start(500);
29
- expect(timer.events.map((event) => event.tick)).toStrictEqual(ticks);
29
+ expect(timer.events.map((event): number => event.tick)).toStrictEqual(ticks);
30
30
  });
31
31
  });
32
32
 
33
- describe('order', () => {
34
- it('sorts events by tick and exposes the earliest as nextTick', () => {
33
+ describe('order', (): void => {
34
+ it('sorts events by tick and exposes the earliest as nextTick', (): void => {
35
35
  const timer = createTimer(0);
36
- timer.add(500, () => undefined);
37
- timer.add(100, () => undefined);
38
- timer.add(300, () => undefined);
39
- expect(timer.events.map((event) => event.delay)).toStrictEqual([100, 300, 500]);
36
+ timer.add(500, (): undefined => undefined);
37
+ timer.add(100, (): undefined => undefined);
38
+ timer.add(300, (): undefined => undefined);
39
+ expect(timer.events.map((event): number => event.delay)).toStrictEqual([100, 300, 500]);
40
40
  expect(timer.nextTick).toBe(100);
41
41
  });
42
42
 
43
- it('leaves nextTick untouched when there are no events', () => {
43
+ it('leaves nextTick untouched when there are no events', (): void => {
44
44
  const timer = createTimer(0);
45
45
  timer.nextTick = 42;
46
46
  timer.order();
@@ -48,33 +48,33 @@ describe('Timer', () => {
48
48
  });
49
49
  });
50
50
 
51
- describe('remove', () => {
52
- it('marks a matching event for deletion and reports success', () => {
51
+ describe('remove', (): void => {
52
+ it('marks a matching event for deletion and reports success', (): void => {
53
53
  const timer = createTimer(0);
54
- const event = timer.add(100, () => undefined);
54
+ const event = timer.add(100, (): undefined => undefined);
55
55
  expect(timer.remove(event)).toBe(true);
56
56
  expect(event.pendingDelete).toBe(true);
57
57
  });
58
58
 
59
- it('reports failure for an event it does not hold', () => {
59
+ it('reports failure for an event it does not hold', (): void => {
60
60
  const timer = createTimer(0);
61
- timer.add(100, () => undefined);
62
- const other = createTimer(0).add(100, () => undefined);
61
+ timer.add(100, (): undefined => undefined);
62
+ const other = createTimer(0).add(100, (): undefined => undefined);
63
63
  expect(timer.remove(other)).toBe(false);
64
64
  });
65
65
 
66
- it('reports failure for null without throwing', () => {
66
+ it('reports failure for null without throwing', (): void => {
67
67
  const timer = createTimer(0);
68
- timer.add(100, () => undefined);
68
+ timer.add(100, (): undefined => undefined);
69
69
  expect(timer.remove(null)).toBe(false);
70
70
  });
71
71
  });
72
72
 
73
- describe('clearPendingEvents', () => {
74
- it('drops only the events marked for deletion', () => {
73
+ describe('clearPendingEvents', (): void => {
74
+ it('drops only the events marked for deletion', (): void => {
75
75
  const timer = createTimer(0);
76
- const first = timer.add(100, () => undefined);
77
- const second = timer.add(200, () => undefined);
76
+ const first = timer.add(100, (): undefined => undefined);
77
+ const second = timer.add(200, (): undefined => undefined);
78
78
  timer.remove(first);
79
79
  timer.clearPendingEvents();
80
80
  expect(timer.events).toStrictEqual([second]);
@@ -82,8 +82,8 @@ describe('Timer', () => {
82
82
  });
83
83
  });
84
84
 
85
- describe('update', () => {
86
- it('fires a one-shot event once its tick is reached and marks it spent', () => {
85
+ describe('update', (): void => {
86
+ it('fires a one-shot event once its tick is reached and marks it spent', (): void => {
87
87
  const timer = createTimer(0);
88
88
  const callback = vi.fn();
89
89
  timer.add(100, callback);
@@ -95,7 +95,7 @@ describe('Timer', () => {
95
95
  expect(timer.events[0]?.pendingDelete).toBe(true);
96
96
  });
97
97
 
98
- it('keeps firing a looping event and reschedules its tick', () => {
98
+ it('keeps firing a looping event and reschedules its tick', (): void => {
99
99
  const timer = createTimer(0);
100
100
  const callback = vi.fn();
101
101
  timer.loop(100, callback);
@@ -107,7 +107,7 @@ describe('Timer', () => {
107
107
  expect(timer.events[0]?.pendingDelete).toBe(false);
108
108
  });
109
109
 
110
- it('fires a repeating event exactly repeatCount times', () => {
110
+ it('fires a repeating event exactly repeatCount times', (): void => {
111
111
  const timer = createTimer(0);
112
112
  const callback = vi.fn();
113
113
  timer.repeat(100, 2, callback);
@@ -120,10 +120,10 @@ describe('Timer', () => {
120
120
  expect(timer.expired).toBe(true);
121
121
  });
122
122
 
123
- it('passes the configured context and arguments to the callback', () => {
123
+ it('passes the configured context and arguments to the callback', (): void => {
124
124
  const timer = createTimer(0);
125
125
  const context = { seen: null as unknown };
126
- const callback = vi.fn(function callbackImpl(this: typeof context, value: string) {
126
+ const callback = vi.fn(function callbackImpl(this: typeof context, value: string): void {
127
127
  this.seen = value;
128
128
  });
129
129
  timer.add(100, callback, context, 'payload');
@@ -133,49 +133,49 @@ describe('Timer', () => {
133
133
  expect(context.seen).toBe('payload');
134
134
  });
135
135
 
136
- it('completes and dispatches onComplete once every event is spent', () => {
136
+ it('completes and dispatches onComplete once every event is spent', (): void => {
137
137
  const timer = createTimer(0);
138
138
  const onComplete = vi.fn();
139
139
  timer.onComplete.add(onComplete);
140
- timer.add(100, () => undefined);
140
+ timer.add(100, (): undefined => undefined);
141
141
  timer.start();
142
142
  timer.update(100);
143
143
  expect(timer.expired).toBe(true);
144
144
  expect(onComplete).toHaveBeenCalledTimes(1);
145
145
  });
146
146
 
147
- it('survives a callback that removes every event mid-tick', () => {
147
+ it('survives a callback that removes every event mid-tick', (): void => {
148
148
  const timer = createTimer(0);
149
- timer.add(100, () => {
149
+ timer.add(100, (): void => {
150
150
  timer.events.length = 0;
151
151
  });
152
152
  timer.start();
153
- expect(() => timer.update(100)).not.toThrow();
153
+ expect((): boolean => timer.update(100)).not.toThrow();
154
154
  });
155
155
  });
156
156
 
157
- describe('adjustEvents', () => {
158
- it('shifts pending events forward by the time they missed', () => {
157
+ describe('adjustEvents', (): void => {
158
+ it('shifts pending events forward by the time they missed', (): void => {
159
159
  const timer = createTimer(0);
160
- const event = timer.add(100, () => undefined);
160
+ const event = timer.add(100, (): undefined => undefined);
161
161
  timer.start();
162
162
  timer._now = 5000;
163
163
  timer.adjustEvents(0);
164
164
  expect(event.tick).toBe(5100);
165
165
  });
166
166
 
167
- it('clamps events whose tick already passed to the current time', () => {
167
+ it('clamps events whose tick already passed to the current time', (): void => {
168
168
  const timer = createTimer(0);
169
- const event = timer.add(100, () => undefined);
169
+ const event = timer.add(100, (): undefined => undefined);
170
170
  timer.start();
171
171
  timer._now = 5000;
172
172
  timer.adjustEvents(500);
173
173
  expect(event.tick).toBe(5000);
174
174
  });
175
175
 
176
- it('leaves events marked for deletion alone', () => {
176
+ it('leaves events marked for deletion alone', (): void => {
177
177
  const timer = createTimer(0);
178
- const event = timer.add(100, () => undefined);
178
+ const event = timer.add(100, (): undefined => undefined);
179
179
  timer.start();
180
180
  timer.remove(event);
181
181
  const { tick } = event;
@@ -68,7 +68,7 @@ export class Timer {
68
68
  repeatCount: number,
69
69
  callback: Callback,
70
70
  callbackContext: unknown = null,
71
- args: any = []
71
+ args: unknown[] = []
72
72
  ): TimerEvent {
73
73
  const roundedDelay = Math.round(delay);
74
74
  let tick = roundedDelay;