package src; import gui.MessageBoxOkDlg; import src.ResourceLoader; import src.MarbleGame; class ResourceLoaderWorker { var tasks:Array<(() -> Void)->Void> = []; var paralleltasks:Array<(() -> Void)->Void> = []; var onFinish:() -> Void; var parallelstarted:Bool = false; public function new(onFinish:() -> Void) { this.onFinish = onFinish; } public function addTask(task:(() -> Void)->Void) { tasks.push(task); } public function addTaskParallel(task:(() -> Void)->Void) { #if (!android) paralleltasks.push(task); #else tasks.push(task); #end } public function run() { if (!parallelstarted && paralleltasks.length > 0) { parallelstarted = true; var taskcount = paralleltasks.length; var tasksdone = 0; for (task in paralleltasks) { task(() -> { tasksdone++; if (tasksdone == taskcount) { this.run(); } }); } return; } if (tasks.length > 0) { var task = tasks.shift(); task(() -> { if (tasks.length > 0) { run(); } else { onFinish(); } }); } else { onFinish(); } } public function loadFile(path:String) { if (ResourceLoader.loadedFiles.exists(path)) return; #if (!android) paralleltasks.push(fwd -> { ResourceLoader.load(path).entry.load(fwd); }); #else tasks.push(fwd -> { ResourceLoader.load(path).entry.load(fwd); }); #end } }