1 |
- function TrinAssetLoader(onComplete, onP) {
if (onComplete === undefined) {
onComplete = null;
}
if (onP === undefined) {
onP = null;
}
this.currentAsset = 0;
this.assetsToLoad = [];
this.onComplete = onComplete;
this.onP = onP;
this.caller = null;
this.partSize = 0;
this.currentProgress = 0;
}
TrinAssetLoader.prototype = {
TYPE_IMAGE: 0,
TYPE_SOUND: 1,
TYPE_JSON: 2,
LOADED_JSON: [],
addImage: function(name, src, animated) {
if (animated === undefined) {
animated = true;
}
this.assetsToLoad.push({
name: name,
src: src,
type: this.TYPE_IMAGE,
animated: animated
});
},
addSound: function(name, src) {
this.assetsToLoad.push({
name: name,
src: src,
type: this.TYPE_SOUND
});
},
addJson: function(name, src) {
this.assetsToLoad.push({
name: name,
src: src,
type: this.TYPE_JSON
});
},
load: function() {
var loader;
if (this.loader === undefined) {
loader = this;
} else {
loader = this.loader;
switch (this.info.type) {
case loader.TYPE_IMAGE:
this.onload = null;
this.onprocess = null;
TrinAnimation.prototype.addImage(this);
if (!this.info.animated) {
TrinAnimation.prototype.makeAnimation(this.info.name, this.info.name);
}
break;
case loader.TYPE_SOUND:
this.removeEventListener("canplay", loader.load, true);
TrinSound.prototype.add(this);
break;
case loader.TYPE_JSON:
TrinAssetLoader.prototype.LOADED_JSON[this.info.name] = this;
break;
}
this.loader = null;
this.info = null;
}
if (loader.currentAsset === loader.assetsToLoad.length) {
loader.loadingEnded();
loader.process(loader, 1);
return;
}
loader.currentProgress = loader.currentAsset / loader.assetsToLoad.length;
loader.process(loader, loader.currentProgress);
var info = loader.assetsToLoad[loader.currentAsset++];
switch (info.type) {
case loader.TYPE_IMAGE:
var image = new Image();
image.loader = loader;
image.onload = loader.load;
image.onprogress = function(event) {
var loader = arguments.callee.loader;
loader.process(loader.currentProgress + loader.partSize * (event.loaded / event.total));
};
image.onprogress.loader = loader;
image.info = info;
image.src = info.src;
break;
case loader.TYPE_SOUND:
var sound = new Audio();
sound.loader = loader;
sound.info = info;
var src;
src = document.createElement("source");
src.setAttribute("src", info.src + ".mp3");
src.setAttribute("type", "audio/mpeg");
sound.appendChild(src);
src = document.createElement("source");
src.setAttribute("src", info.src + ".ogg");
src.setAttribute("type", "audio/ogg");
sound.appendChild(src);
sound.addEventListener("canplay", loader.load, true);
sound.load();
break;
case loader.TYPE_JSON:
var onLoad = function(json) {
var obj = JSON.parse(json);
obj.loader = arguments.callee.loader;
obj.info = arguments.callee.info;
obj.loader.load.apply(obj);
};
onLoad.loader = loader;
onLoad.info = info;
loader.loadJson(info.src, onLoad);
break;
}
},
loadingEnded: function() {
this.currentImage = 0;
this.assetsToLoad = [];
if (this.onComplete !== null) {
this.onComplete();
}
},
process: function(loader, percent) {
if (loader.onP !== null) {
loader.onP(percent);
}
},
loadJson: function(url, callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', url, true);
xobj.onreadystatechange = function() {
if (xobj.readyState === 4 && xobj.status === 200) {
callback(xobj.responseText);
xobj.onreadystatechange = null;
}
};
xobj.send(null);
},
getLoadedJson: function(name) {
return TrinAssetLoader.prototype.LOADED_JSON[name];
}
};
|