parallelize

This commit is contained in:
RandomityGuy 2022-11-01 00:17:13 +05:30
parent 751f4d1797
commit fbb336dc0a

View file

@ -5,8 +5,12 @@ import src.ResourceLoader;
class ResourceLoaderWorker { class ResourceLoaderWorker {
var tasks:Array<(() -> Void)->Void> = []; var tasks:Array<(() -> Void)->Void> = [];
var paralleltasks:Array<(() -> Void)->Void> = [];
var onFinish:() -> Void; var onFinish:() -> Void;
var parallelstarted:Bool = false;
public function new(onFinish:() -> Void) { public function new(onFinish:() -> Void) {
this.onFinish = onFinish; this.onFinish = onFinish;
} }
@ -16,6 +20,22 @@ class ResourceLoaderWorker {
} }
public function run() { 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(); var task = tasks.shift();
task(() -> { task(() -> {
if (tasks.length > 0) { if (tasks.length > 0) {
@ -24,9 +44,12 @@ class ResourceLoaderWorker {
onFinish(); onFinish();
} }
}); });
} else {
onFinish();
}
} }
public function loadFile(path:String) { public function loadFile(path:String) {
addTask(fwd -> ResourceLoader.load(path).entry.load(fwd)); paralleltasks.push(fwd -> ResourceLoader.load(path).entry.load(fwd));
} }
} }