diff options
Diffstat (limited to 'webhogg/wasm/pkg')
-rw-r--r-- | webhogg/wasm/pkg/main.js | 16 | ||||
-rw-r--r-- | webhogg/wasm/pkg/worker.js | 22 |
2 files changed, 27 insertions, 11 deletions
diff --git a/webhogg/wasm/pkg/main.js b/webhogg/wasm/pkg/main.js index f16a775..76afa1c 100644 --- a/webhogg/wasm/pkg/main.js +++ b/webhogg/wasm/pkg/main.js @@ -17,12 +17,22 @@ async function main() { source = await fetchedSource.arrayBuffer(); const modules = [ - ['graphics', source, [offCanvas], 100], - ['logic', source, [], 1000] + { type: 'graphics', + source: source, + canvas: offCanvas, + dt: 10000 }, + { type: 'logic', + source: source, + canvas: [], + dt: 10000 }, ]; for (var module of modules) { let worker = new Worker('pkg/worker.js'); - worker.postMessage(module, module[2]); + if (module.type === 'graphics') { + worker.postMessage(module, [module.canvas]); + } else { + worker.postMessage(module); + } workers.push(worker); } } diff --git a/webhogg/wasm/pkg/worker.js b/webhogg/wasm/pkg/worker.js index 0b68374..780ea6f 100644 --- a/webhogg/wasm/pkg/worker.js +++ b/webhogg/wasm/pkg/worker.js @@ -1,11 +1,17 @@ -onmessage = async function (e) { +let data = null; + +onmessage = function (e) { + data = e.data; + importScripts('../bin/webhogg-wasm.js'); - let type = e.data[0]; - let source = e.data[1]; - let args = e.data[2]; - let dt = e.data[3]; - let ctx = await wasm_bindgen(source); + wasm_bindgen(data.source).then(ctx => { + if (data.type === 'graphics') { + wasm_bindgen.start_graphics(data.canvas); + setInterval(wasm_bindgen.loop_graphics, data.dt); + } else if (data.type === 'logic') { + wasm_bindgen.start_logic(); + setInterval(wasm_bindgen.loop_logic, data.dt); + } - ctx['start_' + type].apply(args); - setInterval(ctx['loop_' + type], dt); + }); } |