starling-framework
Version:
A fast, productive library for 2D cross-platform development.
992 lines (976 loc) • 34.6 kB
JavaScript
// Class: starling.utils.AssetManager
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
var $bind = require("./../../bind_stub").default;
var $extend = require("./../../extend_stub").default;
function starling_events_EventDispatcher() {return require("./../../starling/events/EventDispatcher");}
function openfl__$Vector_Vector_$Impl_$() {return require("./../../openfl/_Vector/Vector_Impl_");}
function openfl__$Vector_VectorIterator() {return require("./../../openfl/_Vector/VectorIterator");}
function Xml() {return require("./../../Xml");}
function haxe_ds_StringMap() {return require("./../../haxe/ds/StringMap");}
function openfl_net_URLRequest() {return $import(require("openfl/net/URLRequest"));}
function openfl_Lib() {return $import(require("openfl/Lib"));}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function openfl_errors_ArgumentError() {return $import(require("openfl/errors/ArgumentError"));}
function starling_core_Starling() {return require("./../../starling/core/Starling");}
function openfl_errors_Error() {return $import(require("openfl/errors/Error"));}
function haxe_Timer() {return require("./../../haxe/Timer");}
function starling_textures_TextureAtlas() {return require("./../../starling/textures/TextureAtlas");}
function starling_text_BitmapFont() {return require("./../../starling/text/BitmapFont");}
function starling_text_TextField() {return require("./../../starling/text/TextField");}
function openfl_media_Sound() {return $import(require("openfl/media/Sound"));}
function openfl_display_Bitmap() {return $import(require("openfl/display/Bitmap"));}
function starling_textures_Texture() {return require("./../../starling/textures/Texture");}
function js_Boot() {return require("./../../js/Boot");}
function Std() {return require("./../../Std");}
function openfl_utils_ByteArray() {return $import(require("openfl/utils/ByteArray"));}
function starling_textures_AtfData() {return require("./../../starling/textures/AtfData");}
function EReg() {return require("./../../EReg");}
function openfl_system_LoaderContext() {return $import(require("openfl/system/LoaderContext"));}
function openfl_display_Loader() {return $import(require("openfl/display/Loader"));}
function Type() {return require("./../../Type");}
function openfl_net_URLLoader() {return $import(require("openfl/net/URLLoader"));}
function haxe_Log() {return require("./../../haxe/Log");}
function HxOverrides() {return require("./../../HxOverrides");}
function starling_textures_TextureOptions() {return require("./../../starling/textures/TextureOptions");}
// Constructor
var AssetManager = function(scaleFactor,useMipmaps) {
if(useMipmaps == null) {
useMipmaps = false;
}
if(scaleFactor == null) {
scaleFactor = 1;
}
this.__numLoadingQueues = 0;
(starling_events_EventDispatcher().default).call(this);
this.__defaultTextureOptions = new (starling_textures_TextureOptions().default)(scaleFactor,useMipmaps);
this.__textures = new (haxe_ds_StringMap().default)();
this.__atlases = new (haxe_ds_StringMap().default)();
this.__sounds = new (haxe_ds_StringMap().default)();
this.__xmls = new (haxe_ds_StringMap().default)();
this.__objects = new (haxe_ds_StringMap().default)();
this.__byteArrays = new (haxe_ds_StringMap().default)();
this.__bitmapFonts = new (haxe_ds_StringMap().default)();
this.__numConnections = 3;
this.__verbose = true;
this.__queue = [];
}
// Meta
AssetManager.__name__ = "starling.utils.AssetManager";
AssetManager.__isInterface__ = false;
AssetManager.__super__ = (starling_events_EventDispatcher().default);
AssetManager.prototype = $extend((starling_events_EventDispatcher().default).prototype, {
dispose: function() {
var texture = this.__textures.iterator();
while(texture.hasNext()) {
var texture1 = texture.next();
texture1.dispose();
}
var atlas = this.__atlases.iterator();
while(atlas.hasNext()) {
var atlas1 = atlas.next();
atlas1.dispose();
}
var byteArray = this.__byteArrays.iterator();
while(byteArray.hasNext()) {
var byteArray1 = byteArray.next();
byteArray1.clear();
}
var bitmapFont = this.__bitmapFonts.iterator();
while(bitmapFont.hasNext()) {
var bitmapFont1 = bitmapFont.next();
bitmapFont1.dispose();
}
},
getTexture: function(name) {
if(this.__textures.exists(name)) {
return this.__textures.get(name);
} else {
var atlas = this.__atlases.iterator();
while(atlas.hasNext()) {
var atlas1 = atlas.next();
var texture = atlas1.getTexture(name);
if(texture != null) {
return texture;
}
}
return null;
}
},
getTextures: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
if(out == null) {
out = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
var name = new (openfl__$Vector_VectorIterator().default)(this.getTextureNames(prefix,AssetManager.sNames));
while(name.hasNext()) {
var name1 = name.next();
(openfl__$Vector_Vector_$Impl_$().default).set(out,out.length,this.getTexture(name1));
}
AssetManager.sNames.length = 0;
return out;
},
getTextureNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
out = this.getDictionaryKeys(this.__textures,prefix,out);
var atlas = this.__atlases.iterator();
while(atlas.hasNext()) {
var atlas1 = atlas.next();
atlas1.getNames(prefix,out);
}
(Array.prototype.sort.call)(out,$bind(this,this.compare));
return out;
},
getTextureAtlas: function(name) {
return this.__atlases.get(name);
},
getTextureAtlasNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__atlases,prefix,out);
},
getSound: function(name) {
return this.__sounds.get(name);
},
getSoundNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__sounds,prefix,out);
},
playSound: function(name,startTime,loops,transform) {
if(loops == null) {
loops = 0;
}
if(startTime == null) {
startTime = 0;
}
if(this.__sounds.exists(name)) {
return this.getSound(name).play(startTime,loops,transform);
} else {
return null;
}
},
getXml: function(name) {
return this.__xmls.get(name);
},
getXmlNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__xmls,prefix,out);
},
getObject: function(name) {
return this.__objects.get(name);
},
getObjectNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__objects,prefix,out);
},
getByteArray: function(name) {
return this.__byteArrays.get(name);
},
getByteArrayNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__byteArrays,prefix,out);
},
getBitmapFont: function(name) {
return this.__bitmapFonts.get(name);
},
getBitmapFontNames: function(prefix,out) {
if(prefix == null) {
prefix = "";
}
return this.getDictionaryKeys(this.__bitmapFonts,prefix,out);
},
addTexture: function(name,texture) {
this.log("Adding texture '" + name + "'");
if(this.__textures.exists(name)) {
this.log("Warning: name was already in use; the previous texture will be replaced.");
this.__textures.get(name).dispose();
}
this.__textures.set(name,texture);
},
addTextureAtlas: function(name,atlas) {
this.log("Adding texture atlas '" + name + "'");
if(this.__atlases.exists(name) && atlas != this.__atlases.get(name)) {
this.log("Warning: name was already in use; the previous atlas will be replaced.");
this.__atlases.get(name).dispose();
}
this.__atlases.set(name,atlas);
},
addSound: function(name,sound) {
this.log("Adding sound '" + name + "'");
if(this.__sounds.exists(name) && sound != this.__sounds.get(name)) {
this.log("Warning: name was already in use; the previous sound will be replaced.");
}
this.__sounds.set(name,sound);
},
addXml: function(name,xml) {
this.log("Adding XML '" + name + "'");
if(this.__xmls.exists(name) && xml != this.__xmls.get(name)) {
this.log("Warning: name was already in use; the previous XML will be replaced.");
}
if(xml != null && typeof(xml) == "string") {
xml = (Xml().default).parse(xml).firstElement();
}
var v = xml;
this.__xmls.set(name,v);
},
addObject: function(name,object) {
this.log("Adding object '" + name + "'");
if(this.__objects.exists(name) && object != this.__objects.get(name)) {
this.log("Warning: name was already in use; the previous object will be replaced.");
}
var v = object;
this.__objects.set(name,v);
},
addByteArray: function(name,byteArray) {
this.log("Adding byte array '" + name + "'");
if(this.__byteArrays.exists(name) && byteArray != this.__byteArrays.get(name)) {
this.log("Warning: name was already in use; the previous byte array will be replaced.");
this.__byteArrays.get(name).clear();
}
this.__byteArrays.set(name,byteArray);
},
addBitmapFont: function(name,font) {
this.log("Adding bitmap font '" + name + "'");
if(this.__bitmapFonts.exists(name) && font != this.__bitmapFonts.get(name)) {
this.log("Warning: name was already in use; the previous font will be replaced.");
this.__bitmapFonts.get(name).dispose();
}
this.__bitmapFonts.set(name,font);
},
removeTexture: function(name,dispose) {
if(dispose == null) {
dispose = true;
}
this.log("Removing texture '" + name + "'");
if(dispose && this.__textures.exists(name)) {
this.__textures.get(name).dispose();
}
this.__textures.remove(name);
},
removeTextureAtlas: function(name,dispose) {
if(dispose == null) {
dispose = true;
}
this.log("Removing texture atlas '" + name + "'");
if(dispose && this.__atlases.exists(name)) {
this.__atlases.get(name).dispose();
}
this.__atlases.remove(name);
},
removeSound: function(name) {
this.log("Removing sound '" + name + "'");
this.__sounds.remove(name);
},
removeXml: function(name,dispose) {
if(dispose == null) {
dispose = true;
}
this.log("Removing xml '" + name + "'");
this.__xmls.remove(name);
},
removeObject: function(name) {
this.log("Removing object '" + name + "'");
this.__objects.remove(name);
},
removeByteArray: function(name,dispose) {
if(dispose == null) {
dispose = true;
}
this.log("Removing byte array '" + name + "'");
if(dispose && this.__byteArrays.exists(name)) {
this.__byteArrays.get(name).clear();
}
this.__byteArrays.remove(name);
},
removeBitmapFont: function(name,dispose) {
if(dispose == null) {
dispose = true;
}
this.log("Removing bitmap font '" + name + "'");
if(dispose && this.__bitmapFonts.exists(name)) {
this.__bitmapFonts.get(name).dispose();
}
this.__bitmapFonts.remove(name);
},
purgeQueue: function() {
this.__queue.splice(0,this.__queue.length);
this.dispatchEventWith("cancel");
},
purge: function() {
this.log("Purging all assets, emptying queue");
this.purgeQueue();
this.dispose();
this.__textures = new (haxe_ds_StringMap().default)();
this.__atlases = new (haxe_ds_StringMap().default)();
this.__sounds = new (haxe_ds_StringMap().default)();
this.__xmls = new (haxe_ds_StringMap().default)();
this.__objects = new (haxe_ds_StringMap().default)();
this.__byteArrays = new (haxe_ds_StringMap().default)();
this.__bitmapFonts = new (haxe_ds_StringMap().default)();
},
enqueue: function(rawAssets) {
var _g = 0;
while(_g < rawAssets.length) {
var rawAsset = rawAssets[_g];
++_g;
if(rawAsset == null) {
continue;
} else if(((rawAsset) instanceof Array)) {
this.enqueue(rawAsset);
} else if(typeof(rawAsset) == "string" || ((rawAsset) instanceof (openfl_net_URLRequest().default))) {
this.enqueueWithName(rawAsset);
} else {
this.log("Ignoring unsupported asset type: " + (openfl_Lib().default).getQualifiedClassName(rawAsset));
}
}
},
enqueueWithName: function(asset,name,options) {
if(name == null) {
name = this.getName(asset);
}
if(options == null) {
options = this.__defaultTextureOptions.clone();
} else {
options = options.clone();
}
this.log("Enqueuing '" + name + "'");
this.__queue.push({ name : name, asset : asset, options : options});
return name;
},
loadQueue: function(onProgress) {
var _gthis = this;
if(onProgress == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Argument 'onProgress' must not be null"));
}
if(this.__queue.length == 0) {
onProgress(1.0);
return;
}
this.__starling = (starling_core_Starling().default).get_current();
if(this.__starling == null || this.__starling.get_context() == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("The Starling instance needs to be ready before assets can be loaded."));
}
var PROGRESS_PART_ASSETS = 0.9;
var PROGRESS_PART_XMLS = 1.0 - PROGRESS_PART_ASSETS;
var i;
var canceled = false;
var xmls = (openfl__$Vector_Vector_$Impl_$().default)._new();
var assetInfos = this.__queue.slice();
var assetCount = this.__queue.length;
var assetProgress = [];
var assetIndex = 0;
var loadNextQueueElement = null;
var cancel = null;
var loadQueueElement = null;
var updateAssetProgress = null;
var processXmls = null;
var processXml = null;
var finish = null;
loadNextQueueElement = function() {
if(assetIndex < assetInfos.length) {
assetIndex += 1;
var index = assetIndex - 1;
loadQueueElement(index,assetInfos[index]);
}
};
loadQueueElement = function(index1,assetInfo) {
if(canceled) {
return;
}
var onElementProgress = function(progress) {
updateAssetProgress(index1,progress * 0.8);
};
var onElementLoaded = function() {
updateAssetProgress(index1,1.0);
assetCount -= 1;
if(assetCount > 0) {
loadNextQueueElement();
} else {
processXmls();
}
};
_gthis.processRawAsset(assetInfo.name,assetInfo.asset,assetInfo.options,xmls,onElementProgress,onElementLoaded);
};
updateAssetProgress = function(index2,progress1) {
assetProgress[index2] = progress1;
var sum = 0.0;
var len = assetProgress.length;
var _g = 0;
var _g1 = len;
while(_g < _g1) {
var i1 = _g++;
sum += assetProgress[i1];
}
onProgress(sum / len * PROGRESS_PART_ASSETS);
};
processXmls = function() {
(Array.prototype.sort.call)(xmls,function(a,b) {
if(a.get_nodeName().split(":").pop() == "TextureAtlas") {
return -1;
} else {
return 1;
}
});
(haxe_Timer().default).delay(function() {
processXml(0);
},1);
};
processXml = function(index3) {
if(canceled) {
return;
} else if(index3 == xmls.length) {
finish();
return;
}
var texture;
var name;
var fontName;
var xml = xmls[index3];
var rootNode = xml.get_nodeName();
var xmlProgress = (index3 + 1) / (xmls.length + 1);
var bitmapFont;
if(rootNode == "TextureAtlas") {
var name1 = xml.get("imagePath");
name = _gthis.getName(name1);
texture = _gthis.getTexture(name);
if(texture != null) {
_gthis.addTextureAtlas(name,new (starling_textures_TextureAtlas().default)(texture,xml));
} else {
_gthis.log("Cannot create atlas: texture '" + name + "' is missing.");
}
if(_gthis.__keepAtlasXmls) {
_gthis.addXml(name,xml);
}
} else if(rootNode == "font") {
var name2 = xml.elementsNamed("pages").next().elementsNamed("page").next().get("file");
name = _gthis.getName(name2);
fontName = _gthis.__registerBitmapFontsWithFontFace ? xml.elementsNamed("info").next().get("face") : name;
texture = _gthis.getTexture(name);
if(texture != null) {
bitmapFont = new (starling_text_BitmapFont().default)(texture,xml);
_gthis.addBitmapFont(fontName,bitmapFont);
(starling_text_TextField().default).registerCompositor(bitmapFont,fontName);
} else {
_gthis.log("Cannot create bitmap font: texture '" + name + "' is missing.");
}
if(_gthis.__keepFontXmls) {
_gthis.addXml(name,xml);
}
} else {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("XML contents not recognized: " + rootNode));
}
onProgress(PROGRESS_PART_ASSETS + PROGRESS_PART_XMLS * xmlProgress);
var f = processXml;
var a1 = index3 + 1;
(haxe_Timer().default).delay(function() {
f(a1);
},1);
};
cancel = function() {
_gthis.removeEventListener("cancel",cancel);
_gthis.__numLoadingQueues--;
canceled = true;
};
finish = function() {
(haxe_Timer().default).delay(function() {
if(!canceled) {
cancel();
onProgress(1.0);
}
},1);
};
var _g2 = 0;
var _g11 = assetCount;
while(_g2 < _g11) {
var i2 = _g2++;
assetProgress[i2] = 0.0;
}
var _g21 = 0;
var _g3 = this.__numConnections;
while(_g21 < _g3) {
var i3 = _g21++;
loadNextQueueElement();
}
this.__queue.splice(0,this.__queue.length);
this.__numLoadingQueues++;
this.addEventListener("cancel",cancel);
},
processRawAsset: function(name,rawAsset,options,xmls,onProgress,onComplete) {
var _gthis = this;
var canceled = false;
var cancel = null;
var progress = null;
var process = null;
process = function(asset) {
var texture = null;
var bytes;
var object = null;
var xml = null;
_gthis.__starling.makeCurrent();
if(!canceled) {
if(asset == null) {
onComplete();
} else if(((asset) instanceof (openfl_media_Sound().default))) {
_gthis.addSound(name,asset);
onComplete();
} else if(((asset) instanceof (Xml().default))) {
xml = asset;
xml = xml.firstElement();
if(xml.get_nodeName() == "TextureAtlas" || xml.get_nodeName() == "font") {
(openfl__$Vector_Vector_$Impl_$().default).push(xmls,xml);
} else {
_gthis.addXml(name,xml);
}
onComplete();
} else if(_gthis.__starling.get_context().driverInfo == "Disposed") {
_gthis.log("Context lost while processing assets, retrying ...");
(haxe_Timer().default).delay(function() {
process(asset);
},1);
return;
} else if(((asset) instanceof (openfl_display_Bitmap().default))) {
var process1 = options.get_onReady();
var process2 = _gthis.prependCallback(process1,function(_) {
_gthis.addTexture(name,texture);
onComplete();
});
options.set_onReady(process2);
texture = (starling_textures_Texture().default).fromData(asset,options);
texture.get_root().set_onRestore(function(_1) {
_gthis.__numLostTextures++;
_gthis.loadRawAsset(rawAsset,null,function(asset1) {
try {
if(asset1 == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("Reload failed"));
}
texture.get_root().uploadBitmap((js_Boot().default).__cast(asset1 , (openfl_display_Bitmap().default)));
asset1.bitmapData.dispose();
} catch( e ) {
var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e;
if(((e1) instanceof (openfl_errors_Error().default))) {
_gthis.log("Texture restoration failed for '" + name + "': " + e1.message);
} else {
_gthis.log("Texture restoration failed for '" + name + "': " + (Std().default).string(e1));
}
}
_gthis.__numRestoredTextures++;
(starling_core_Starling().default).get_current().get_stage().setRequiresRedraw();
if(_gthis.__numLostTextures == _gthis.__numRestoredTextures) {
_gthis.dispatchEventWith("texturesRestored");
}
});
});
} else if(((asset) instanceof (openfl_utils_ByteArray().default))) {
bytes = asset;
if((starling_textures_AtfData().default).isAtfData(bytes)) {
var process3 = options.get_onReady();
var process4 = _gthis.prependCallback(process3,function(_2) {
_gthis.addTexture(name,texture);
onComplete();
});
options.set_onReady(process4);
texture = (starling_textures_Texture().default).fromData(bytes,options);
texture.get_root().set_onRestore(function(_3) {
_gthis.__numLostTextures++;
_gthis.loadRawAsset(rawAsset,null,function(asset2) {
try {
if(asset2 == null) {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_Error().default)("Reload failed"));
}
texture.get_root().uploadAtfData((js_Boot().default).__cast(asset2 , (openfl_utils_ByteArray().default)),0,null);
asset2.clear();
} catch( e2 ) {
var e3 = ((e2) instanceof (js__$Boot_HaxeError().default)) ? e2.val : e2;
if(((e3) instanceof (openfl_errors_Error().default))) {
_gthis.log("Texture restoration failed for '" + name + "': " + e3.message);
} else {
_gthis.log("Texture restoration failed for '" + name + "': " + (Std().default).string(e3));
}
}
_gthis.__numRestoredTextures++;
(starling_core_Starling().default).get_current().get_stage().setRequiresRedraw();
if(_gthis.__numLostTextures == _gthis.__numRestoredTextures) {
_gthis.dispatchEventWith("texturesRestored");
}
});
});
bytes.clear();
} else if(_gthis.byteArrayStartsWith(bytes,"{") || _gthis.byteArrayStartsWith(bytes,"[")) {
try {
object = JSON.parse(bytes.readUTFBytes(bytes.length));
} catch( e4 ) {
var e5 = ((e4) instanceof (js__$Boot_HaxeError().default)) ? e4.val : e4;
if(((e5) instanceof (openfl_errors_Error().default))) {
_gthis.log("Could not parse JSON: " + e5.message);
_gthis.dispatchEventWith("parseError",false,name);
} else {
_gthis.log("Could not parse JSON: " + (Std().default).string(e5));
_gthis.dispatchEventWith("parseError",false,name);
}
}
if(object != null) {
_gthis.addObject(name,object);
}
bytes.clear();
onComplete();
} else if(_gthis.byteArrayStartsWith(bytes,"<")) {
try {
xml = (Xml().default).parse(bytes.toString());
} catch( e6 ) {
var e7 = ((e6) instanceof (js__$Boot_HaxeError().default)) ? e6.val : e6;
if(((e7) instanceof (openfl_errors_Error().default))) {
_gthis.log("Could not parse XML: " + e7.message);
_gthis.dispatchEventWith("parseError",false,name);
} else {
_gthis.log("Could not parse XML: " + (Std().default).string(e7));
_gthis.dispatchEventWith("parseError",false,name);
}
}
process(xml);
bytes.clear();
} else {
_gthis.addByteArray(name,bytes);
onComplete();
}
} else {
_gthis.addObject(name,asset);
onComplete();
}
}
asset = null;
bytes = null;
_gthis.removeEventListener("cancel",cancel);
};
progress = function(ratio) {
if(!canceled) {
onProgress(ratio);
}
};
cancel = function() {
canceled = true;
};
this.addEventListener("cancel",cancel);
this.loadRawAsset(rawAsset,progress,process);
},
loadRawAsset: function(rawAsset,onProgress,onComplete) {
var _gthis = this;
var extension = null;
var loaderInfo = null;
var urlLoader = null;
var urlRequest = null;
var url = null;
var complete = null;
var onIoError = null;
var onSecurityError = null;
var onHttpResponseStatus = null;
var onLoadProgress = null;
var onUrlLoaderComplete = null;
var onLoaderComplete = null;
onIoError = function(event) {
_gthis.log("IO error: " + event.text);
_gthis.dispatchEventWith("ioError",false,url);
complete(null);
};
onSecurityError = function(event1) {
_gthis.log("security error: " + event1.text);
_gthis.dispatchEventWith("securityError",false,url);
complete(null);
};
onHttpResponseStatus = function(event2) {
if(extension == null) {
var headers = event2.responseHeaders;
var contentType = _gthis.getHttpHeader(headers,"Content-Type");
if(contentType != null && new (EReg().default)("(audio|image)/","").split(contentType) != null) {
extension = contentType.split("/").pop();
}
}
};
onLoadProgress = function(event3) {
if(onProgress != null && event3.bytesTotal > 0) {
onProgress(event3.bytesLoaded / event3.bytesTotal);
}
};
onUrlLoaderComplete = function(event4) {
var bytes = _gthis.transformData(((urlLoader.data) instanceof (openfl_utils_ByteArray().default)) ? urlLoader.data : null,url);
var sound;
if(bytes == null) {
complete(null);
return;
}
if(extension != null) {
extension = extension.toLowerCase();
}
switch(extension) {
case "gif":case "jpeg":case "jpg":case "png":
var loaderContext = new (openfl_system_LoaderContext().default)(_gthis.__checkPolicyFile);
var loader = new (openfl_display_Loader().default)();
loaderInfo = loader.contentLoaderInfo;
loaderInfo.addEventListener("ioError",onIoError);
loaderInfo.addEventListener("complete",onLoaderComplete);
loader.loadBytes(bytes,loaderContext);
break;
case "mp3":case "mpeg":case "ogg":case "wav":
sound = new (openfl_media_Sound().default)();
sound.loadCompressedDataFromByteArray(bytes,bytes.length);
bytes.clear();
complete(sound);
break;
default:
complete(bytes);
}
};
onLoaderComplete = function(event5) {
urlLoader.data.clear();
complete(event5.target.content);
};
complete = function(asset) {
if(urlLoader != null) {
urlLoader.removeEventListener("ioError",onIoError);
urlLoader.removeEventListener("securityError",onSecurityError);
urlLoader.removeEventListener("httpResponseStatus",onHttpResponseStatus);
urlLoader.removeEventListener("progress",onLoadProgress);
urlLoader.removeEventListener("complete",onUrlLoaderComplete);
}
if(loaderInfo != null) {
loaderInfo.removeEventListener("ioError",onIoError);
loaderInfo.removeEventListener("complete",onLoaderComplete);
}
onComplete(asset);
};
if((Std().default).is(rawAsset,$hxClasses["Class"])) {
(haxe_Timer().default).delay(function() {
(Type().default).createInstance(rawAsset,[]);
},1);
} else if(typeof(rawAsset) == "string" || ((rawAsset) instanceof (openfl_net_URLRequest().default))) {
urlRequest = ((rawAsset) instanceof (openfl_net_URLRequest().default)) ? rawAsset : null;
if(urlRequest == null) {
urlRequest = new (openfl_net_URLRequest().default)((js_Boot().default).__cast(rawAsset , String));
}
url = urlRequest.url;
extension = this.getExtensionFromUrl(url);
urlLoader = new (openfl_net_URLLoader().default)();
urlLoader.dataFormat = "binary";
urlLoader.addEventListener("ioError",onIoError);
urlLoader.addEventListener("securityError",onSecurityError);
urlLoader.addEventListener("httpResponseStatus",onHttpResponseStatus);
urlLoader.addEventListener("progress",onLoadProgress);
urlLoader.addEventListener("complete",onUrlLoaderComplete);
urlLoader.load(urlRequest);
}
},
getName: function(rawAsset) {
var name = null;
if(typeof(rawAsset) == "string") {
name = (js_Boot().default).__cast(rawAsset , String);
} else if(((rawAsset) instanceof (openfl_net_URLRequest().default))) {
name = ((js_Boot().default).__cast(rawAsset , (openfl_net_URLRequest().default))).url;
}
if(name != null) {
name = new (EReg().default)("%20","g").replace(name," ");
name = this.getBasenameFromUrl(name);
if(name != null) {
return name;
} else {
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Could not extract name from String '" + (Std().default).string(rawAsset) + "'"));
}
} else {
name = (Type().default).getClassName(rawAsset);
throw new (js__$Boot_HaxeError().default)(new (openfl_errors_ArgumentError().default)("Cannot extract names for objects of type '" + name + "'"));
}
},
transformData: function(data,url) {
return data;
},
log: function(message) {
if(this.__verbose) {
(haxe_Log().default).trace("[AssetManager] " + message,{ fileName : "../src/starling/utils/AssetManager.hx", lineNumber : 1292, className : "starling.utils.AssetManager", methodName : "log"});
}
},
byteArrayStartsWith: function(bytes,char) {
var start = 0;
var length = bytes.length;
var wanted = (HxOverrides().default).cca(char,0);
if(length >= 4 && (bytes.get(0) == 0 && bytes.get(1) == 0 && bytes.get(2) == 254 && bytes.get(3) == 255) || bytes.get(0) == 255 && bytes.get(1) == 254 && bytes.get(2) == 0 && bytes.get(3) == 0) {
start = 4;
} else if(length >= 3 && bytes.get(0) == 239 && bytes.get(1) == 187 && bytes.get(2) == 191) {
start = 3;
} else if(length >= 2 && (bytes.get(0) == 254 && bytes.get(1) == 255) || bytes.get(0) == 255 && bytes.get(1) == 254) {
start = 2;
}
var _g = start;
var _g1 = length;
while(_g < _g1) {
var i = _g++;
var byte = bytes.get(i);
if(byte == 0 || byte == 10 || byte == 13 || byte == 32) {
continue;
} else {
return byte == wanted;
}
}
return false;
},
getDictionaryKeys: function(dictionary,prefix,out) {
if(prefix == null) {
prefix = "";
}
if(out == null) {
out = (openfl__$Vector_Vector_$Impl_$().default)._new();
}
var name = dictionary.keys();
while(name.hasNext()) {
var name1 = name.next();
if(name1.indexOf(prefix) == 0) {
(openfl__$Vector_Vector_$Impl_$().default).set(out,out.length,name1);
}
}
(Array.prototype.sort.call)(out,$bind(this,this.compare));
return out;
},
getHttpHeader: function(headers,headerName) {
if(headers != null) {
var _g = 0;
while(_g < headers.length) {
var header = headers[_g];
++_g;
if(header.name == headerName) {
return header.value;
}
}
}
return null;
},
getBasenameFromUrl: function(url) {
var isMatched = AssetManager.NAME_REGEX.match(url);
if(isMatched) {
return AssetManager.NAME_REGEX.matched(1);
} else {
return null;
}
},
getExtensionFromUrl: function(url) {
var isMatched = AssetManager.NAME_REGEX.match(url);
if(isMatched) {
return AssetManager.NAME_REGEX.matched(2);
} else {
return null;
}
},
prependCallback: function(oldCallback,newCallback) {
if(oldCallback == null) {
return newCallback;
} else if(newCallback == null) {
return oldCallback;
} else {
return function(_) {
newCallback();
oldCallback();
};
}
},
compare: function(a,b) {
if(a < b) {
return -1;
} else if(a > b) {
return 1;
} else {
return 0;
}
},
get_queue: function() {
return this.__queue;
},
get_numQueuedAssets: function() {
return this.__queue.length;
},
get_verbose: function() {
return this.__verbose;
},
set_verbose: function(value) {
return this.__verbose = value;
},
get_isLoading: function() {
return this.__numLoadingQueues > 0;
},
get_useMipMaps: function() {
return this.__defaultTextureOptions.get_mipMapping();
},
set_useMipMaps: function(value) {
return this.__defaultTextureOptions.set_mipMapping(value);
},
get_scaleFactor: function() {
return this.__defaultTextureOptions.get_scale();
},
set_scaleFactor: function(value) {
return this.__defaultTextureOptions.set_scale(value);
},
get_textureFormat: function() {
return this.__defaultTextureOptions.get_format();
},
set_textureFormat: function(value) {
return this.__defaultTextureOptions.set_format(value);
},
get_forcePotTextures: function() {
return this.__defaultTextureOptions.get_forcePotTexture();
},
set_forcePotTextures: function(value) {
return this.__defaultTextureOptions.set_forcePotTexture(value);
},
get_checkPolicyFile: function() {
return this.__checkPolicyFile;
},
set_checkPolicyFile: function(value) {
return this.__checkPolicyFile = value;
},
get_keepAtlasXmls: function() {
return this.__keepAtlasXmls;
},
set_keepAtlasXmls: function(value) {
return this.__keepAtlasXmls = value;
},
get_keepFontXmls: function() {
return this.__keepFontXmls;
},
set_keepFontXmls: function(value) {
return this.__keepFontXmls = value;
},
get_numConnections: function() {
return this.__numConnections;
},
set_numConnections: function(value) {
return this.__numConnections = value;
},
get_registerBitmapFontsWithFontFace: function() {
return this.__registerBitmapFontsWithFontFace;
},
set_registerBitmapFontsWithFontFace: function(value) {
return this.__registerBitmapFontsWithFontFace = value;
}
});
AssetManager.prototype.__class__ = AssetManager.prototype.constructor = $hxClasses["starling.utils.AssetManager"] = AssetManager;
// Init
Object.defineProperties(AssetManager.prototype,{ numQueuedAssets : { get : function () { return this.get_numQueuedAssets (); }}, verbose : { get : function () { return this.get_verbose (); }, set : function (v) { return this.set_verbose (v); }}, isLoading : { get : function () { return this.get_isLoading (); }}, useMipMaps : { get : function () { return this.get_useMipMaps (); }, set : function (v) { return this.set_useMipMaps (v); }}, scaleFactor : { get : function () { return this.get_scaleFactor (); }, set : function (v) { return this.set_scaleFactor (v); }}, textureFormat : { get : function () { return this.get_textureFormat (); }, set : function (v) { return this.set_textureFormat (v); }}, forcePotTextures : { get : function () { return this.get_forcePotTextures (); }, set : function (v) { return this.set_forcePotTextures (v); }}, checkPolicyFile : { get : function () { return this.get_checkPolicyFile (); }, set : function (v) { return this.set_checkPolicyFile (v); }}, keepAtlasXmls : { get : function () { return this.get_keepAtlasXmls (); }, set : function (v) { return this.set_keepAtlasXmls (v); }}, keepFontXmls : { get : function () { return this.get_keepFontXmls (); }, set : function (v) { return this.set_keepFontXmls (v); }}, numConnections : { get : function () { return this.get_numConnections (); }, set : function (v) { return this.set_numConnections (v); }}});
// Statics
AssetManager.HTTP_RESPONSE_STATUS = "httpResponseStatus"
AssetManager.sNames = (openfl__$Vector_Vector_$Impl_$().default)._new()
AssetManager.NAME_REGEX = new (EReg().default)("([^\\?/\\\\]+?)(?:\\.([\\w\\-]+))?(?:\\?.*)?$","")
// Export
exports.default = AssetManager;