-
-
Notifications
You must be signed in to change notification settings - Fork 33
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 objectsare not supported -
onerrorandonreadyevents 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