@vpmedia/phaser 1.60.0 → 1.62.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 +1 -1
- package/package.json +3 -3
- package/src/phaser/core/device_util.js +35 -36
- package/src/phaser/core/loader.js +10 -7
- package/types/phaser/core/device_util.d.ts +4 -0
- package/types/phaser/core/device_util.d.ts.map +1 -1
- package/types/phaser/core/loader.d.ts +2 -2
- package/types/phaser/core/loader.d.ts.map +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @vpmedia/phaser
|
|
2
2
|
|
|
3
|
-
[](https://badge.fury.io/js/@vpmedia%2Fphaser)
|
|
4
4
|
[](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.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vpmedia/phaser",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.62.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",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"types": "./types/index.d.ts",
|
|
24
24
|
"type": "module",
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@eslint/js": "^9.
|
|
26
|
+
"@eslint/js": "^9.15.0",
|
|
27
27
|
"@jest/globals": "^29.7.0",
|
|
28
28
|
"@types/jest": "^29.5.14",
|
|
29
|
-
"eslint": "^9.
|
|
29
|
+
"eslint": "^9.15.0",
|
|
30
30
|
"eslint-plugin-jsdoc": "^50.5.0",
|
|
31
31
|
"eslint-plugin-unicorn": "^56.0.0",
|
|
32
32
|
"globals": "^15.12.0",
|
|
@@ -150,47 +150,42 @@ export function checkBrowser(device) {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
+
/**
|
|
154
|
+
* Check for codec support.
|
|
155
|
+
* @param {HTMLAudioElement} audioElement - TBD.
|
|
156
|
+
* @param {string} type - TBD.
|
|
157
|
+
* @returns {boolean} TBD.
|
|
158
|
+
*/
|
|
159
|
+
export const canPlayType = (audioElement, type) => {
|
|
160
|
+
try {
|
|
161
|
+
const canPlayResult = audioElement.canPlayType(type);
|
|
162
|
+
return canPlayResult === 'maybe' || canPlayResult === 'probably';
|
|
163
|
+
} catch (error) {
|
|
164
|
+
console.error(`canPlayType error with type: ${type}`, error);
|
|
165
|
+
return false;
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
153
169
|
/**
|
|
154
170
|
* TBD.
|
|
155
171
|
* @param {Device} device - TBD.
|
|
172
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types
|
|
173
|
+
* @see https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
|
|
174
|
+
* @see https://bit.ly/iphoneoscodecs
|
|
156
175
|
*/
|
|
157
176
|
export function checkAudio(device) {
|
|
158
177
|
const audioElement = document.createElement('audio');
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
device.ogg = true;
|
|
163
|
-
}
|
|
164
|
-
if (
|
|
165
|
-
audioElement.canPlayType('audio/ogg; codecs="opus"').replace(/^no$/, '') ||
|
|
166
|
-
audioElement.canPlayType('audio/opus;').replace(/^no$/, '')
|
|
167
|
-
) {
|
|
168
|
-
device.opus = true;
|
|
169
|
-
}
|
|
170
|
-
if (audioElement.canPlayType('audio/mpeg;').replace(/^no$/, '')) {
|
|
171
|
-
device.mp3 = true;
|
|
172
|
-
}
|
|
173
|
-
// Mimetypes accepted:
|
|
174
|
-
// developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
|
|
175
|
-
// bit.ly/iphoneoscodecs
|
|
176
|
-
if (audioElement.canPlayType('audio/wav; codecs="1"').replace(/^no$/, '')) {
|
|
177
|
-
device.wav = true;
|
|
178
|
-
}
|
|
179
|
-
if (audioElement.canPlayType('audio/x-m4a;') || audioElement.canPlayType('audio/aac;').replace(/^no$/, '')) {
|
|
180
|
-
device.m4a = true;
|
|
181
|
-
}
|
|
182
|
-
if (audioElement.canPlayType('audio/webm; codecs="vorbis"').replace(/^no$/, '')) {
|
|
183
|
-
device.webm = true;
|
|
184
|
-
}
|
|
185
|
-
if (audioElement.canPlayType('audio/mp4;codecs="ec-3"') !== '') {
|
|
186
|
-
if (device.edge || device.safari) {
|
|
187
|
-
device.dolby = true;
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
} catch (e) {
|
|
192
|
-
// pass
|
|
178
|
+
if (!audioElement.canPlayType) {
|
|
179
|
+
console.error('checkAudio', new Error('Missing canPlayType method in HTMLAudioElement'));
|
|
180
|
+
return;
|
|
193
181
|
}
|
|
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"');
|
|
194
189
|
}
|
|
195
190
|
|
|
196
191
|
/**
|
|
@@ -207,13 +202,17 @@ export function checkImage(device) {
|
|
|
207
202
|
avif.onload = function () {
|
|
208
203
|
device.avif = true;
|
|
209
204
|
};
|
|
205
|
+
} catch (error) {
|
|
206
|
+
console.error('checkImage error with avif', error);
|
|
207
|
+
}
|
|
208
|
+
try {
|
|
210
209
|
const webp = new Image();
|
|
211
210
|
webp.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=';
|
|
212
211
|
webp.onload = function () {
|
|
213
212
|
device.webp = true;
|
|
214
213
|
};
|
|
215
|
-
} catch (
|
|
216
|
-
|
|
214
|
+
} catch (error) {
|
|
215
|
+
console.error('checkImage error with webp', error);
|
|
217
216
|
}
|
|
218
217
|
}
|
|
219
218
|
|
|
@@ -525,7 +525,7 @@ export class Loader {
|
|
|
525
525
|
*/
|
|
526
526
|
processLoadQueue() {
|
|
527
527
|
if (!this.isLoading) {
|
|
528
|
-
this.game.logger.warn('
|
|
528
|
+
this.game.logger.warn('Active loading canceled / reset');
|
|
529
529
|
this.finishedLoading(true);
|
|
530
530
|
return;
|
|
531
531
|
}
|
|
@@ -610,7 +610,7 @@ export class Loader {
|
|
|
610
610
|
} else if (!this._flightQueue.length) {
|
|
611
611
|
// Flight queue is empty but file list is not done being processed.
|
|
612
612
|
// This indicates a critical internal error with no known recovery.
|
|
613
|
-
this.game.logger.warn('
|
|
613
|
+
this.game.logger.warn('Aborting: processing queue empty, loading may have stalled');
|
|
614
614
|
const scope = this;
|
|
615
615
|
setTimeout(() => {
|
|
616
616
|
scope.finishedLoading(true);
|
|
@@ -651,7 +651,7 @@ export class Loader {
|
|
|
651
651
|
file.error = !!errorMessage;
|
|
652
652
|
if (file.error) {
|
|
653
653
|
file.errorMessage = errorMessage;
|
|
654
|
-
this.game.logger.warn(file,
|
|
654
|
+
this.game.logger.warn('Error loading file', file);
|
|
655
655
|
}
|
|
656
656
|
this.log('asyncComplete', file);
|
|
657
657
|
this.processLoadQueue();
|
|
@@ -755,8 +755,10 @@ export class Loader {
|
|
|
755
755
|
file.url = this.getAudioURL(file.url);
|
|
756
756
|
if (file.url) {
|
|
757
757
|
this.xhrLoad(file, this.transformUrl(file.url, file), 'arraybuffer', this.fileComplete);
|
|
758
|
+
} else if (this.game.sound.noAudio) {
|
|
759
|
+
this.fileError(file, null, 'Device does not have audio playback support');
|
|
758
760
|
} else {
|
|
759
|
-
this.fileError(file, null, 'No supported audio URL specified
|
|
761
|
+
this.fileError(file, null, 'No supported audio URL specified');
|
|
760
762
|
}
|
|
761
763
|
break;
|
|
762
764
|
case 'json':
|
|
@@ -922,6 +924,7 @@ export class Loader {
|
|
|
922
924
|
}
|
|
923
925
|
}
|
|
924
926
|
}
|
|
927
|
+
this.game.logger.warn('No supported audio format found', { urls });
|
|
925
928
|
return null;
|
|
926
929
|
}
|
|
927
930
|
|
|
@@ -929,7 +932,7 @@ export class Loader {
|
|
|
929
932
|
* TBD.
|
|
930
933
|
* @param {object} file - TBD.
|
|
931
934
|
* @param {XMLHttpRequest} xhr - TBD.
|
|
932
|
-
* @param {number} reason - TBD.
|
|
935
|
+
* @param {number | string} reason - TBD.
|
|
933
936
|
*/
|
|
934
937
|
fileError(file, xhr = null, reason = 0) {
|
|
935
938
|
// const url = file.requestUrl || this.transformUrl(file.url, file);
|
|
@@ -1068,7 +1071,7 @@ export class Loader {
|
|
|
1068
1071
|
const xml = this.parseXml(data);
|
|
1069
1072
|
if (!xml) {
|
|
1070
1073
|
const responseType = xhr.responseType || xhr.contentType; // contentType for MS-XDomainRequest
|
|
1071
|
-
this.game.logger.warn(
|
|
1074
|
+
this.game.logger.warn(`${file.key}: invalid XML (${responseType})`);
|
|
1072
1075
|
this.asyncComplete(file, 'invalid XML');
|
|
1073
1076
|
return;
|
|
1074
1077
|
}
|
|
@@ -1136,7 +1139,7 @@ export class Loader {
|
|
|
1136
1139
|
if (!this.isUseLog) {
|
|
1137
1140
|
return;
|
|
1138
1141
|
}
|
|
1139
|
-
this.game.logger.info(
|
|
1142
|
+
this.game.logger.info(message, data);
|
|
1140
1143
|
}
|
|
1141
1144
|
|
|
1142
1145
|
/**
|
|
@@ -28,6 +28,9 @@ export function checkBrowser(device: Device): void;
|
|
|
28
28
|
/**
|
|
29
29
|
* TBD.
|
|
30
30
|
* @param {Device} device - TBD.
|
|
31
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/MIME_types/Common_types
|
|
32
|
+
* @see https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements
|
|
33
|
+
* @see https://bit.ly/iphoneoscodecs
|
|
31
34
|
*/
|
|
32
35
|
export function checkAudio(device: Device): void;
|
|
33
36
|
/**
|
|
@@ -45,5 +48,6 @@ export function initialize(device: Device): void;
|
|
|
45
48
|
* @returns {Device} TBD.
|
|
46
49
|
*/
|
|
47
50
|
export function createDevice(): Device;
|
|
51
|
+
export function canPlayType(audioElement: HTMLAudioElement, type: string): boolean;
|
|
48
52
|
import { Device } from './device.js';
|
|
49
53
|
//# 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;
|
|
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"}
|
|
@@ -287,9 +287,9 @@ export class Loader {
|
|
|
287
287
|
* TBD.
|
|
288
288
|
* @param {object} file - TBD.
|
|
289
289
|
* @param {XMLHttpRequest} xhr - TBD.
|
|
290
|
-
* @param {number} reason - TBD.
|
|
290
|
+
* @param {number | string} reason - TBD.
|
|
291
291
|
*/
|
|
292
|
-
fileError(file: object, xhr?: XMLHttpRequest, reason?: number): void;
|
|
292
|
+
fileError(file: object, xhr?: XMLHttpRequest, reason?: number | string): void;
|
|
293
293
|
/**
|
|
294
294
|
* TBD.
|
|
295
295
|
* @param {object} file - TBD.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/loader.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/phaser/core/loader.js"],"names":[],"mappings":"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"}
|