MBHaxe/src/ResourceLoaderWorker.hx
2022-11-01 12:44:45 +05:30

59 lines
1.1 KiB
Haxe

package src;
import src.ResourceLoader;
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) {
paralleltasks.push(task);
}
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) {
paralleltasks.push(fwd -> ResourceLoader.load(path).entry.load(fwd));
}
}