summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--WebInterface/wasm/webhogg/Cargo.toml6
-rw-r--r--WebInterface/wasm/webhogg/game_logic.js412
-rw-r--r--WebInterface/wasm/webhogg/graphics.js222
-rw-r--r--WebInterface/wasm/webhogg/index.html2
-rw-r--r--WebInterface/wasm/webhogg/loader.js281
-rw-r--r--WebInterface/wasm/webhogg/src/client_logger.rs3
-rw-r--r--WebInterface/wasm/webhogg/src/lib.rs23
-rw-r--r--WebInterface/wasm/webhogg/target/.rustc_info.json2
-rw-r--r--WebInterface/wasm/webhogg/update.py4
9 files changed, 631 insertions, 324 deletions
diff --git a/WebInterface/wasm/webhogg/Cargo.toml b/WebInterface/wasm/webhogg/Cargo.toml
index a2e5f8e..9d6e2ac 100644
--- a/WebInterface/wasm/webhogg/Cargo.toml
+++ b/WebInterface/wasm/webhogg/Cargo.toml
@@ -11,6 +11,7 @@ edition = "2018"
crate-type = ["cdylib"]
[dependencies]
+js-sys = "0.3"
wasm-bindgen = "0.2"
log = "0.4"
fern = "0.5"
@@ -19,8 +20,13 @@ fern = "0.5"
version = "0.3.22"
features = [
'Document',
+ 'Event',
+ 'MessageEvent',
'Element',
'HtmlCanvasElement',
+ 'WorkerGlobalScope',
+ 'DedicatedWorkerGlobalScope',
+ 'OffscreenCanvas',
'WebGl2RenderingContext',
'WebGlShader',
'WebGlProgram',
diff --git a/WebInterface/wasm/webhogg/game_logic.js b/WebInterface/wasm/webhogg/game_logic.js
new file mode 100644
index 0000000..d023228
--- /dev/null
+++ b/WebInterface/wasm/webhogg/game_logic.js
@@ -0,0 +1,412 @@
+const __exports = {};
+let wasm;
+
+const heap = new Array(32);
+
+heap.fill(undefined);
+
+heap.push(undefined, null, true, false);
+
+let heap_next = heap.length;
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+/**
+* @param {any} worker
+* @returns {void}
+*/
+function game_logic_entry(worker) {
+ return wasm.game_logic_entry(addHeapObject(worker));
+}
+__exports.game_logic_entry = game_logic_entry
+
+/**
+* @param {any} worker
+* @param {any} canvas
+* @returns {void}
+*/
+function graphics_entry(worker, canvas) {
+ return wasm.graphics_entry(addHeapObject(worker), addHeapObject(canvas));
+}
+__exports.graphics_entry = graphics_entry
+
+let cachedTextDecoder = new TextDecoder('utf-8');
+
+let cachegetUint8Memory = null;
+function getUint8Memory() {
+ if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) {
+ cachegetUint8Memory = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachegetUint8Memory;
+}
+
+function getStringFromWasm(ptr, len) {
+ return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len));
+}
+
+function __wbg_debug_eacd5b227c4c01c7(arg0, arg1, arg2, arg3, arg4, arg5) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ let varg2 = getStringFromWasm(arg2, arg3);
+ let varg4 = getStringFromWasm(arg4, arg5);
+ console.debug(varg0, varg2, varg4);
+}
+__exports.__wbg_debug_eacd5b227c4c01c7 = __wbg_debug_eacd5b227c4c01c7
+
+function __wbg_info_be654745b6a55079(arg0, arg1, arg2, arg3, arg4, arg5) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ let varg2 = getStringFromWasm(arg2, arg3);
+ let varg4 = getStringFromWasm(arg4, arg5);
+ console.info(varg0, varg2, varg4);
+}
+__exports.__wbg_info_be654745b6a55079 = __wbg_info_be654745b6a55079
+
+function __wbg_warn_804a0523852c6d10(arg0, arg1, arg2, arg3, arg4, arg5) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ let varg2 = getStringFromWasm(arg2, arg3);
+ let varg4 = getStringFromWasm(arg4, arg5);
+ console.warn(varg0, varg2, varg4);
+}
+__exports.__wbg_warn_804a0523852c6d10 = __wbg_warn_804a0523852c6d10
+
+function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ let varg2 = getStringFromWasm(arg2, arg3);
+ let varg4 = getStringFromWasm(arg4, arg5);
+ console.error(varg0, varg2, varg4);
+}
+__exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1
+
+function getObject(idx) { return heap[idx]; }
+
+function __widl_f_set_onmessage_DedicatedWorkerGlobalScope(arg0, arg1) {
+ getObject(arg0).onmessage = getObject(arg1);
+}
+__exports.__widl_f_set_onmessage_DedicatedWorkerGlobalScope = __widl_f_set_onmessage_DedicatedWorkerGlobalScope
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+function __widl_f_get_element_by_id_Document(arg0, arg1, arg2) {
+ let varg1 = getStringFromWasm(arg1, arg2);
+
+ const val = getObject(arg0).getElementById(varg1);
+ return isLikeNone(val) ? 0 : addHeapObject(val);
+
+}
+__exports.__widl_f_get_element_by_id_Document = __widl_f_get_element_by_id_Document
+
+function __widl_instanceof_HTMLCanvasElement(idx) { return getObject(idx) instanceof HTMLCanvasElement ? 1 : 0; }
+__exports.__widl_instanceof_HTMLCanvasElement = __widl_instanceof_HTMLCanvasElement
+
+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_get_context_HTMLCanvasElement(arg0, arg1, arg2, exnptr) {
+ let varg1 = getStringFromWasm(arg1, arg2);
+ try {
+
+ const val = getObject(arg0).getContext(varg1);
+ return isLikeNone(val) ? 0 : addHeapObject(val);
+
+ } catch (e) {
+ handleError(exnptr, e);
+ }
+}
+__exports.__widl_f_get_context_HTMLCanvasElement = __widl_f_get_context_HTMLCanvasElement
+
+function __widl_f_data_MessageEvent(arg0) {
+ return addHeapObject(getObject(arg0).data);
+}
+__exports.__widl_f_data_MessageEvent = __widl_f_data_MessageEvent
+
+function __widl_instanceof_WebGL2RenderingContext(idx) { return getObject(idx) instanceof WebGL2RenderingContext ? 1 : 0; }
+__exports.__widl_instanceof_WebGL2RenderingContext = __widl_instanceof_WebGL2RenderingContext
+
+function __widl_instanceof_Window(idx) { return getObject(idx) instanceof Window ? 1 : 0; }
+__exports.__widl_instanceof_Window = __widl_instanceof_Window
+
+function __widl_f_document_Window(arg0) {
+
+ const val = getObject(arg0).document;
+ return isLikeNone(val) ? 0 : addHeapObject(val);
+
+}
+__exports.__widl_f_document_Window = __widl_f_document_Window
+
+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 __wbg_newnoargs_a172f39151049128(arg0, arg1) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ return addHeapObject(new Function(varg0));
+}
+__exports.__wbg_newnoargs_a172f39151049128 = __wbg_newnoargs_a172f39151049128
+
+function __wbg_call_8a9c8b0a32a202ff(arg0, arg1, exnptr) {
+ try {
+ return addHeapObject(getObject(arg0).call(getObject(arg1)));
+ } catch (e) {
+ handleError(exnptr, e);
+ }
+}
+__exports.__wbg_call_8a9c8b0a32a202ff = __wbg_call_8a9c8b0a32a202ff
+
+function __wbg_new0_b4c0f6100aa61878() {
+ return addHeapObject(new Date());
+}
+__exports.__wbg_new0_b4c0f6100aa61878 = __wbg_new0_b4c0f6100aa61878
+
+function __wbg_toISOString_580e1bcc780bf968(arg0) {
+ return addHeapObject(getObject(arg0).toISOString());
+}
+__exports.__wbg_toISOString_580e1bcc780bf968 = __wbg_toISOString_580e1bcc780bf968
+
+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_string_get(i, len_ptr) {
+ let obj = getObject(i);
+ if (typeof(obj) !== 'string') return 0;
+ const ptr = passStringToWasm(obj);
+ getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN;
+ return ptr;
+}
+__exports.__wbindgen_string_get = __wbindgen_string_get
+
+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 dropObject(idx) {
+ if (idx < 36) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+
+function __wbindgen_cb_drop(i) {
+ const obj = takeObject(i).original;
+ if (obj.cnt-- == 1) {
+ obj.a = 0;
+ return 1;
+ }
+ return 0;
+}
+__exports.__wbindgen_cb_drop = __wbindgen_cb_drop
+
+function __wbindgen_throw(ptr, len) {
+ throw new Error(getStringFromWasm(ptr, len));
+}
+__exports.__wbindgen_throw = __wbindgen_throw
+
+function __wbindgen_closure_wrapper59(a, b, _ignored) {
+ const f = wasm.__wbg_function_table.get(25);
+ const d = wasm.__wbg_function_table.get(26);
+ const cb = function(arg0) {
+ this.cnt++;
+ let a = this.a;
+ this.a = 0;
+ try {
+ return f(a, b, addHeapObject(arg0));
+
+ } finally {
+ if (--this.cnt === 0) d(a, b);
+ else this.a = a;
+
+ }
+
+ };
+ cb.a = a;
+ cb.cnt = 1;
+ let real = cb.bind(cb);
+ real.original = cb;
+ return addHeapObject(real);
+}
+__exports.__wbindgen_closure_wrapper59 = __wbindgen_closure_wrapper59
+
+function __wbindgen_object_clone_ref(idx) {
+ return addHeapObject(getObject(idx));
+}
+__exports.__wbindgen_object_clone_ref = __wbindgen_object_clone_ref
+
+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 };
+
+onmessage = function (e) {
+ console.log('transport canvas');
+
+ let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
+
+ res.then(result => {
+ wasm = result.instance.exports;
+ game_logic_entry(graphics);
+ });
+ let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'});
+ graphics.postMessage(e.data, [e.data.canvas]);
+}
diff --git a/WebInterface/wasm/webhogg/graphics.js b/WebInterface/wasm/webhogg/graphics.js
index bafae3d..5f817fd 100644
--- a/WebInterface/wasm/webhogg/graphics.js
+++ b/WebInterface/wasm/webhogg/graphics.js
@@ -1,6 +1,41 @@
const __exports = {};
let wasm;
+const heap = new Array(32);
+
+heap.fill(undefined);
+
+heap.push(undefined, null, true, false);
+
+let heap_next = heap.length;
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+/**
+* @param {any} worker
+* @returns {void}
+*/
+function game_logic_entry(worker) {
+ return wasm.game_logic_entry(addHeapObject(worker));
+}
+__exports.game_logic_entry = game_logic_entry
+
+/**
+* @param {any} worker
+* @param {any} canvas
+* @returns {void}
+*/
+function graphics_entry(worker, canvas) {
+ return wasm.graphics_entry(addHeapObject(worker), addHeapObject(canvas));
+}
+__exports.graphics_entry = graphics_entry
+
let cachedTextDecoder = new TextDecoder('utf-8');
let cachegetUint8Memory = null;
@@ -47,40 +82,28 @@ function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) {
}
__exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1
-const heap = new Array(32);
+function getObject(idx) { return heap[idx]; }
-heap.fill(undefined);
+function __widl_f_set_onmessage_DedicatedWorkerGlobalScope(arg0, arg1) {
+ getObject(arg0).onmessage = getObject(arg1);
+}
+__exports.__widl_f_set_onmessage_DedicatedWorkerGlobalScope = __widl_f_set_onmessage_DedicatedWorkerGlobalScope
-heap.push(undefined, null, true, false);
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
-let heap_next = heap.length;
+function __widl_f_get_element_by_id_Document(arg0, arg1, arg2) {
+ let varg1 = getStringFromWasm(arg1, arg2);
-function addHeapObject(obj) {
- if (heap_next === heap.length) heap.push(heap.length + 1);
- const idx = heap_next;
- heap_next = heap[idx];
+ const val = getObject(arg0).getElementById(varg1);
+ return isLikeNone(val) ? 0 : addHeapObject(val);
- heap[idx] = obj;
- return idx;
}
-/**
-* @param {any} worker
-* @returns {void}
-*/
-function game_logic_entry(worker) {
- return wasm.game_logic_entry(addHeapObject(worker));
-}
-__exports.game_logic_entry = game_logic_entry
-
-/**
-* @returns {void}
-*/
-function graphics_entry() {
- return wasm.graphics_entry();
-}
-__exports.graphics_entry = graphics_entry
+__exports.__widl_f_get_element_by_id_Document = __widl_f_get_element_by_id_Document
-function getObject(idx) { return heap[idx]; }
+function __widl_instanceof_HTMLCanvasElement(idx) { return getObject(idx) instanceof HTMLCanvasElement ? 1 : 0; }
+__exports.__widl_instanceof_HTMLCanvasElement = __widl_instanceof_HTMLCanvasElement
let cachegetUint32Memory = null;
function getUint32Memory() {
@@ -96,6 +119,38 @@ function handleError(exnptr, e) {
view[exnptr / 4 + 1] = addHeapObject(e);
}
+function __widl_f_get_context_HTMLCanvasElement(arg0, arg1, arg2, exnptr) {
+ let varg1 = getStringFromWasm(arg1, arg2);
+ try {
+
+ const val = getObject(arg0).getContext(varg1);
+ return isLikeNone(val) ? 0 : addHeapObject(val);
+
+ } catch (e) {
+ handleError(exnptr, e);
+ }
+}
+__exports.__widl_f_get_context_HTMLCanvasElement = __widl_f_get_context_HTMLCanvasElement
+
+function __widl_f_data_MessageEvent(arg0) {
+ return addHeapObject(getObject(arg0).data);
+}
+__exports.__widl_f_data_MessageEvent = __widl_f_data_MessageEvent
+
+function __widl_instanceof_WebGL2RenderingContext(idx) { return getObject(idx) instanceof WebGL2RenderingContext ? 1 : 0; }
+__exports.__widl_instanceof_WebGL2RenderingContext = __widl_instanceof_WebGL2RenderingContext
+
+function __widl_instanceof_Window(idx) { return getObject(idx) instanceof Window ? 1 : 0; }
+__exports.__widl_instanceof_Window = __widl_instanceof_Window
+
+function __widl_f_document_Window(arg0) {
+
+ const val = getObject(arg0).document;
+ return isLikeNone(val) ? 0 : addHeapObject(val);
+
+}
+__exports.__widl_f_document_Window = __widl_f_document_Window
+
function __widl_f_post_message_Worker(arg0, arg1, exnptr) {
try {
getObject(arg0).postMessage(getObject(arg1));
@@ -105,6 +160,31 @@ function __widl_f_post_message_Worker(arg0, arg1, exnptr) {
}
__exports.__widl_f_post_message_Worker = __widl_f_post_message_Worker
+function __wbg_newnoargs_a172f39151049128(arg0, arg1) {
+ let varg0 = getStringFromWasm(arg0, arg1);
+ return addHeapObject(new Function(varg0));
+}
+__exports.__wbg_newnoargs_a172f39151049128 = __wbg_newnoargs_a172f39151049128
+
+function __wbg_call_8a9c8b0a32a202ff(arg0, arg1, exnptr) {
+ try {
+ return addHeapObject(getObject(arg0).call(getObject(arg1)));
+ } catch (e) {
+ handleError(exnptr, e);
+ }
+}
+__exports.__wbg_call_8a9c8b0a32a202ff = __wbg_call_8a9c8b0a32a202ff
+
+function __wbg_new0_b4c0f6100aa61878() {
+ return addHeapObject(new Date());
+}
+__exports.__wbg_new0_b4c0f6100aa61878 = __wbg_new0_b4c0f6100aa61878
+
+function __wbg_toISOString_580e1bcc780bf968(arg0) {
+ return addHeapObject(getObject(arg0).toISOString());
+}
+__exports.__wbg_toISOString_580e1bcc780bf968 = __wbg_toISOString_580e1bcc780bf968
+
function __wbindgen_string_new(p, l) { return addHeapObject(getStringFromWasm(p, l)); }
__exports.__wbindgen_string_new = __wbindgen_string_new
@@ -167,6 +247,15 @@ if (typeof cachedTextEncoder.encodeInto === 'function') {
};
}
+function __wbindgen_string_get(i, len_ptr) {
+ let obj = getObject(i);
+ if (typeof(obj) !== 'string') return 0;
+ const ptr = passStringToWasm(obj);
+ getUint32Memory()[len_ptr / 4] = WASM_VECTOR_LEN;
+ return ptr;
+}
+__exports.__wbindgen_string_get = __wbindgen_string_get
+
function __wbindgen_debug_string(i, len_ptr) {
const debug_str =
val => {
@@ -244,33 +333,88 @@ return ptr;
}
__exports.__wbindgen_debug_string = __wbindgen_debug_string
+function dropObject(idx) {
+ if (idx < 36) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+
+function __wbindgen_cb_drop(i) {
+ const obj = takeObject(i).original;
+ if (obj.cnt-- == 1) {
+ obj.a = 0;
+ return 1;
+ }
+ return 0;
+}
+__exports.__wbindgen_cb_drop = __wbindgen_cb_drop
+
function __wbindgen_throw(ptr, len) {
throw new Error(getStringFromWasm(ptr, len));
}
__exports.__wbindgen_throw = __wbindgen_throw
-function dropObject(idx) {
- if (idx < 36) return;
- heap[idx] = heap_next;
- heap_next = idx;
+function __wbindgen_closure_wrapper59(a, b, _ignored) {
+ const f = wasm.__wbg_function_table.get(25);
+ const d = wasm.__wbg_function_table.get(26);
+ const cb = function(arg0) {
+ this.cnt++;
+ let a = this.a;
+ this.a = 0;
+ try {
+ return f(a, b, addHeapObject(arg0));
+
+ } finally {
+ if (--this.cnt === 0) d(a, b);
+ else this.a = a;
+
+ }
+
+ };
+ cb.a = a;
+ cb.cnt = 1;
+ let real = cb.bind(cb);
+ real.original = cb;
+ return addHeapObject(real);
}
+__exports.__wbindgen_closure_wrapper59 = __wbindgen_closure_wrapper59
+
+function __wbindgen_object_clone_ref(idx) {
+ return addHeapObject(getObject(idx));
+}
+__exports.__wbindgen_object_clone_ref = __wbindgen_object_clone_ref
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 };
-let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
-res.then(result => {
- console.log(result);
- wasm = result.instance.exports;
- graphics_entry();
-});
+let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
+let first = true;
+let msg = null;
onmessage = function (e) {
- console.log('gooot messaaage', e.data);
+ if (first) {
+ first = false;
+ console.log('got context: ', e.data);
+ msg = e.data;
+ }
+}
+while (msg === null) {
+ console.log('yay');
+ res.then(result => {
+ wasm = result.instance.exports;
+ console.log('context sndng: ', msg);
+ graphics_entry(self, msg);
+ });
+ break;
}
diff --git a/WebInterface/wasm/webhogg/index.html b/WebInterface/wasm/webhogg/index.html
index ced7e94..ad951a6 100644
--- a/WebInterface/wasm/webhogg/index.html
+++ b/WebInterface/wasm/webhogg/index.html
@@ -3,7 +3,6 @@
<head>
<meta charset="UTF-8">
<title>webhogg</title>
- <script src='loader.js'></script>
<style>
body {
margin: 0;
@@ -21,4 +20,5 @@
<body>
<canvas id='canvas'></canvas>
</body>
+ <script src='loader.js'></script>
</html>
diff --git a/WebInterface/wasm/webhogg/loader.js b/WebInterface/wasm/webhogg/loader.js
index 1fc8584..51c4354 100644
--- a/WebInterface/wasm/webhogg/loader.js
+++ b/WebInterface/wasm/webhogg/loader.js
@@ -1,276 +1,9 @@
-const __exports = {};
-let wasm;
+let canvas = document.getElementById('canvas');
-let cachedTextDecoder = new TextDecoder('utf-8');
-
-let cachegetUint8Memory = null;
-function getUint8Memory() {
- if (cachegetUint8Memory === null || cachegetUint8Memory.buffer !== wasm.memory.buffer) {
- cachegetUint8Memory = new Uint8Array(wasm.memory.buffer);
- }
- return cachegetUint8Memory;
-}
-
-function getStringFromWasm(ptr, len) {
- return cachedTextDecoder.decode(getUint8Memory().subarray(ptr, ptr + len));
-}
-
-function __wbg_debug_eacd5b227c4c01c7(arg0, arg1, arg2, arg3, arg4, arg5) {
- let varg0 = getStringFromWasm(arg0, arg1);
- let varg2 = getStringFromWasm(arg2, arg3);
- let varg4 = getStringFromWasm(arg4, arg5);
- console.debug(varg0, varg2, varg4);
-}
-__exports.__wbg_debug_eacd5b227c4c01c7 = __wbg_debug_eacd5b227c4c01c7
-
-function __wbg_info_be654745b6a55079(arg0, arg1, arg2, arg3, arg4, arg5) {
- let varg0 = getStringFromWasm(arg0, arg1);
- let varg2 = getStringFromWasm(arg2, arg3);
- let varg4 = getStringFromWasm(arg4, arg5);
- console.info(varg0, varg2, varg4);
-}
-__exports.__wbg_info_be654745b6a55079 = __wbg_info_be654745b6a55079
-
-function __wbg_warn_804a0523852c6d10(arg0, arg1, arg2, arg3, arg4, arg5) {
- let varg0 = getStringFromWasm(arg0, arg1);
- let varg2 = getStringFromWasm(arg2, arg3);
- let varg4 = getStringFromWasm(arg4, arg5);
- console.warn(varg0, varg2, varg4);
-}
-__exports.__wbg_warn_804a0523852c6d10 = __wbg_warn_804a0523852c6d10
-
-function __wbg_error_56a861ecc80f27e1(arg0, arg1, arg2, arg3, arg4, arg5) {
- let varg0 = getStringFromWasm(arg0, arg1);
- let varg2 = getStringFromWasm(arg2, arg3);
- let varg4 = getStringFromWasm(arg4, arg5);
- console.error(varg0, varg2, varg4);
-}
-__exports.__wbg_error_56a861ecc80f27e1 = __wbg_error_56a861ecc80f27e1
-
-const heap = new Array(32);
-
-heap.fill(undefined);
-
-heap.push(undefined, null, true, false);
-
-let heap_next = heap.length;
-
-function addHeapObject(obj) {
- if (heap_next === heap.length) heap.push(heap.length + 1);
- const idx = heap_next;
- heap_next = heap[idx];
-
- heap[idx] = obj;
- return idx;
-}
-/**
-* @param {any} worker
-* @returns {void}
-*/
-function game_logic_entry(worker) {
- return wasm.game_logic_entry(addHeapObject(worker));
-}
-__exports.game_logic_entry = game_logic_entry
-
-/**
-* @returns {void}
-*/
-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));
-}
-__exports.__wbindgen_throw = __wbindgen_throw
-
-function dropObject(idx) {
- if (idx < 36) return;
- heap[idx] = heap_next;
- heap_next = 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 };
-let res = WebAssembly.instantiateStreaming(fetch(WASM_URL), imports);
-
-let graphics = new Worker('./graphics.js', {type: 'module', credentials: 'include'});
-
-res.then(result => {
- console.log(result);
- wasm = result.instance.exports;
- console.log('jsjs value', graphics);
- game_logic_entry(graphics);
-});
+let game_logic = new Worker(
+ './game_logic.js',
+ {type: 'module', credentials: 'include'}
+);
+let ofc = canvas.transferControlToOffscreen();
+game_logic.postMessage({canvas: ofc}, [ofc]);
diff --git a/WebInterface/wasm/webhogg/src/client_logger.rs b/WebInterface/wasm/webhogg/src/client_logger.rs
index f71918f..f537631 100644
--- a/WebInterface/wasm/webhogg/src/client_logger.rs
+++ b/WebInterface/wasm/webhogg/src/client_logger.rs
@@ -32,8 +32,9 @@ fn log(rec: &log::Record) {
pub fn init_logger() {
fern::Dispatch::new().format(|out, message, record|{
out.finish(format_args!(
- "%c{}%c {} > {}",
+ "%c{}%c |{}| {} > {}",
record.level(),
+ String::from(js_sys::Date::new_0().to_iso_string()),
record.target(),
message
)
diff --git a/WebInterface/wasm/webhogg/src/lib.rs b/WebInterface/wasm/webhogg/src/lib.rs
index 9d052cd..2ee7267 100644
--- a/WebInterface/wasm/webhogg/src/lib.rs
+++ b/WebInterface/wasm/webhogg/src/lib.rs
@@ -22,20 +22,31 @@ fn run_application() {
pub fn game_logic_entry(worker: web_sys::Worker) {
client_logger::init_logger();
- info!("game logic initialisation");
- info!("js value: {:?}", worker);
- worker.post_message(&wasm_bindgen::JsValue::from_str("msg frm wasm_gLe")).unwrap();
+ info!("hello from game logic wasm");
+ info!("begin long calculation in game logic thread");
+ worker.post_message(&wasm_bindgen::JsValue::from_str("premsg frm wasm_gLe"))
+ .unwrap();
+ info!("killed game logic");
}
#[wasm_bindgen]
-pub fn graphics_entry() {
+pub fn graphics_entry(worker: web_sys::DedicatedWorkerGlobalScope,
+ canvas: web_sys::OffscreenCanvas) {
client_logger::init_logger();
- info!("graphics initialisation");
+ info!("hello from graphics wasm {:?}", canvas);
+ let handler = wasm_bindgen::closure::Closure::once_into_js(
+ (|e: web_sys::MessageEvent| {
+ info!("things are getting wired: {:?}", e.data());
+ }));
+
+ worker.set_onmessage(Some(&js_sys::Function::from(handler)));
+ entry2();
+ info!("killed graphics");
}
pub fn entry2() {
- client_logger::init_logger();
+ // client_logger::init_logger();
info!("begin running wasm application");
diff --git a/WebInterface/wasm/webhogg/target/.rustc_info.json b/WebInterface/wasm/webhogg/target/.rustc_info.json
index 94a43da..6f83518 100644
--- a/WebInterface/wasm/webhogg/target/.rustc_info.json
+++ b/WebInterface/wasm/webhogg/target/.rustc_info.json
@@ -1 +1 @@
-{"rustc_fingerprint":7082560745936267572,"outputs":{"1617349019360157463":["___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n",""],"6217262102979750783":["___.wasm\nlib___.rlib\n___.wasm\nlib___.a\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"wasm32\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_os=\"unknown\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\n","warning: dropping unsupported crate type `dylib` for target `wasm32-unknown-unknown`\n\nwarning: dropping unsupported crate type `proc-macro` for target `wasm32-unknown-unknown`\n\n"],"1164083562126845933":["rustc 1.34.1 (fc50f328b 2019-04-24)\nbinary: rustc\ncommit-hash: fc50f328b0353b285421b8ff5d4100966387a997\ncommit-date: 2019-04-24\nhost: x86_64-unknown-linux-gnu\nrelease: 1.34.1\nLLVM version: 8.0\n",""]},"successes":{}} \ No newline at end of file
+{"rustc_fingerprint":5653700290818914945,"outputs":{"1164083562126845933":["rustc 1.34.1 (fc50f328b 2019-04-24)\nbinary: rustc\ncommit-hash: fc50f328b0353b285421b8ff5d4100966387a997\ncommit-date: 2019-04-24\nhost: x86_64-unknown-linux-gnu\nrelease: 1.34.1\nLLVM version: 8.0\n",""],"6217262102979750783":["___.wasm\nlib___.rlib\n___.wasm\nlib___.a\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"wasm32\"\ntarget_endian=\"little\"\ntarget_env=\"\"\ntarget_os=\"unknown\"\ntarget_pointer_width=\"32\"\ntarget_vendor=\"unknown\"\n","warning: dropping unsupported crate type `dylib` for target `wasm32-unknown-unknown`\n\nwarning: dropping unsupported crate type `proc-macro` for target `wasm32-unknown-unknown`\n\n"],"1617349019360157463":["___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\ndebug_assertions\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n",""]},"successes":{}} \ No newline at end of file
diff --git a/WebInterface/wasm/webhogg/update.py b/WebInterface/wasm/webhogg/update.py
index 0a0171f..aad9395 100644
--- a/WebInterface/wasm/webhogg/update.py
+++ b/WebInterface/wasm/webhogg/update.py
@@ -9,7 +9,7 @@ def rf(fn):
return c
nc = rf('pkg/webhogg.js')
-m1 = rf('loader.js')
+m1 = rf('game_logic.js')
m2 = rf('graphics.js')
nc = nc.split('function init(module) {')[0].strip('\n')
@@ -22,7 +22,7 @@ nc += '\n' * 2 + ISC
m1 = nc + m1
m2 = nc + m2
-with open('loader.js', 'w') as f:
+with open('game_logic.js', 'w') as f:
f.write(m1)
with open('graphics.js', 'w') as f: