-
-
Notifications
You must be signed in to change notification settings - Fork 15
Worker
ialex32x edited this page Feb 18, 2025
·
3 revisions
Worker is currently supported as an experimental feature with limitations:
- Can not use script classes (GodotJSScript) in workers
-
transferable objects
are not supported -
onerror
andonready
events are not implemented yet
Warning
The class name Worker may be changed in future versions for compatibility in different JS engines.
And, Worker scripts may need to have a specific file name suffix or reside in a designated directory.
// tests/master.ts
// ...
import { Object, Node } from "godot";
import { JSWorker } from "godot.worker";
let worker = new JSWorker("tests/worker");
worker.onmessage = function (m: any) {
console.log("master: get message", m);
}
worker.ontransfer = function (obj: Object) {
console.assert(obj instanceof Node);
this.add_child(obj);
worker.terminate();
}
worker.postMessage("hello");
// tests/worker.ts
import { PackedScene, ResourceLoader } from "godot";
import { JSWorkerParent } from "godot.worker";
if (typeof JSWorkerParent !== "undefined") {
JSWorkerParent.onmessage = function (m: any) {
console.log("worker: get message", m);
JSWorkerParent.postMessage("worker result");
// [EXPERIMENTAL] instantiate a PackedScene in worker thread and transfer it back to master thread
let asset = <PackedScene>ResourceLoader.load("res://background.tscn");
let obj = asset.instantiate();
console.log("[worker] transfering object:", obj);
JSWorkerParent.transfer(obj);
// worker can terminate itself by calling `close()`
// close();
}
}
-
Scripting
-
Utilities
-
Experimental Features
-
Advanced
-
Misc