All pastes #460305 Raw Edit

Miscellany

public text v1 · immutable
#460305 ·published 2007-04-27 00:10 UTC
rendered paste body
import 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"});
	}
}