mirror of
https://github.com/photonstorm/phaser
synced 2024-12-25 04:23:30 +00:00
166 lines
4.8 KiB
JavaScript
166 lines
4.8 KiB
JavaScript
|
import XHRLoader from 'loader/XHRLoader.js';
|
||
|
import XHRSettings from 'loader/XHRSettings.js';
|
||
|
|
||
|
// File level consts
|
||
|
|
||
|
export const PENDING = 0; // file is in the load queue but not yet started
|
||
|
export const LOADING = 1; // file has been started to load by the loader (onLoad called)
|
||
|
export const LOADED = 2; // file has loaded successfully, awaiting processing
|
||
|
export const FAILED = 3; // file failed to load
|
||
|
export const PROCESSING = 4; // file is being processed (onProcess callback)
|
||
|
export const COMPLETE = 5; // file has finished processing
|
||
|
export const DESTROYED = 6; // file has been destroyed
|
||
|
|
||
|
// Our base File object (from which all File Types extend)
|
||
|
|
||
|
// key = user level file key (can be filename or other string based value)
|
||
|
// url = the URL to load the file from, doesn't include baseURL or Path (which are both set by the Loader)
|
||
|
// type = a user-level value that can control which cache the file is added to
|
||
|
|
||
|
var File = function (key, url, type)
|
||
|
{
|
||
|
if (!key)
|
||
|
{
|
||
|
console.warn('Invalid File key');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
|
||
|
key: key,
|
||
|
|
||
|
url: url,
|
||
|
|
||
|
// Both of these are overridden by the BaseLoader (if being used)
|
||
|
path: '',
|
||
|
src: url,
|
||
|
|
||
|
tag: '', // Tag this file, this is a non-unique string. For example you could tag a collection of files as 'level1', or 'mainmenu'.
|
||
|
|
||
|
type: type, // the file type, i.e. 'image', 'json', etc which can be used to control which cache it gets added to
|
||
|
|
||
|
state: PENDING,
|
||
|
|
||
|
// Multipart file? (i.e. an atlas and its json)
|
||
|
multipart: undefined,
|
||
|
linkFile: undefined,
|
||
|
|
||
|
// The actual processed file data
|
||
|
data: undefined,
|
||
|
|
||
|
// For CORs based loading.
|
||
|
// If this is undefined then the File will check BaseLoader.crossOrigin and use that (if set)
|
||
|
crossOrigin: undefined,
|
||
|
|
||
|
// Optionally set by the Promise returned from BaseLoader.addFile.
|
||
|
resolve: undefined,
|
||
|
reject: undefined,
|
||
|
|
||
|
// maybe you have to set it in the Promise?
|
||
|
processCallback: undefined,
|
||
|
|
||
|
// xhr specific settings (ignored by TagLoaded files)
|
||
|
xhr: XHRSettings('text'),
|
||
|
|
||
|
onStateChange: function (value) {
|
||
|
|
||
|
// console.log('onStateChange', this.url, 'from', this.state, 'to', value);
|
||
|
|
||
|
if (this.state !== value)
|
||
|
{
|
||
|
this.state = value;
|
||
|
|
||
|
// Loaded AND Processed
|
||
|
if (value === COMPLETE)
|
||
|
{
|
||
|
// Part of a multipart load?
|
||
|
if (this.multipart)
|
||
|
{
|
||
|
// Has the linked file loaded too?
|
||
|
if (this.linkFile.state === COMPLETE && this.multipart.resolve)
|
||
|
{
|
||
|
// Send the Promise for the multipart file
|
||
|
this.multipart.resolve(this.multipart);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Send the Promise for this file
|
||
|
if (this.resolve)
|
||
|
{
|
||
|
this.resolve(this);
|
||
|
}
|
||
|
}
|
||
|
else if (value === FAILED)
|
||
|
{
|
||
|
// Part of a multipart load?
|
||
|
if (this.multipart)
|
||
|
{
|
||
|
if (this.multipart.reject)
|
||
|
{
|
||
|
// Send the Promise for the multipart file
|
||
|
this.multipart.reject(this.multipart, error);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Send the Promise for this file
|
||
|
if (this.reject)
|
||
|
{
|
||
|
this.reject(this);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
},
|
||
|
|
||
|
// These functions are usually overridden by the custom file types
|
||
|
|
||
|
load: function (globalXHRSettings) {
|
||
|
|
||
|
this.onStateChange(LOADING);
|
||
|
|
||
|
// Returns a Promise from the XHRLoader
|
||
|
return XHRLoader(this, globalXHRSettings);
|
||
|
|
||
|
},
|
||
|
|
||
|
onLoad: function () {
|
||
|
|
||
|
// If overridden it must set `state` to LOADED
|
||
|
this.onStateChange(LOADED);
|
||
|
|
||
|
},
|
||
|
|
||
|
onError: function () {
|
||
|
|
||
|
// If overridden it must set `state` to FAILED
|
||
|
this.onStateChange(FAILED);
|
||
|
|
||
|
},
|
||
|
|
||
|
onProcess: function () {
|
||
|
|
||
|
// If overridden it must set `state` to PROCESSING
|
||
|
this.onStateChange(PROCESSING);
|
||
|
|
||
|
},
|
||
|
|
||
|
onComplete: function () {
|
||
|
|
||
|
// If overridden it must set `state` to COMPLETE
|
||
|
this.onStateChange(COMPLETE);
|
||
|
|
||
|
},
|
||
|
|
||
|
onDestroy: function () {
|
||
|
|
||
|
// If overridden it must set `state` to DESTROYED
|
||
|
this.onStateChange(DESTROYED);
|
||
|
|
||
|
}
|
||
|
|
||
|
};
|
||
|
|
||
|
};
|
||
|
|
||
|
module.exports = File;
|