From de3d86164acaa9aeb78f28e3201ff1a40b212f04 Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Sat, 1 Jun 2019 02:26:39 +0200 Subject: Communicate from game logic to graphics please run the 'run'-script every time before loading the page --- WebInterface/wasm/webhogg/graphics.js | 175 +++++++++++++++++++++++++++++++++- WebInterface/wasm/webhogg/index.html | 2 +- WebInterface/wasm/webhogg/loader.js | 9 +- WebInterface/wasm/webhogg/run | 3 + WebInterface/wasm/webhogg/src/lib.rs | 5 +- WebInterface/wasm/webhogg/update.py | 29 ++++++ 6 files changed, 212 insertions(+), 11 deletions(-) create mode 100644 WebInterface/wasm/webhogg/update.py diff --git a/WebInterface/wasm/webhogg/graphics.js b/WebInterface/wasm/webhogg/graphics.js index e4759e9..bafae3d 100644 --- a/WebInterface/wasm/webhogg/graphics.js +++ b/WebInterface/wasm/webhogg/graphics.js @@ -73,14 +73,177 @@ function game_logic_entry(worker) { __exports.game_logic_entry = game_logic_entry /** -* @param {any} worker * @returns {void} */ -function graphics_entry(worker) { - return wasm.graphics_entry(addHeapObject(worker)); +function graphics_entry() { + return wasm.graphics_entry(); } __exports.graphics_entry = graphics_entry +function getObject(idx) { return heap[idx]; } + +let cachegetUint32Memory = null; +function getUint32Memory() { + if (cachegetUint32Memory === null || cachegetUint32Memory.buffer !== wasm.memory.buffer) { + cachegetUint32Memory = new Uint32Array(wasm.memory.buffer); + } + return cachegetUint32Memory; +} + +function handleError(exnptr, e) { + const view = getUint32Memory(); + view[exnptr / 4] = 1; + view[exnptr / 4 + 1] = addHeapObject(e); +} + +function __widl_f_post_message_Worker(arg0, arg1, exnptr) { + try { + getObject(arg0).postMessage(getObject(arg1)); + } catch (e) { + handleError(exnptr, e); + } +} +__exports.__widl_f_post_message_Worker = __widl_f_post_message_Worker + +function __wbindgen_string_new(p, l) { return addHeapObject(getStringFromWasm(p, l)); } +__exports.__wbindgen_string_new = __wbindgen_string_new + +let WASM_VECTOR_LEN = 0; + +let cachedTextEncoder = new TextEncoder('utf-8'); + +let passStringToWasm; +if (typeof cachedTextEncoder.encodeInto === 'function') { + passStringToWasm = function(arg) { + + + let size = arg.length; + let ptr = wasm.__wbindgen_malloc(size); + let offset = 0; + { + const mem = getUint8Memory(); + for (; offset < arg.length; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + } + + if (offset !== arg.length) { + arg = arg.slice(offset); + ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + arg.length * 3); + const view = getUint8Memory().subarray(ptr + offset, ptr + size); + const ret = cachedTextEncoder.encodeInto(arg, view); + + offset += ret.written; + } + WASM_VECTOR_LEN = offset; + return ptr; + }; +} else { + passStringToWasm = function(arg) { + + + let size = arg.length; + let ptr = wasm.__wbindgen_malloc(size); + let offset = 0; + { + const mem = getUint8Memory(); + for (; offset < arg.length; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + } + + if (offset !== arg.length) { + const buf = cachedTextEncoder.encode(arg.slice(offset)); + ptr = wasm.__wbindgen_realloc(ptr, size, size = offset + buf.length); + getUint8Memory().set(buf, ptr + offset); + offset += buf.length; + } + WASM_VECTOR_LEN = offset; + return ptr; + }; +} + +function __wbindgen_debug_string(i, len_ptr) { + const debug_str = + val => { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debug_str(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debug_str(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message} + ${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} +; +const toString = Object.prototype.toString; +const val = getObject(i); +const debug = debug_str(val); +const ptr = passStringToWasm(debug); +getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN; +return ptr; +} +__exports.__wbindgen_debug_string = __wbindgen_debug_string + function __wbindgen_throw(ptr, len) { throw new Error(getStringFromWasm(ptr, len)); } @@ -95,6 +258,8 @@ function dropObject(idx) { function __wbindgen_object_drop_ref(i) { dropObject(i); } __exports.__wbindgen_object_drop_ref = __wbindgen_object_drop_ref +//!IMPORTANT_STUFF + const WASM_URL = './pkg/webhogg_bg.wasm'; const imports = { './webhogg': __exports }; @@ -103,9 +268,9 @@ let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports); res.then(result => { console.log(result); wasm = result.instance.exports; - wasm.graphics_entry(); + graphics_entry(); }); onmessage = function (e) { - console.log('gooot messaaage', e); + console.log('gooot messaaage', e.data); } diff --git a/WebInterface/wasm/webhogg/index.html b/WebInterface/wasm/webhogg/index.html index ce09537..ced7e94 100644 --- a/WebInterface/wasm/webhogg/index.html +++ b/WebInterface/wasm/webhogg/index.html @@ -3,7 +3,7 @@ webhogg - +