rendered paste bodyimport com.stevensacks.utils.ObservableClip;
import com.stevensacks.galapagos.data.BranchIterator;
import com.stevensacks.galapagos.assets.AbstractAsset;
import com.stevensacks.galapagos.assets.AssetLoader;
import com.stevensacks.galapagos.pages.PageLoader;
import com.stevensacks.galapagos.pages.PageModel;
import com.stevensacks.galapagos.Main;
import mx.utils.Delegate;
class com.stevensacks.galapagos.data.BranchLoader extends ObservableClass
{
private var iterator:BranchIterator;
private var progressDelegate:Function;
private var completeDelegate:Function;
private var bytesLoaded:Number;
private var percLoaded:Number;
private var eachPerc:Number;
private var loadedFiles:Number;
private var totalFiles:Number;
private var currentAsset:AbstractAsset;
function BranchLoader()
{
super();
progressDelegate = Delegate.create(this, onProgress);
completeDelegate = Delegate.create(this, onComplete);
iterator = new BranchIterator();
}
public function load(branch:String):Void
{
bytesLoaded = 0;
percLoaded = 0;
loadedFiles = 0;
totalFiles = iterator.init(branch);
eachPerc = 100 / totalFiles;
loadNext();
}
private function loadNext():Void
{
currentAsset = iterator.next();
if (currentAsset.branch != undefined) {
loadPage(currentAsset);
} else {
loadAsset(currentAsset);
}
}
private function loadPage(page:PageModel):Void
{
Main.getPageController().load(page);
if (!page.loaded) {
page.addEventListener("progress", progressDelegate);
page.addEventListener("complete", completeDelegate);
} else {
next();
}
}
private function loadAsset(asset:AbstractAsset):Void
{
if (!asset.loaded) {
asset.addEventListener("progress", progressDelegate);
asset.addEventListener("complete", completeDelegate);
Main.getAssetLoader().load(asset);
} else {
next();
}
}
private function onProgress(evt:Object):Void
{
bytesLoaded += evt.loaded;
percLoaded = (loadedFiles * eachPerc) + Math.round((evt.perc * 100));
dispatchProgress();
}
private function onComplete(evt:Object):Void
{
var asset:AbstractAsset = evt.asset;
asset.removeEventListener("progress", progressDelegate);
asset.removeEventListener("complete", completeDelegate);
next();
}
private function next():Void
{
if (++loadedFiles < totalFiles) {
percLoaded = loadedFiles * eachPerc;
dispatchProgress();
loadNext();
} else {
dispatchComplete();
}
}
private function dispatchProgress():Void
{
dispatchEvent({type:"progress", loaded:bytesLoaded, perc:percLoaded, asset:currentAsset});
}
private function dispatchComplete():Void
{
dispatchEvent({type:"complete"});
}
}