@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.
- package/dist/index.js +339 -323
- package/dist/index.js.map +1 -1
- package/dist/phaser/core/animation.d.ts +3 -3
- package/dist/phaser/core/animation.d.ts.map +1 -1
- package/dist/phaser/core/animation_manager.d.ts.map +1 -1
- package/dist/phaser/core/animation_parser.d.ts +27 -2
- package/dist/phaser/core/animation_parser.d.ts.map +1 -1
- package/dist/phaser/core/array_set.d.ts +11 -11
- package/dist/phaser/core/array_set.d.ts.map +1 -1
- package/dist/phaser/core/cache.d.ts.map +1 -1
- package/dist/phaser/core/callback.d.ts.map +1 -1
- package/dist/phaser/core/dom.d.ts +125 -19
- package/dist/phaser/core/dom.d.ts.map +1 -1
- package/dist/phaser/core/factory.d.ts +3 -2
- package/dist/phaser/core/factory.d.ts.map +1 -1
- package/dist/phaser/core/input.d.ts +3 -2
- package/dist/phaser/core/input.d.ts.map +1 -1
- package/dist/phaser/core/input_handler.d.ts.map +1 -1
- package/dist/phaser/core/input_mouse.d.ts +5 -1
- package/dist/phaser/core/input_mouse.d.ts.map +1 -1
- package/dist/phaser/core/input_pointer.d.ts +3 -3
- package/dist/phaser/core/input_pointer.d.ts.map +1 -1
- package/dist/phaser/core/input_touch.d.ts +8 -8
- package/dist/phaser/core/input_touch.d.ts.map +1 -1
- package/dist/phaser/core/loader.d.ts +11 -2
- package/dist/phaser/core/loader.d.ts.map +1 -1
- package/dist/phaser/core/loader_parser.d.ts +14 -1
- package/dist/phaser/core/loader_parser.d.ts.map +1 -1
- package/dist/phaser/core/raf.d.ts +1 -1
- package/dist/phaser/core/raf.d.ts.map +1 -1
- package/dist/phaser/core/scale_manager.d.ts.map +1 -1
- package/dist/phaser/core/scene_manager.d.ts.map +1 -1
- package/dist/phaser/core/signal.d.ts.map +1 -1
- package/dist/phaser/core/sound.d.ts.map +1 -1
- package/dist/phaser/core/sound_manager.d.ts +1 -1
- package/dist/phaser/core/sound_manager.d.ts.map +1 -1
- package/dist/phaser/core/stage.d.ts +16 -6
- package/dist/phaser/core/stage.d.ts.map +1 -1
- package/dist/phaser/core/time.d.ts.map +1 -1
- package/dist/phaser/core/timer.d.ts +1 -1
- package/dist/phaser/core/timer.d.ts.map +1 -1
- package/dist/phaser/core/tween.d.ts +13 -5
- package/dist/phaser/core/tween.d.ts.map +1 -1
- package/dist/phaser/core/tween_data.d.ts +9 -7
- package/dist/phaser/core/tween_data.d.ts.map +1 -1
- package/dist/phaser/core/tween_manager.d.ts.map +1 -1
- package/dist/phaser/display/button.d.ts +6 -5
- package/dist/phaser/display/button.d.ts.map +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts +1 -1
- package/dist/phaser/display/canvas/buffer.d.ts.map +1 -1
- package/dist/phaser/display/canvas/masker.d.ts +1 -1
- package/dist/phaser/display/canvas/masker.d.ts.map +1 -1
- package/dist/phaser/display/canvas/pool.d.ts +2 -2
- package/dist/phaser/display/canvas/pool.d.ts.map +1 -1
- package/dist/phaser/display/canvas/renderer.d.ts +9 -8
- package/dist/phaser/display/canvas/renderer.d.ts.map +1 -1
- package/dist/phaser/display/display_object.d.ts +3 -1
- package/dist/phaser/display/display_object.d.ts.map +1 -1
- package/dist/phaser/display/graphics.d.ts +1 -1
- package/dist/phaser/display/graphics.d.ts.map +1 -1
- package/dist/phaser/display/group.d.ts +1 -1
- package/dist/phaser/display/group.d.ts.map +1 -1
- package/dist/phaser/display/image.d.ts +6 -5
- package/dist/phaser/display/image.d.ts.map +1 -1
- package/dist/phaser/display/sprite_util.d.ts +3 -2
- package/dist/phaser/display/sprite_util.d.ts.map +1 -1
- package/dist/phaser/display/text.d.ts +2 -16
- package/dist/phaser/display/text.d.ts.map +1 -1
- package/dist/phaser/display/webgl/abstract_filter.d.ts +14 -8
- package/dist/phaser/display/webgl/abstract_filter.d.ts.map +1 -1
- package/dist/phaser/display/webgl/blend_manager.d.ts +2 -3
- package/dist/phaser/display/webgl/blend_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts +11 -5
- package/dist/phaser/display/webgl/fast_sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_manager.d.ts +6 -4
- package/dist/phaser/display/webgl/filter_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/filter_texture.d.ts +4 -4
- package/dist/phaser/display/webgl/filter_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/graphics.d.ts +2 -2
- package/dist/phaser/display/webgl/graphics.d.ts.map +1 -1
- package/dist/phaser/display/webgl/mask_manager.d.ts +3 -2
- package/dist/phaser/display/webgl/mask_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/render_texture.d.ts +11 -8
- package/dist/phaser/display/webgl/render_texture.d.ts.map +1 -1
- package/dist/phaser/display/webgl/renderer.d.ts +8 -4
- package/dist/phaser/display/webgl/renderer.d.ts.map +1 -1
- package/dist/phaser/display/webgl/shader/normal.d.ts +28 -3
- package/dist/phaser/display/webgl/shader/normal.d.ts.map +1 -1
- package/dist/phaser/display/webgl/sprite_batch.d.ts +6 -5
- package/dist/phaser/display/webgl/sprite_batch.d.ts.map +1 -1
- package/dist/phaser/display/webgl/stencil_manager.d.ts +3 -3
- package/dist/phaser/display/webgl/stencil_manager.d.ts.map +1 -1
- package/dist/phaser/display/webgl/texture_util.d.ts +2 -2
- package/dist/phaser/display/webgl/texture_util.d.ts.map +1 -1
- package/dist/phaser/display/webgl/util.d.ts +1 -1
- package/dist/phaser/display/webgl/util.d.ts.map +1 -1
- package/dist/phaser/geom/circle.d.ts.map +1 -1
- package/dist/phaser/geom/line.d.ts +10 -1
- package/dist/phaser/geom/line.d.ts.map +1 -1
- package/dist/phaser/geom/rectangle.d.ts.map +1 -1
- package/dist/phaser/geom/util/circle.d.ts +2 -1
- package/dist/phaser/geom/util/circle.d.ts.map +1 -1
- package/dist/phaser/geom/util/point.d.ts +1 -1
- package/dist/phaser/geom/util/point.d.ts.map +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts +1 -1
- package/dist/phaser/geom/util/rectangle.d.ts.map +1 -1
- package/dist/phaser/util/math.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/phaser/core/animation.ts +4 -4
- package/src/phaser/core/animation_manager.ts +10 -10
- package/src/phaser/core/animation_parser.ts +30 -24
- package/src/phaser/core/array_set.ts +27 -27
- package/src/phaser/core/cache.test.ts +33 -33
- package/src/phaser/core/cache.ts +3 -3
- package/src/phaser/core/callback.ts +1 -0
- package/src/phaser/core/callback_context.test.ts +8 -8
- package/src/phaser/core/dom.ts +15 -5
- package/src/phaser/core/factory.ts +9 -2
- package/src/phaser/core/frame_data.test.ts +23 -23
- package/src/phaser/core/input.ts +9 -8
- package/src/phaser/core/input_handler.test.ts +18 -18
- package/src/phaser/core/input_handler.ts +1 -1
- package/src/phaser/core/input_mouse.ts +9 -8
- package/src/phaser/core/input_pointer.test.ts +26 -26
- package/src/phaser/core/input_pointer.ts +3 -3
- package/src/phaser/core/input_touch.ts +8 -8
- package/src/phaser/core/loader.test.ts +26 -26
- package/src/phaser/core/loader.ts +25 -25
- package/src/phaser/core/loader_parser.test.ts +16 -16
- package/src/phaser/core/loader_parser.ts +16 -6
- package/src/phaser/core/raf.ts +1 -1
- package/src/phaser/core/registry.test.ts +6 -6
- package/src/phaser/core/scale_manager.ts +2 -2
- package/src/phaser/core/scene_manager.test.ts +30 -30
- package/src/phaser/core/scene_manager.ts +1 -1
- package/src/phaser/core/signal.test.ts +8 -8
- package/src/phaser/core/signal.ts +1 -1
- package/src/phaser/core/signal_dispatch.test.ts +30 -30
- package/src/phaser/core/sound.ts +20 -8
- package/src/phaser/core/sound_manager.ts +6 -6
- package/src/phaser/core/stage.ts +19 -9
- package/src/phaser/core/time.ts +1 -1
- package/src/phaser/core/timer.test.ts +47 -47
- package/src/phaser/core/timer.ts +1 -1
- package/src/phaser/core/tween.ts +28 -25
- package/src/phaser/core/tween_data.test.ts +119 -0
- package/src/phaser/core/tween_data.ts +54 -39
- package/src/phaser/core/tween_easing.test.ts +5 -5
- package/src/phaser/core/tween_manager.ts +2 -2
- package/src/phaser/display/bitmap_text.test.ts +30 -30
- package/src/phaser/display/button.ts +8 -6
- package/src/phaser/display/canvas/buffer.ts +2 -2
- package/src/phaser/display/canvas/masker.ts +1 -1
- package/src/phaser/display/canvas/pool.test.ts +20 -20
- package/src/phaser/display/canvas/pool.ts +3 -3
- package/src/phaser/display/canvas/renderer.ts +12 -11
- package/src/phaser/display/canvas/util.test.ts +25 -25
- package/src/phaser/display/display_object.ts +3 -1
- package/src/phaser/display/graphics.test.ts +70 -20
- package/src/phaser/display/graphics.ts +38 -32
- package/src/phaser/display/group.ts +4 -4
- package/src/phaser/display/image.ts +28 -25
- package/src/phaser/display/sprite_util.ts +3 -2
- package/src/phaser/display/text.test.ts +28 -25
- package/src/phaser/display/text.ts +21 -18
- package/src/phaser/display/webgl/abstract_filter.ts +20 -10
- package/src/phaser/display/webgl/blend_manager.ts +4 -5
- package/src/phaser/display/webgl/earcut.test.ts +20 -20
- package/src/phaser/display/webgl/fast_sprite_batch.ts +21 -16
- package/src/phaser/display/webgl/filter_manager.ts +7 -4
- package/src/phaser/display/webgl/filter_texture.ts +5 -5
- package/src/phaser/display/webgl/graphics.ts +2 -2
- package/src/phaser/display/webgl/mask_manager.ts +9 -14
- package/src/phaser/display/webgl/render_texture.ts +15 -14
- package/src/phaser/display/webgl/renderer.ts +7 -6
- package/src/phaser/display/webgl/shader/normal.ts +41 -31
- package/src/phaser/display/webgl/shader/shader.test.ts +24 -24
- package/src/phaser/display/webgl/shader_manager.test.ts +18 -18
- package/src/phaser/display/webgl/sprite_batch.ts +8 -8
- package/src/phaser/display/webgl/stencil_manager.ts +4 -4
- package/src/phaser/display/webgl/texture_util.ts +2 -2
- package/src/phaser/display/webgl/util.ts +1 -1
- package/src/phaser/geom/circle.test.ts +38 -38
- package/src/phaser/geom/circle.ts +7 -7
- package/src/phaser/geom/ellipse.test.ts +12 -12
- package/src/phaser/geom/line.test.ts +15 -15
- package/src/phaser/geom/line.ts +5 -2
- package/src/phaser/geom/matrix.test.ts +31 -31
- package/src/phaser/geom/point.test.ts +31 -31
- package/src/phaser/geom/polygon.test.ts +27 -27
- package/src/phaser/geom/rectangle.test.ts +87 -87
- package/src/phaser/geom/rectangle.ts +11 -11
- package/src/phaser/geom/rounded_rectangle.test.ts +9 -9
- package/src/phaser/geom/util/circle.test.ts +5 -5
- package/src/phaser/geom/util/circle.ts +2 -1
- package/src/phaser/geom/util/ellipse.test.ts +2 -2
- package/src/phaser/geom/util/line.test.ts +2 -2
- package/src/phaser/geom/util/matrix.test.ts +4 -4
- package/src/phaser/geom/util/point.test.ts +2 -2
- package/src/phaser/geom/util/point.ts +1 -1
- package/src/phaser/geom/util/polygon.test.ts +2 -2
- package/src/phaser/geom/util/rectangle.test.ts +2 -2
- package/src/phaser/geom/util/rectangle.ts +1 -1
- package/src/phaser/geom/util/rounded_rectangle.test.ts +2 -2
- package/src/phaser/util/math.test.ts +41 -41
- 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());
|
package/src/phaser/core/sound.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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) {
|
package/src/phaser/core/stage.ts
CHANGED
|
@@ -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:
|
|
10
|
-
declare public worldTransform:
|
|
11
|
-
public currentRenderOrderID!:
|
|
12
|
-
public _bgColor!:
|
|
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
|
}
|
package/src/phaser/core/time.ts
CHANGED
|
@@ -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;
|
package/src/phaser/core/timer.ts
CHANGED