diff --git a/src/ResourceLoaderWorker.hx b/src/ResourceLoaderWorker.hx index 3ab93323..c741d2d7 100644 --- a/src/ResourceLoaderWorker.hx +++ b/src/ResourceLoaderWorker.hx @@ -5,8 +5,12 @@ 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; } @@ -16,17 +20,36 @@ class ResourceLoaderWorker { } public function run() { - var task = tasks.shift(); - task(() -> { - if (tasks.length > 0) { - run(); - } else { - onFinish(); + 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) { - addTask(fwd -> ResourceLoader.load(path).entry.load(fwd)); + paralleltasks.push(fwd -> ResourceLoader.load(path).entry.load(fwd)); } }