MBHaxe/src/ResourceLoaderWorker.hx
2023-07-08 21:54:51 +05:30

75 lines
1.4 KiB
Haxe

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
}
}