@vpmedia/phaser 1.66.0 → 1.67.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @vpmedia/phaser
2
2
 
3
- [![npm version](https://badge.fury.io/js/@vpmedia%2Fphaser.svg?v=1.66.0)](https://badge.fury.io/js/@vpmedia%2Fphaser)
3
+ [![npm version](https://badge.fury.io/js/@vpmedia%2Fphaser.svg?v=1.67.0)](https://badge.fury.io/js/@vpmedia%2Fphaser)
4
4
  [![Node.js CI](https://github.com/vpmedia/phaser/actions/workflows/ci.yml/badge.svg)](https://github.com/vpmedia/phaser/actions/workflows/ci.yml)
5
5
 
6
6
  @vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2.
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <coverage generated="1697671786546" clover="3.2.0">
3
- <project timestamp="1697671786546" name="All files">
2
+ <coverage generated="1732132319500" clover="3.2.0">
3
+ <project timestamp="1732132319500" name="All files">
4
4
  <metrics statements="0" coveredstatements="0" conditionals="0" coveredconditionals="0" methods="0" coveredmethods="0" elements="0" coveredelements="0" complexity="0" loc="0" ncloc="0" packages="0" files="0" classes="0"/>
5
5
  </project>
6
6
  </coverage>
@@ -57,7 +57,7 @@
57
57
  <template id="filterTemplate">
58
58
  <div class="quiet">
59
59
  Filter:
60
- <input oninput="onInput()" type="search" id="fileSearch">
60
+ <input type="search" id="fileSearch">
61
61
  </div>
62
62
  </template>
63
63
  </div>
@@ -86,7 +86,7 @@
86
86
  <div class='footer quiet pad2 space-top1 center small'>
87
87
  Code coverage generated by
88
88
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
89
- at 2023-10-18T23:29:46.532Z
89
+ at 2024-11-20T19:51:59.495Z
90
90
  </div>
91
91
  <script src="prettify.js"></script>
92
92
  <script>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vpmedia/phaser",
3
- "version": "1.66.0",
3
+ "version": "1.67.0",
4
4
  "description": "@vpmedia/phaser is the modern ECMAScript port of the popular Phaser game engine v2.6.2",
5
5
  "author": "Andras Csizmadia <andras@vpmedia.hu> (www.vpmedia.hu)",
6
6
  "license": "MIT",
@@ -28,7 +28,7 @@
28
28
  "@types/jest": "^29.5.14",
29
29
  "eslint": "^9.15.0",
30
30
  "eslint-plugin-jsdoc": "^50.5.0",
31
- "eslint-plugin-unicorn": "^56.0.0",
31
+ "eslint-plugin-unicorn": "^56.0.1",
32
32
  "globals": "^15.12.0",
33
33
  "jest": "^29.7.0",
34
34
  "jest-environment-jsdom": "^29.7.0",
@@ -13,7 +13,7 @@ export const SOUND = 3;
13
13
  export const TEXT = 4;
14
14
  export const BITMAPDATA = 5;
15
15
  export const BITMAPFONT = 6;
16
- export const JSON = 7;
16
+ export const JSONDATA = 7;
17
17
  export const XML = 8;
18
18
  export const RENDER_TEXTURE = 9;
19
19
 
@@ -49,7 +49,7 @@ export class Cache {
49
49
  this._cacheMap[TEXT] = this._cache.text;
50
50
  this._cacheMap[BITMAPDATA] = this._cache.bitmapData;
51
51
  this._cacheMap[BITMAPFONT] = this._cache.bitmapFont;
52
- this._cacheMap[JSON] = this._cache.json;
52
+ this._cacheMap[JSONDATA] = this._cache.json;
53
53
  this._cacheMap[XML] = this._cache.xml;
54
54
  this._cacheMap[RENDER_TEXTURE] = this._cache.renderTexture;
55
55
  this.addDefaultImage();
@@ -138,7 +138,6 @@ export class Cache {
138
138
  data,
139
139
  isDecoding: false,
140
140
  decoded: false,
141
- locked: this.game.sound.isLocked,
142
141
  };
143
142
  this._resolveURL(url, this._cache.sound[key]);
144
143
  }
@@ -204,32 +203,6 @@ export class Cache {
204
203
 
205
204
  // SOUND
206
205
 
207
- /**
208
- * TBD.
209
- * @param {string} key - TBD.
210
- */
211
- reloadSound(key) {
212
- const scope = this;
213
- const sound = this.getSound(key);
214
- if (sound) {
215
- sound.data.src = sound.url;
216
- sound.data.addEventListener('canplaythrough', () => scope.reloadSoundComplete(key), false);
217
- sound.data.load();
218
- }
219
- }
220
-
221
- /**
222
- * TBD.
223
- * @param {string} key - TBD.
224
- */
225
- reloadSoundComplete(key) {
226
- const sound = this.getSound(key);
227
- if (sound) {
228
- sound.locked = false;
229
- this.onSoundUnlock.dispatch(key);
230
- }
231
- }
232
-
233
206
  /**
234
207
  * TBD.
235
208
  * @param {string} key - TBD.
@@ -246,7 +219,7 @@ export class Cache {
246
219
  /**
247
220
  * TBD.
248
221
  * @param {string} key - TBD.
249
- * @param {object} data - TBD.
222
+ * @param {AudioBuffer} data - TBD.
250
223
  */
251
224
  decodedSound(key, data) {
252
225
  const sound = this.getSound(key);
@@ -377,7 +350,7 @@ export class Cache {
377
350
  * @returns {boolean} TBD.
378
351
  */
379
352
  checkJSONKey(key) {
380
- return this.checkKey(JSON, key);
353
+ return this.checkKey(JSONDATA, key);
381
354
  }
382
355
 
383
356
  /**
@@ -496,7 +469,7 @@ export class Cache {
496
469
  * @returns {object} TBD.
497
470
  */
498
471
  getJSON(key, isClone = false) {
499
- const data = this.getItem(key, JSON, 'getJSON', 'data');
472
+ const data = this.getItem(key, JSONDATA, 'getJSON', 'data');
500
473
  return isClone ? JSON.parse(JSON.stringify(data)) : data;
501
474
  }
502
475
 
@@ -64,46 +64,6 @@ export class Device {
64
64
  * @type {boolean}
65
65
  */
66
66
  this.safari = false;
67
- /**
68
- * @type {boolean}
69
- */
70
- this.silk = false;
71
- /**
72
- * @type {boolean}
73
- */
74
- this.ogg = false;
75
- /**
76
- * @type {boolean}
77
- */
78
- this.opus = false;
79
- /**
80
- * @type {boolean}
81
- */
82
- this.mp3 = false;
83
- /**
84
- * @type {boolean}
85
- */
86
- this.wav = false;
87
- /**
88
- * @type {boolean}
89
- */
90
- this.m4a = false;
91
- /**
92
- * @type {boolean}
93
- */
94
- this.webm = false;
95
- /**
96
- * @type {boolean}
97
- */
98
- this.dolby = false;
99
- /**
100
- * @type {boolean}
101
- */
102
- this.avif = false;
103
- /**
104
- * @type {boolean}
105
- */
106
- this.webp = false;
107
67
  /**
108
68
  * @type {boolean}
109
69
  */
@@ -120,5 +80,13 @@ export class Device {
120
80
  * @type {boolean}
121
81
  */
122
82
  this.fullscreenKeyboard = false;
83
+ /**
84
+ * @type {{[key: string]: boolean}}
85
+ */
86
+ this.supportedAudioFormats = {};
87
+ /**
88
+ * @type {{[key: string]: boolean}}
89
+ */
90
+ this.supportedImageFormats = {};
123
91
  }
124
92
  }
@@ -1,5 +1,8 @@
1
+ import { Logger } from '@vpmedia/simplify';
1
2
  import { Device } from './device.js';
2
3
 
4
+ const logger = new Logger('device');
5
+
3
6
  /**
4
7
  * TBD.
5
8
  * @param {Device} device - TBD.
@@ -7,22 +10,7 @@ import { Device } from './device.js';
7
10
  * @returns {boolean} TBD.
8
11
  */
9
12
  export function canPlayAudio(device, type) {
10
- if (type === 'mp3' && device.mp3) {
11
- return true;
12
- } else if (type === 'ogg' && (device.ogg || device.opus)) {
13
- return true;
14
- } else if (type === 'm4a' && device.m4a) {
15
- return true;
16
- } else if (type === 'opus' && device.opus) {
17
- return true;
18
- } else if (type === 'wav' && device.wav) {
19
- return true;
20
- } else if (type === 'webm' && device.webm) {
21
- return true;
22
- } else if (type === 'mp4' && device.dolby) {
23
- return true;
24
- }
25
- return false;
13
+ return device.supportedAudioFormats[type] === true;
26
14
  }
27
15
 
28
16
  /**
@@ -53,8 +41,7 @@ export function checkOS(device) {
53
41
  device.windows = true;
54
42
  device.windowsPhone = true;
55
43
  }
56
- const silk = /Silk/.test(ua); // detected in browsers
57
- if (device.windows || device.macOS || (device.linux && !silk) || device.chromeOS) {
44
+ if (device.windows || device.macOS || device.linux || device.chromeOS) {
58
45
  device.desktop = true;
59
46
  }
60
47
  // iOS / Windows Phone / Tablet reset
@@ -144,10 +131,6 @@ export function checkBrowser(device) {
144
131
  } else if (/Safari\/(\d+)/.test(ua) && !device.windowsPhone) {
145
132
  device.safari = true;
146
133
  }
147
- // Silk gets its own if clause because its ua also contains 'Safari'
148
- if (/Silk/.test(ua)) {
149
- device.silk = true;
150
- }
151
134
  }
152
135
 
153
136
  /**
@@ -161,11 +144,30 @@ export const canPlayType = (audioElement, type) => {
161
144
  const canPlayResult = audioElement.canPlayType(type);
162
145
  return canPlayResult === 'maybe' || canPlayResult === 'probably';
163
146
  } catch (error) {
164
- console.error(`canPlayType error with type: ${type}`, error);
147
+ const typedError = error instanceof Error ? error : new Error(String(error));
148
+ logger.exception(`canPlayType error with type: ${type}`, typedError);
165
149
  return false;
166
150
  }
167
151
  };
168
152
 
153
+ /**
154
+ * Check for codec support.
155
+ * @param {string} type - TBD.
156
+ * @returns {boolean} TBD.
157
+ */
158
+ export const isMediaSourceTypeSupported = (type) => {
159
+ if ('MediaSource' in window) {
160
+ try {
161
+ return MediaSource.isTypeSupported(type);
162
+ } catch (error) {
163
+ const typedError = error instanceof Error ? error : new Error(String(error));
164
+ logger.exception(`MediaSource.isTypeSupported error with type: ${type}`, typedError);
165
+ return false;
166
+ }
167
+ }
168
+ return false;
169
+ };
170
+
169
171
  /**
170
172
  * TBD.
171
173
  * @param {Device} device - TBD.
@@ -175,17 +177,23 @@ export const canPlayType = (audioElement, type) => {
175
177
  */
176
178
  export function checkAudio(device) {
177
179
  const audioElement = document.createElement('audio');
178
- if (!audioElement.canPlayType) {
179
- console.error('checkAudio', new Error('Missing canPlayType method in HTMLAudioElement'));
180
- return;
180
+ const formats = [
181
+ { type: 'ogg', codecs: ['audio/ogg; codecs="vorbis"'] },
182
+ { type: 'opus', codecs: ['audio/opus', 'audio/ogg; codecs="opus"'] },
183
+ { type: 'mp3', codecs: ['audio/mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3'] },
184
+ { type: 'wav', codecs: ['audio/wav', 'audio/x-wav'] },
185
+ { type: 'm4a', codecs: ['audio/aac', 'audio/x-m4a'] },
186
+ { type: 'webm', codecs: ['audio/webm'] },
187
+ { type: 'mp4', codecs: ['audio/mp4'] },
188
+ ];
189
+ for (const format of formats) {
190
+ const { type, codecs } = format;
191
+ for (const codec of codecs) {
192
+ if (!device.supportedAudioFormats[type]) {
193
+ device.supportedAudioFormats[type] = isMediaSourceTypeSupported(codec) || canPlayType(audioElement, codec);
194
+ }
195
+ }
181
196
  }
182
- device.ogg = canPlayType(audioElement, 'audio/ogg; codecs="vorbis"');
183
- device.opus = canPlayType(audioElement, 'audio/ogg; codecs="opus"') || canPlayType(audioElement, 'audio/opus;');
184
- device.mp3 = canPlayType(audioElement, 'audio/mpeg;') || canPlayType(audioElement, 'audio/mp3;');
185
- device.wav = canPlayType(audioElement, 'audio/wav; codecs="1"');
186
- device.m4a = canPlayType(audioElement, 'audio/x-m4a;') || canPlayType(audioElement, 'audio/aac;');
187
- device.webm = canPlayType(audioElement, 'audio/webm; codecs="vorbis"');
188
- device.dolby = canPlayType(audioElement, 'audio/mp4; codecs="ec-3"');
189
197
  }
190
198
 
191
199
  /**
@@ -193,26 +201,26 @@ export function checkAudio(device) {
193
201
  * @param {Device} device - TBD.
194
202
  */
195
203
  export function checkImage(device) {
196
- device.avif = false;
197
- device.webp = false;
198
204
  try {
199
205
  const avif = new Image();
200
206
  avif.src =
201
207
  'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=';
202
208
  avif.onload = function () {
203
- device.avif = true;
209
+ device.supportedImageFormats.avif = true;
204
210
  };
205
211
  } catch (error) {
206
- console.error('checkImage error with avif', error);
212
+ const typedError = error instanceof Error ? error : new Error(String(error));
213
+ logger.exception('checkImage error with avif', typedError);
207
214
  }
208
215
  try {
209
216
  const webp = new Image();
210
217
  webp.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
211
218
  webp.onload = function () {
212
- device.webp = true;
219
+ device.supportedImageFormats.webp = true;
213
220
  };
214
221
  } catch (error) {
215
- console.error('checkImage error with webp', error);
222
+ const typedError = error instanceof Error ? error : new Error(String(error));
223
+ logger.exception('checkImage error with webp', typedError);
216
224
  }
217
225
  }
218
226
 
@@ -38,24 +38,26 @@ export class Sound {
38
38
  this.pendingPlayback = false;
39
39
  this.override = false;
40
40
  this.allowMultiple = false;
41
+ /** @type {GainNode} */
41
42
  this.externalNode = null;
43
+ /** @type {GainNode} */
42
44
  this.masterGainNode = null;
45
+ /** @type {GainNode} */
43
46
  this.gainNode = null;
47
+ /** @type {AudioBufferSourceNode} */
44
48
  this._sound = null;
45
49
  this._markedToDelete = false;
46
50
  this._removeFromSoundManager = false;
47
- if (!this.game.sound.noAudio) {
48
- this.context = this.game.sound.context;
49
- this.masterGainNode = this.game.sound.masterGain;
50
- if (this.context.createGain === undefined) {
51
- this.gainNode = this.context.createGainNode();
52
- } else {
53
- this.gainNode = this.context.createGain();
54
- }
55
- this.gainNode.gain.value = volume * this.game.sound.volume;
56
- if (connect) {
57
- this.gainNode.connect(this.masterGainNode);
58
- }
51
+ this.context = this.game.sound.context;
52
+ this.masterGainNode = this.game.sound.masterGain;
53
+ if (this.context.createGain === undefined) {
54
+ this.gainNode = this.context.createGainNode();
55
+ } else {
56
+ this.gainNode = this.context.createGain();
57
+ }
58
+ this.gainNode.gain.value = volume * this.game.sound.volume;
59
+ if (connect) {
60
+ this.gainNode.connect(this.masterGainNode);
59
61
  }
60
62
  this.onPlay = new Signal();
61
63
  this.onPause = new Signal();
@@ -66,14 +68,15 @@ export class Sound {
66
68
  this.onMarkerComplete = new Signal();
67
69
  this.onFadeComplete = new Signal();
68
70
  this._volume = volume;
71
+ /** @type {AudioBuffer} */
69
72
  this._buffer = null;
70
73
  this._muted = false;
71
- this._tempMarker = 0;
74
+ this._tempMarker = '';
72
75
  this._tempPosition = 0;
73
76
  this._tempVolume = 0;
74
77
  this._tempPause = 0;
75
78
  this._muteVolume = 0;
76
- this._tempLoop = 0;
79
+ this._tempLoop = false;
77
80
  this._paused = false;
78
81
  }
79
82
 
@@ -165,34 +168,21 @@ export class Sound {
165
168
  }
166
169
  this.currentTime = this.game.time.time - this.startTime;
167
170
  if (this.currentTime >= this.durationMS) {
168
- if (!this.game.sound.noAudio) {
169
- if (this.loop) {
170
- // won't work with markers, needs to reset the position
171
- this.onLoop.dispatch(this);
172
- // Gets reset by the play function
173
- this.isPlaying = false;
174
- if (this.currentMarker === '') {
175
- this.currentTime = 0;
176
- this.startTime = this.game.time.time;
177
- this.isPlaying = true; // play not called again in this case
178
- } else {
179
- this.onMarkerComplete.dispatch(this.currentMarker, this);
180
- this.play(this.currentMarker, 0, this.volume, true, true);
181
- }
182
- } else if (this.currentMarker !== '') {
183
- // Stop if we're using an audio marker, otherwise we let onended handle it
184
- this.stop();
185
- }
186
- } else if (this.loop) {
171
+ if (this.loop) {
172
+ // won't work with markers, needs to reset the position
187
173
  this.onLoop.dispatch(this);
174
+ // Gets reset by the play function
175
+ this.isPlaying = false;
188
176
  if (this.currentMarker === '') {
189
177
  this.currentTime = 0;
190
178
  this.startTime = this.game.time.time;
179
+ this.isPlaying = true; // play not called again in this case
180
+ } else {
181
+ this.onMarkerComplete.dispatch(this.currentMarker, this);
182
+ this.play(this.currentMarker, 0, this.volume, true, true);
191
183
  }
192
- // Gets reset by the play function
193
- this.isPlaying = false;
194
- this.play(this.currentMarker, 0, this.volume, true, true);
195
- } else {
184
+ } else if (this.currentMarker !== '') {
185
+ // Stop if we're using an audio marker, otherwise we let onended handle it
196
186
  this.stop();
197
187
  }
198
188
  }
@@ -229,17 +219,15 @@ export class Sound {
229
219
  return this;
230
220
  }
231
221
  if (this._sound && this.isPlaying && !this.allowMultiple && (this.override || forceRestart)) {
232
- if (!this.game.sound.noAudio) {
233
- if (this._sound.stop === undefined) {
234
- this._sound.noteOff(0);
235
- } else {
236
- this._sound.stop(0);
237
- }
238
- if (this.externalNode) {
239
- this._sound.disconnect(this.externalNode);
240
- } else if (this.gainNode) {
241
- this._sound.disconnect(this.gainNode);
242
- }
222
+ if (this._sound.stop === undefined) {
223
+ this._sound.noteOff(0);
224
+ } else {
225
+ this._sound.stop(0);
226
+ }
227
+ if (this.externalNode) {
228
+ this._sound.disconnect(this.externalNode);
229
+ } else if (this.gainNode) {
230
+ this._sound.disconnect(this.gainNode);
243
231
  }
244
232
  this.isPlaying = false;
245
233
  }
@@ -289,64 +277,34 @@ export class Sound {
289
277
  this._tempVolume = volume;
290
278
  this._tempLoop = loop;
291
279
  }
292
- if (!this.game.sound.noAudio) {
293
- // Does the sound need decoding?
294
- if (this.game.cache.isSoundDecoded(this.key)) {
295
- this._sound = this.context.createBufferSource();
296
- if (this.externalNode) {
297
- this._sound.connect(this.externalNode);
298
- } else {
299
- this._sound.connect(this.gainNode);
300
- }
301
- this._buffer = this.game.cache.getSoundData(this.key);
302
- this._sound.buffer = this._buffer;
303
- if (this.loop && marker === '') {
304
- this._sound.loop = true;
305
- }
306
- if (!this.loop && marker === '') {
307
- this._sound.onended = this.onEndedHandler.bind(this);
308
- }
309
- this.totalDuration = this._sound.buffer.duration;
310
- if (this.duration === 0) {
311
- this.duration = this.totalDuration;
312
- this.durationMS = Math.ceil(this.totalDuration * 1000);
313
- }
314
- // Useful to cache this somewhere perhaps?
315
- if (this._sound.start === undefined) {
316
- this._sound.noteGrainOn(0, this.position, this.duration);
317
- } else if (this.loop && marker === '') {
318
- this._sound.start(0, 0);
319
- } else {
320
- this._sound.start(0, this.position, this.duration);
321
- }
322
- this.isPlaying = true;
323
- this.startTime = this.game.time.time;
324
- this.currentTime = 0;
325
- this.stopTime = this.startTime + this.durationMS;
326
- this.onPlay.dispatch(this);
280
+ // Does the sound need decoding?
281
+ if (this.game.cache.isSoundDecoded(this.key)) {
282
+ this._sound = this.context.createBufferSource();
283
+ if (this.externalNode) {
284
+ this._sound.connect(this.externalNode);
327
285
  } else {
328
- this.pendingPlayback = true;
329
- if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).isDecoding === false) {
330
- this.game.sound.decode(this.key, this);
331
- }
286
+ this._sound.connect(this.gainNode);
332
287
  }
333
- } else if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).locked) {
334
- this.game.cache.reloadSound(this.key);
335
- this.pendingPlayback = true;
336
- } else if (this._sound && this._sound.readyState === 4) {
337
- this._sound.play();
338
- // This doesn't become available until you call play(), wonderful ...
339
- this.totalDuration = this._sound.duration;
288
+ this._buffer = this.game.cache.getSoundData(this.key);
289
+ this._sound.buffer = this._buffer;
290
+ if (this.loop && marker === '') {
291
+ this._sound.loop = true;
292
+ }
293
+ if (!this.loop && marker === '') {
294
+ this._sound.onended = this.onEndedHandler.bind(this);
295
+ }
296
+ this.totalDuration = this._sound.buffer.duration;
340
297
  if (this.duration === 0) {
341
298
  this.duration = this.totalDuration;
342
- this.durationMS = this.totalDuration * 1000;
299
+ this.durationMS = Math.ceil(this.totalDuration * 1000);
343
300
  }
344
- this._sound.currentTime = this.position;
345
- this._sound.muted = this._muted;
346
- if (this._muted || this.game.sound.mute) {
347
- this._sound.volume = 0;
301
+ // Useful to cache this somewhere perhaps?
302
+ if (this._sound.start === undefined) {
303
+ this._sound.noteGrainOn(0, this.position, this.duration);
304
+ } else if (this.loop && marker === '') {
305
+ this._sound.start(0, 0);
348
306
  } else {
349
- this._sound.volume = this._volume;
307
+ this._sound.start(0, this.position, this.duration);
350
308
  }
351
309
  this.isPlaying = true;
352
310
  this.startTime = this.game.time.time;
@@ -355,6 +313,9 @@ export class Sound {
355
313
  this.onPlay.dispatch(this);
356
314
  } else {
357
315
  this.pendingPlayback = true;
316
+ if (this.game.cache.getSound(this.key) && this.game.cache.getSound(this.key).isDecoding === false) {
317
+ this.game.sound.decode(this.key);
318
+ }
358
319
  }
359
320
  return this;
360
321
  }
@@ -389,30 +350,25 @@ export class Sound {
389
350
  */
390
351
  resume() {
391
352
  if (this.paused && this._sound) {
392
- if (!this.game.sound.noAudio) {
393
- const p = Math.max(0, this.position + this.pausedPosition / 1000);
394
- this._sound = this.context.createBufferSource();
395
- this._sound.buffer = this._buffer;
396
- if (this.externalNode) {
397
- this._sound.connect(this.externalNode);
398
- } else {
399
- this._sound.connect(this.gainNode);
400
- }
401
- if (this.loop) {
402
- this._sound.loop = true;
403
- }
404
- if (!this.loop && this.currentMarker === '') {
405
- this._sound.onended = this.onEndedHandler.bind(this);
406
- }
407
- const duration = this.duration - this.pausedPosition / 1000;
408
- if (this._sound.start === undefined) {
409
- this._sound.noteGrainOn(0, p, duration);
410
- // https://bugs.chromium.org/p/chromium/issues/detail?id=457099
411
- } else if (this.loop && this.game.device.chrome) {
412
- this._sound.start(0, p);
413
- } else {
414
- this._sound.start(0, p, duration);
415
- }
353
+ const p = Math.max(0, this.position + this.pausedPosition / 1000);
354
+ this._sound = this.context.createBufferSource();
355
+ this._sound.buffer = this._buffer;
356
+ if (this.externalNode) {
357
+ this._sound.connect(this.externalNode);
358
+ } else {
359
+ this._sound.connect(this.gainNode);
360
+ }
361
+ if (this.loop) {
362
+ this._sound.loop = true;
363
+ }
364
+ if (!this.loop && this.currentMarker === '') {
365
+ this._sound.onended = this.onEndedHandler.bind(this);
366
+ }
367
+ const duration = this.duration - this.pausedPosition / 1000;
368
+ if (this._sound.start === undefined) {
369
+ this._sound.noteGrainOn(0, p, duration);
370
+ } else {
371
+ this._sound.start(0, p, duration);
416
372
  }
417
373
  this.isPlaying = true;
418
374
  this.paused = false;
@@ -426,17 +382,15 @@ export class Sound {
426
382
  */
427
383
  stop() {
428
384
  if (this.isPlaying && this._sound) {
429
- if (!this.game.sound.noAudio) {
430
- if (this._sound.stop === undefined) {
431
- this._sound.noteOff(0);
432
- } else {
433
- this._sound.stop(0);
434
- }
435
- if (this.externalNode) {
436
- this._sound.disconnect(this.externalNode);
437
- } else if (this.gainNode) {
438
- this._sound.disconnect(this.gainNode);
439
- }
385
+ if (this._sound.stop === undefined) {
386
+ this._sound.noteOff(0);
387
+ } else {
388
+ this._sound.stop(0);
389
+ }
390
+ if (this.externalNode) {
391
+ this._sound.disconnect(this.externalNode);
392
+ } else if (this.gainNode) {
393
+ this._sound.disconnect(this.gainNode);
440
394
  }
441
395
  }
442
396
  this.pendingPlayback = false;
@@ -543,14 +497,10 @@ export class Sound {
543
497
  if (value) {
544
498
  this._muted = true;
545
499
  this._muteVolume = this._tempVolume;
546
- if (!this.game.sound.noAudio) {
547
- this.gainNode.gain.value = 0;
548
- }
500
+ this.gainNode.gain.value = 0;
549
501
  } else {
550
502
  this._muted = false;
551
- if (!this.game.sound.noAudio) {
552
- this.gainNode.gain.value = this._muteVolume;
553
- }
503
+ this.gainNode.gain.value = this._muteVolume;
554
504
  }
555
505
  this.onMute.dispatch(this);
556
506
  }
@@ -573,8 +523,6 @@ export class Sound {
573
523
  }
574
524
  this._tempVolume = value;
575
525
  this._volume = value;
576
- if (!this.game.sound.noAudio) {
577
- this.gainNode.gain.value = value;
578
- }
526
+ this.gainNode.gain.value = value;
579
527
  }
580
528
  }
@@ -41,11 +41,10 @@ export class SoundManager {
41
41
  boot() {
42
42
  if (this.game.config.isForceDisabledAudio) {
43
43
  this.noAudio = true;
44
+ this.isLocked = false;
44
45
  return;
45
46
  }
46
- if (window.PhaserRegistry && window.PhaserRegistry.audioContext) {
47
- this.context = window.PhaserRegistry.audioContext;
48
- } else if (window.AudioContext) {
47
+ if (window.AudioContext) {
49
48
  try {
50
49
  this.context = new window.AudioContext();
51
50
  } catch (error) {
@@ -64,10 +63,7 @@ export class SoundManager {
64
63
  this.game.exceptionHandler(error);
65
64
  }
66
65
  }
67
- if (
68
- this.context === null ||
69
- (this.context && this.context.createGain === undefined && this.context.createGainNode === undefined)
70
- ) {
66
+ if (!this.context) {
71
67
  this.game.exceptionHandler(new Error('Error creating AudioContext'));
72
68
  this.noAudio = true;
73
69
  return;
@@ -251,8 +247,8 @@ export class SoundManager {
251
247
  this.game.cache.decodedSound(key, buffer);
252
248
  })
253
249
  .catch((error) => {
254
- this.game.exceptionHandler(error, { 'asset.key': key });
255
- const typedError = error instanceof Error ? error : new Error(error);
250
+ const typedError = error instanceof Error ? error : new Error(String(error));
251
+ this.game.exceptionHandler(typedError, { 'asset.key': key });
256
252
  if (typedError.name === 'InvalidStateError') {
257
253
  addPageLifecycleCallback(PAGE_LIFECYCLE_STATE_ACTIVE, () => {
258
254
  this.decode(key);
@@ -438,12 +434,8 @@ export class SoundManager {
438
434
  }
439
435
  this._sounds = [];
440
436
  this.onChange.dispose();
441
- if (this.context) {
442
- if (window.PhaserRegistry) {
443
- window.PhaserRegistry.audioContext = this.context;
444
- } else if (this.context.close) {
445
- this.context.close();
446
- }
437
+ if (this.context?.close) {
438
+ this.context.close();
447
439
  }
448
440
  }
449
441
 
@@ -5,7 +5,7 @@ export const SOUND: 3;
5
5
  export const TEXT: 4;
6
6
  export const BITMAPDATA: 5;
7
7
  export const BITMAPFONT: 6;
8
- export const JSON: 7;
8
+ export const JSONDATA: 7;
9
9
  export const XML: 8;
10
10
  export const RENDER_TEXTURE: 9;
11
11
  export class Cache {
@@ -96,16 +96,6 @@ export class Cache {
96
96
  * @param {XMLDocument} data - TBD.
97
97
  */
98
98
  addXML(key: string, url: string, data: XMLDocument): void;
99
- /**
100
- * TBD.
101
- * @param {string} key - TBD.
102
- */
103
- reloadSound(key: string): void;
104
- /**
105
- * TBD.
106
- * @param {string} key - TBD.
107
- */
108
- reloadSoundComplete(key: string): void;
109
99
  /**
110
100
  * TBD.
111
101
  * @param {string} key - TBD.
@@ -116,9 +106,9 @@ export class Cache {
116
106
  /**
117
107
  * TBD.
118
108
  * @param {string} key - TBD.
119
- * @param {object} data - TBD.
109
+ * @param {AudioBuffer} data - TBD.
120
110
  */
121
- decodedSound(key: string, data: object): void;
111
+ decodedSound(key: string, data: AudioBuffer): void;
122
112
  /**
123
113
  * TBD.
124
114
  * @param {string} key - TBD.
@@ -1 +1 @@
1
- {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/cache.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/cache.js"],"names":[],"mappings":"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"}
@@ -60,46 +60,6 @@ export class Device {
60
60
  * @type {boolean}
61
61
  */
62
62
  safari: boolean;
63
- /**
64
- * @type {boolean}
65
- */
66
- silk: boolean;
67
- /**
68
- * @type {boolean}
69
- */
70
- ogg: boolean;
71
- /**
72
- * @type {boolean}
73
- */
74
- opus: boolean;
75
- /**
76
- * @type {boolean}
77
- */
78
- mp3: boolean;
79
- /**
80
- * @type {boolean}
81
- */
82
- wav: boolean;
83
- /**
84
- * @type {boolean}
85
- */
86
- m4a: boolean;
87
- /**
88
- * @type {boolean}
89
- */
90
- webm: boolean;
91
- /**
92
- * @type {boolean}
93
- */
94
- dolby: boolean;
95
- /**
96
- * @type {boolean}
97
- */
98
- avif: boolean;
99
- /**
100
- * @type {boolean}
101
- */
102
- webp: boolean;
103
63
  /**
104
64
  * @type {boolean}
105
65
  */
@@ -116,5 +76,17 @@ export class Device {
116
76
  * @type {boolean}
117
77
  */
118
78
  fullscreenKeyboard: boolean;
79
+ /**
80
+ * @type {{[key: string]: boolean}}
81
+ */
82
+ supportedAudioFormats: {
83
+ [key: string]: boolean;
84
+ };
85
+ /**
86
+ * @type {{[key: string]: boolean}}
87
+ */
88
+ supportedImageFormats: {
89
+ [key: string]: boolean;
90
+ };
119
91
  }
120
92
  //# sourceMappingURL=device.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/device.js"],"names":[],"mappings":"AAAA;IAKI;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,UAFU,OAAO,CAEI;IACrB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,cAFU,OAAO,CAEQ;IACzB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,WAFU,OAAO,CAEK;IACtB,gBAAsB;IACtB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,YAFU,OAAO,CAEM;IACvB;;OAEG;IACH,mBAFU,MAAM,CAEW;IAC3B;;OAEG;IACH,kBAFU,MAAM,CAEU;IAC1B;;OAEG;IACH,oBAFU,OAAO,CAEc;CAElC"}
1
+ {"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/device.js"],"names":[],"mappings":"AAAA;IAKI;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,KAFU,OAAO,CAED;IAChB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,UAFU,OAAO,CAEI;IACrB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,cAFU,OAAO,CAEQ;IACzB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,OAFU,OAAO,CAEC;IAClB;;OAEG;IACH,WAFU,OAAO,CAEK;IACtB,gBAAsB;IACtB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,SAFU,OAAO,CAEG;IACpB;;OAEG;IACH,MAFU,OAAO,CAEA;IACjB;;OAEG;IACH,QAFU,OAAO,CAEE;IACnB;;OAEG;IACH,YAFU,OAAO,CAEM;IACvB;;OAEG;IACH,mBAFU,MAAM,CAEW;IAC3B;;OAEG;IACH,kBAFU,MAAM,CAEU;IAC1B;;OAEG;IACH,oBAFU,OAAO,CAEc;IAC/B;;OAEG;IACH,uBAFU;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAEH;IAC/B;;OAEG;IACH,uBAFU;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAEH;CAElC"}
@@ -49,5 +49,6 @@ export function initialize(device: Device): void;
49
49
  */
50
50
  export function createDevice(): Device;
51
51
  export function canPlayType(audioElement: HTMLAudioElement, type: string): boolean;
52
+ export function isMediaSourceTypeSupported(type: string): boolean;
52
53
  import { Device } from './device.js';
53
54
  //# sourceMappingURL=device_util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"device_util.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/device_util.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,qCAJW,MAAM,QACN,MAAM,GACJ,OAAO,CAmBnB;AAED;;;GAGG;AACH,gCAFW,MAAM,QAkChB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAgBhB;AAED;;;GAGG;AACH,+CAFW,MAAM,QA0ChB;AAED;;;GAGG;AACH,qCAFW,MAAM,QAiBhB;AAkBD;;;;;;GAMG;AACH,mCALW,MAAM,QAkBhB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAwBhB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAShB;AAED;;;GAGG;AACH,gCAFa,MAAM,CAIlB;AA/EM,0CAJI,gBAAgB,QAChB,MAAM,GACJ,OAAO,CAUnB;uBAtKsB,aAAa"}
1
+ {"version":3,"file":"device_util.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/device_util.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,qCAJW,MAAM,QACN,MAAM,GACJ,OAAO,CAInB;AAED;;;GAGG;AACH,gCAFW,MAAM,QAiChB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAgBhB;AAED;;;GAGG;AACH,+CAFW,MAAM,QA0ChB;AAED;;;GAGG;AACH,qCAFW,MAAM,QAahB;AAqCD;;;;;;GAMG;AACH,mCALW,MAAM,QAwBhB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAwBhB;AAED;;;GAGG;AACH,mCAFW,MAAM,QAShB;AAED;;;GAGG;AACH,gCAFa,MAAM,CAIlB;AAxGM,0CAJI,gBAAgB,QAChB,MAAM,GACJ,OAAO,CAWnB;AAOM,iDAHI,MAAM,GACJ,OAAO,CAanB;uBAvKsB,aAAa"}
@@ -31,10 +31,14 @@ export class Sound {
31
31
  pendingPlayback: boolean;
32
32
  override: boolean;
33
33
  allowMultiple: boolean;
34
- externalNode: any;
35
- masterGainNode: any;
36
- gainNode: any;
37
- _sound: any;
34
+ /** @type {GainNode} */
35
+ externalNode: GainNode;
36
+ /** @type {GainNode} */
37
+ masterGainNode: GainNode;
38
+ /** @type {GainNode} */
39
+ gainNode: GainNode;
40
+ /** @type {AudioBufferSourceNode} */
41
+ _sound: AudioBufferSourceNode;
38
42
  _markedToDelete: boolean;
39
43
  _removeFromSoundManager: boolean;
40
44
  onPlay: Signal;
@@ -46,14 +50,15 @@ export class Sound {
46
50
  onMarkerComplete: Signal;
47
51
  onFadeComplete: Signal;
48
52
  _volume: number;
49
- _buffer: any;
53
+ /** @type {AudioBuffer} */
54
+ _buffer: AudioBuffer;
50
55
  _muted: boolean;
51
- _tempMarker: number;
56
+ _tempMarker: string;
52
57
  _tempPosition: number;
53
58
  _tempVolume: number;
54
59
  _tempPause: number;
55
60
  _muteVolume: number;
56
- _tempLoop: number;
61
+ _tempLoop: boolean;
57
62
  _paused: boolean;
58
63
  /**
59
64
  * TBD.
@@ -1 +1 @@
1
- {"version":3,"file":"sound.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound.js"],"names":[],"mappings":"AAEA;IACE;;;;;;;OAOG;IACH,kBANW,OAAO,WAAW,EAAE,IAAI,OACxB,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,EAoEjB;IA5DC,+BAAgB;IAChB,aAAe;IACf,YAAc;IACd,cAAgB;IAChB,YAAiB;IACjB,sBAAmB;IACnB,kBAAqB;IACrB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,mBAAsB;IACtB,sBAAuB;IACvB,sCAAqB;IACrB,yBAA4B;IAC5B,kBAAqB;IACrB,uBAA0B;IAC1B,kBAAwB;IACxB,oBAA0B;IAC1B,cAAoB;IACpB,YAAkB;IAClB,yBAA4B;IAC5B,iCAAoC;IAcpC,eAA0B;IAC1B,gBAA2B;IAC3B,iBAA4B;IAC5B,eAA0B;IAC1B,eAA0B;IAC1B,eAA0B;IAC1B,yBAAoC;IACpC,uBAAkC;IAClC,gBAAqB;IACrB,aAAmB;IACnB,gBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,kBAAkB;IAClB,iBAAoB;IAGtB;;;OAGG;IACH,sBAFW,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,gBANW,MAAM,SACN,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAYjB;IAED;;;OAGG;IACH,mBAFW,MAAM,QAIhB;IAED;;OAEG;IACH,uBA2BC;IAED;;OAEG;IACH,eA6CC;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,KAAK,CAIjB;IAED;;;;;;;;OAQG;IACH,aAPW,MAAM,YACN,MAAM,UACN,MAAM,QACN,OAAO,gBACP,OAAO,GACL,KAAK,CA+IjB;IA8MD;;OAEG;IACH,0BAUC;IArBD;;;OAGG;IACH,qBAEC;IA1MD;;;;;;OAMG;IACH,iBALW,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAIjB;IAED;;OAEG;IACH,cASC;IAED;;OAEG;IACH,eAgCC;IAED;;OAEG;IACH,aA4BC;IAED;;;;;OAKG;IACH,iBAJW,MAAM,SACN,OAAO,WACP,MAAM,QAQhB;IAED;;;OAGG;IACH,kBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,WACN,MAAM,QAQhB;IAED;;OAEG;IACH,qBAKC;IAED;;;OAGG;IACH,iBAFW,OAAO,QAqBjB;IAUD;;OAEG;IACH,yBAkBC;IA7BD;;;OAGG;IACH,oBAEC;CA+CF;uBAnkBsB,aAAa"}
1
+ {"version":3,"file":"sound.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound.js"],"names":[],"mappings":"AAEA;IACE;;;;;;;OAOG;IACH,kBANW,OAAO,WAAW,EAAE,IAAI,OACxB,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,EAuEjB;IA/DC,+BAAgB;IAChB,aAAe;IACf,YAAc;IACd,cAAgB;IAChB,YAAiB;IACjB,sBAAmB;IACnB,kBAAqB;IACrB,sBAAsB;IACtB,kBAAkB;IAClB,oBAAoB;IACpB,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,iBAAiB;IACjB,gBAAmB;IACnB,uBAAuB;IACvB,mBAAmB;IACnB,mBAAsB;IACtB,sBAAuB;IACvB,sCAAqB;IACrB,yBAA4B;IAC5B,kBAAqB;IACrB,uBAA0B;IAC1B,uBAAuB;IACvB,cADW,QAAQ,CACK;IACxB,uBAAuB;IACvB,gBADW,QAAQ,CACO;IAC1B,uBAAuB;IACvB,UADW,QAAQ,CACC;IACpB,oCAAoC;IACpC,QADW,qBAAqB,CACd;IAClB,yBAA4B;IAC5B,iCAAoC;IAYpC,eAA0B;IAC1B,gBAA2B;IAC3B,iBAA4B;IAC5B,eAA0B;IAC1B,eAA0B;IAC1B,eAA0B;IAC1B,yBAAoC;IACpC,uBAAkC;IAClC,gBAAqB;IACrB,0BAA0B;IAC1B,SADW,WAAW,CACH;IACnB,gBAAmB;IACnB,oBAAqB;IACrB,sBAAsB;IACtB,oBAAoB;IACpB,mBAAmB;IACnB,oBAAoB;IACpB,mBAAsB;IACtB,iBAAoB;IAGtB;;;OAGG;IACH,sBAFW,MAAM,QAOhB;IAED;;;;;;;OAOG;IACH,gBANW,MAAM,SACN,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAYjB;IAED;;;OAGG;IACH,mBAFW,MAAM,QAIhB;IAED;;OAEG;IACH,uBA2BC;IAED;;OAEG;IACH,eAgCC;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,KAAK,CAIjB;IAED;;;;;;;;OAQG;IACH,aAPW,MAAM,YACN,MAAM,UACN,MAAM,QACN,OAAO,gBACP,OAAO,GACL,KAAK,CAkHjB;IAmMD;;OAEG;IACH,0BAQC;IAnBD;;;OAGG;IACH,qBAEC;IA/LD;;;;;;OAMG;IACH,iBALW,MAAM,aACN,MAAM,WACN,MAAM,SACN,OAAO,QAIjB;IAED;;OAEG;IACH,cASC;IAED;;OAEG;IACH,eA2BC;IAED;;OAEG;IACH,aA0BC;IAED;;;;;OAKG;IACH,iBAJW,MAAM,SACN,OAAO,WACP,MAAM,QAQhB;IAED;;;OAGG;IACH,kBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,WACN,MAAM,QAQhB;IAED;;OAEG;IACH,qBAKC;IAED;;;OAGG;IACH,iBAFW,OAAO,QAqBjB;IAUD;;OAEG;IACH,yBAcC;IAzBD;;;OAGG;IACH,oBAEC;CAyCF;uBA/gBsB,aAAa"}
@@ -1 +1 @@
1
- {"version":3,"file":"sound_manager.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound_manager.js"],"names":[],"mappings":"AAWA;IACE;;;OAGG;IACH,kBAFW,OAAO,WAAW,EAAE,IAAI,EAqBlC;IAlBC,+BAAgB;IAChB,iBAA4B;IAC5B,2BAA2B;IAC3B,SADW,YAAY,CACJ;IACnB,oBAAoB;IACpB,iBAAoB;IACpB,yBAA2B;IAC3B,kBAAqB;IACrB,qBAAuB;IACvB,oBAAuB;IACvB,gBAAmB;IACnB,mBAAyB;IACzB,gBAAgB;IAChB,eAAiB;IACjB,qBAAgC;IAChC,mBAAsB;IACtB,yBAA0B;IAC1B,mBAAyB;IAG3B;;OAEG;IACH,aAiDC;IAbG,gBAA+C;IAenD;;OAEG;IACH,kCAIE;IAEF;;OAEG;IACH,iCAME;IAEF;;OAEG;IACH,gCAUE;IAEF;;OAEG;IACH,8BASE;IAEF;;OAEG;IACH,iCASE;IAEF;;;OAGG;IACH,uBAFW,KAAK,UAsCd;IAEF;;OAEG;IACH,gBASC;IAED;;OAEG;IACH,iBASC;IAED;;OAEG;IACH,kBASC;IAED;;;OAGG;IACH,YAFW,MAAM,QAuBhB;IAED;;;;;OAKG;IACH,0BAJW,KAAK,EAAE,GAAC,MAAM,EAAE,uCAEhB,MAAM,QA0BhB;IAED;;OAEG;IACH,eAqBC;IAED;;;;;;;OAOG;IACH,SANW,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,GACL,KAAK,CAMjB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,WAAW,CAIvB;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAanB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,MAAM,CAclB;IAED;;;;;;OAMG;IACH,UALW,MAAM,WACN,MAAM,SACN,OAAO,GACL,KAAK,CASjB;IAED;;OAEG;IACH,gBAUC;IAJG,iBAA6C;IAMjD;;OAEG;IACH,kBASC;IAED;;OAEG;IACH,gBAgBC;IAUD;;OAEG;IACH,yBAcC;IAzBD;;;OAGG;IACH,oBAEC;IA6BD;;OAEG;IACH,0BAYC;IAvBD;;;OAGG;IACH,qBAEC;CAkBF;uBA7esB,aAAa;yBADX,gBAAgB;sBAEnB,YAAY;4BACN,mBAAmB"}
1
+ {"version":3,"file":"sound_manager.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/sound_manager.js"],"names":[],"mappings":"AAWA;IACE;;;OAGG;IACH,kBAFW,OAAO,WAAW,EAAE,IAAI,EAqBlC;IAlBC,+BAAgB;IAChB,iBAA4B;IAC5B,2BAA2B;IAC3B,SADW,YAAY,CACJ;IACnB,oBAAoB;IACpB,iBAAoB;IACpB,yBAA2B;IAC3B,kBAAqB;IACrB,qBAAuB;IACvB,oBAAuB;IACvB,gBAAmB;IACnB,mBAAyB;IACzB,gBAAgB;IAChB,eAAiB;IACjB,qBAAgC;IAChC,mBAAsB;IACtB,yBAA0B;IAC1B,mBAAyB;IAG3B;;OAEG;IACH,aA6CC;IAbG,gBAA+C;IAenD;;OAEG;IACH,kCAIE;IAEF;;OAEG;IACH,iCAME;IAEF;;OAEG;IACH,gCAUE;IAEF;;OAEG;IACH,8BASE;IAEF;;OAEG;IACH,iCASE;IAEF;;;OAGG;IACH,uBAFW,KAAK,UAsCd;IAEF;;OAEG;IACH,gBASC;IAED;;OAEG;IACH,iBASC;IAED;;OAEG;IACH,kBASC;IAED;;;OAGG;IACH,YAFW,MAAM,QAuBhB;IAED;;;;;OAKG;IACH,0BAJW,KAAK,EAAE,GAAC,MAAM,EAAE,uCAEhB,MAAM,QA0BhB;IAED;;OAEG;IACH,eAqBC;IAED;;;;;;;OAOG;IACH,SANW,MAAM,WACN,MAAM,SACN,OAAO,YACP,OAAO,GACL,KAAK,CAMjB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACJ,WAAW,CAIvB;IAED;;;;OAIG;IACH,cAHW,KAAK,GACH,OAAO,CAanB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,MAAM,CAclB;IAED;;;;;;OAMG;IACH,UALW,MAAM,WACN,MAAM,SACN,OAAO,GACL,KAAK,CASjB;IAED;;OAEG;IACH,gBAUC;IAJG,iBAA6C;IAMjD;;OAEG;IACH,kBASC;IAED;;OAEG;IACH,gBAYC;IAUD;;OAEG;IACH,yBAcC;IAzBD;;;OAGG;IACH,oBAEC;IA6BD;;OAEG;IACH,0BAYC;IAvBD;;;OAGG;IACH,qBAEC;CAkBF;uBAresB,aAAa;yBADX,gBAAgB;sBAEnB,YAAY;4BACN,mBAAmB"}