From 862f5b0854a69e777218f1f171409fa16a50dfac Mon Sep 17 00:00:00 2001 From: Sarsoo Date: Tue, 22 Jun 2021 15:47:10 +0000 Subject: [PATCH] deploy: 07d2e0bb68aead3f42c0f0838cb404c89ad727f8 --- 0df8a1f245dcf8088cf8.module.wasm | Bin 0 -> 64604 bytes aeaab58e75e4a88187cc.module.wasm | Bin 65147 -> 0 bytes index.html | 26 +++++++++++++++----------- index_js.bootstrap.js | 6 +++--- 4 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 0df8a1f245dcf8088cf8.module.wasm delete mode 100644 aeaab58e75e4a88187cc.module.wasm diff --git a/0df8a1f245dcf8088cf8.module.wasm b/0df8a1f245dcf8088cf8.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..339a05109752a564f9b4477aacc6bb959a08a336 GIT binary patch literal 64604 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 a9qTR&d0KQ_A1~4yZX_e7SeZ$>>Hh(jJJOv1 literal 0 HcmV?d00001 diff --git a/aeaab58e75e4a88187cc.module.wasm b/aeaab58e75e4a88187cc.module.wasm deleted file mode 100644 index f22e217f82262102832fdcd89f7045c54f7c4f23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65147 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 QRQZ)xk+D-w%_Lp@{~#!ZV*mgE diff --git a/index.html b/index.html index b04985d..d38ae8e 100644 --- a/index.html +++ b/index.html @@ -30,19 +30,24 @@
-

Game of Life

+

Game of Life 🚀

+
+
+

An implementation of the standard Conway Game of Life. The game logic is written in WASM-targeted Rust with a light Js frontend. Read through the source code here. It was written following the guides in the Rust & WebAssembly book.

+
+
+ class="form-label">Frame Interval: 100ms
+ class="form-label">Random Threshold: 50%
@@ -75,18 +80,19 @@
- - + --> +
- +
- +
@@ -98,9 +104,7 @@ - - - + \ No newline at end of file diff --git a/index_js.bootstrap.js b/index_js.bootstrap.js index f448e90..c985dd2 100644 --- a/index_js.bootstrap.js +++ b/index_js.bootstrap.js @@ -15,7 +15,7 @@ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"init\": () => (/* binding */ init),\n/* harmony export */ \"Cell\": () => (/* binding */ Cell),\n/* harmony export */ \"Universe\": () => (/* binding */ Universe),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* binding */ __wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_string_new\": () => (/* binding */ __wbindgen_string_new),\n/* harmony export */ \"__wbg_new_59cb74e423758ede\": () => (/* binding */ __wbg_new_59cb74e423758ede),\n/* harmony export */ \"__wbg_stack_558ba5917b466edd\": () => (/* binding */ __wbg_stack_558ba5917b466edd),\n/* harmony export */ \"__wbg_error_4bb6c2a97407129a\": () => (/* binding */ __wbg_error_4bb6c2a97407129a),\n/* harmony export */ \"__wbg_log_9a99fb1af846153b\": () => (/* binding */ __wbg_log_9a99fb1af846153b),\n/* harmony export */ \"__wbg_time_8897e55ebee4075f\": () => (/* binding */ __wbg_time_8897e55ebee4075f),\n/* harmony export */ \"__wbg_timeEnd_6186a583833a7163\": () => (/* binding */ __wbg_timeEnd_6186a583833a7163),\n/* harmony export */ \"__wbindgen_throw\": () => (/* binding */ __wbindgen_throw)\n/* harmony export */ });\n/* harmony import */ var _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gameoflife_bg.wasm */ \"../pkg/gameoflife_bg.wasm\");\n/* module decorator */ module = __webpack_require__.hmd(module);\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__]);\n_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__)[0];\n\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n/**\n*/\nfunction init() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.init();\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n/**\n*/\nconst Cell = Object.freeze({ Dead:0,\"0\":\"Dead\",Alive:1,\"1\":\"Alive\", });\n/**\n*/\nclass Universe {\n\n static __wrap(ptr) {\n const obj = Object.create(Universe.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_universe_free(ptr);\n }\n /**\n */\n tick() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_tick(this.ptr);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} rand_threshold\n * @param {number} seed\n * @returns {Universe}\n */\n static new(width, height, rand_threshold, seed) {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_new(width, height, rand_threshold, seed);\n return Universe.__wrap(ret);\n }\n /**\n * @returns {string}\n */\n render() {\n try {\n const retptr = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_add_to_stack_pointer(-16);\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_render(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_add_to_stack_pointer(16);\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(r0, r1);\n }\n }\n /**\n * @returns {number}\n */\n width() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n height() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n cells() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_cells(this.ptr);\n return ret;\n }\n /**\n */\n reset() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_reset(this.ptr);\n }\n}\n\nfunction __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nfunction __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nfunction __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nfunction __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nfunction __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n};\n\nfunction __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nfunction __wbg_time_8897e55ebee4075f(arg0, arg1) {\n console.time(getStringFromWasm0(arg0, arg1));\n};\n\nfunction __wbg_timeEnd_6186a583833a7163(arg0, arg1) {\n console.timeEnd(getStringFromWasm0(arg0, arg1));\n};\n\nfunction __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n\n});\n\n//# sourceURL=webpack://game-of-life-web/../pkg/gameoflife_bg.js?"); +eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"init\": () => (/* binding */ init),\n/* harmony export */ \"Cell\": () => (/* binding */ Cell),\n/* harmony export */ \"Universe\": () => (/* binding */ Universe),\n/* harmony export */ \"__wbindgen_object_drop_ref\": () => (/* binding */ __wbindgen_object_drop_ref),\n/* harmony export */ \"__wbindgen_string_new\": () => (/* binding */ __wbindgen_string_new),\n/* harmony export */ \"__wbg_new_59cb74e423758ede\": () => (/* binding */ __wbg_new_59cb74e423758ede),\n/* harmony export */ \"__wbg_stack_558ba5917b466edd\": () => (/* binding */ __wbg_stack_558ba5917b466edd),\n/* harmony export */ \"__wbg_error_4bb6c2a97407129a\": () => (/* binding */ __wbg_error_4bb6c2a97407129a),\n/* harmony export */ \"__wbg_log_9a99fb1af846153b\": () => (/* binding */ __wbg_log_9a99fb1af846153b),\n/* harmony export */ \"__wbindgen_throw\": () => (/* binding */ __wbindgen_throw)\n/* harmony export */ });\n/* harmony import */ var _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./gameoflife_bg.wasm */ \"../pkg/gameoflife_bg.wasm\");\n/* module decorator */ module = __webpack_require__.hmd(module);\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__]);\n_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = (__webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__)[0];\n\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;\n\nlet cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nlet cachegetUint8Memory0 = null;\nfunction getUint8Memory0() {\n if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetUint8Memory0 = new Uint8Array(_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetUint8Memory0;\n}\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n/**\n*/\nfunction init() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.init();\n}\n\nlet cachegetInt32Memory0 = null;\nfunction getInt32Memory0() {\n if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer) {\n cachegetInt32Memory0 = new Int32Array(_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.memory.buffer);\n }\n return cachegetInt32Memory0;\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nconst lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;\n\nlet cachedTextEncoder = new lTextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n/**\n*/\nconst Cell = Object.freeze({ Dead:0,\"0\":\"Dead\",Alive:1,\"1\":\"Alive\", });\n/**\n*/\nclass Universe {\n\n static __wrap(ptr) {\n const obj = Object.create(Universe.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbg_universe_free(ptr);\n }\n /**\n */\n tick() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_tick(this.ptr);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} rand_threshold\n * @param {number} seed\n * @returns {Universe}\n */\n static new(width, height, rand_threshold, seed) {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_new(width, height, rand_threshold, seed);\n return Universe.__wrap(ret);\n }\n /**\n * @returns {string}\n */\n render() {\n try {\n const retptr = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_add_to_stack_pointer(-16);\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_render(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_add_to_stack_pointer(16);\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(r0, r1);\n }\n }\n /**\n * @returns {number}\n */\n width() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_width(this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n height() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_height(this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n cells() {\n var ret = _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_cells(this.ptr);\n return ret;\n }\n /**\n */\n reset() {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.universe_reset(this.ptr);\n }\n}\n\nfunction __wbindgen_object_drop_ref(arg0) {\n takeObject(arg0);\n};\n\nfunction __wbindgen_string_new(arg0, arg1) {\n var ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nfunction __wbg_new_59cb74e423758ede() {\n var ret = new Error();\n return addHeapObject(ret);\n};\n\nfunction __wbg_stack_558ba5917b466edd(arg0, arg1) {\n var ret = getObject(arg1).stack;\n var ptr0 = passStringToWasm0(ret, _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_malloc, _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nfunction __wbg_error_4bb6c2a97407129a(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n _gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_0__.__wbindgen_free(arg0, arg1);\n }\n};\n\nfunction __wbg_log_9a99fb1af846153b(arg0) {\n console.log(getObject(arg0));\n};\n\nfunction __wbindgen_throw(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n\n});\n\n//# sourceURL=webpack://game-of-life-web/../pkg/gameoflife_bg.js?"); /***/ }), @@ -26,7 +26,7 @@ eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__ /***/ ((module, exports, __webpack_require__) => { "use strict"; -eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn __webpack_require__.v(exports, module.id, \"aeaab58e75e4a88187cc\", {\n\t\t\"./gameoflife_bg.js\": {\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbindgen_string_new\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_string_new,\n\t\t\t\"__wbg_new_59cb74e423758ede\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_59cb74e423758ede,\n\t\t\t\"__wbg_stack_558ba5917b466edd\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_558ba5917b466edd,\n\t\t\t\"__wbg_error_4bb6c2a97407129a\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_4bb6c2a97407129a,\n\t\t\t\"__wbg_log_9a99fb1af846153b\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_9a99fb1af846153b,\n\t\t\t\"__wbg_time_8897e55ebee4075f\": WEBPACK_IMPORTED_MODULE_0.__wbg_time_8897e55ebee4075f,\n\t\t\t\"__wbg_timeEnd_6186a583833a7163\": WEBPACK_IMPORTED_MODULE_0.__wbg_timeEnd_6186a583833a7163,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw\n\t\t}\n\t});\n}\n__webpack_require__.a(module, (__webpack_handle_async_dependencies__) => {\n\t/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./gameoflife_bg.js */ \"../pkg/gameoflife_bg.js\");\n\tvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]);\n\treturn __webpack_async_dependencies__.then ? __webpack_async_dependencies__.then(__webpack_instantiate__) : __webpack_instantiate__(__webpack_async_dependencies__);\n}, 1);\n\n//# sourceURL=webpack://game-of-life-web/../pkg/gameoflife_bg.wasm?"); +eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn __webpack_require__.v(exports, module.id, \"0df8a1f245dcf8088cf8\", {\n\t\t\"./gameoflife_bg.js\": {\n\t\t\t\"__wbindgen_object_drop_ref\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_object_drop_ref,\n\t\t\t\"__wbindgen_string_new\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_string_new,\n\t\t\t\"__wbg_new_59cb74e423758ede\": WEBPACK_IMPORTED_MODULE_0.__wbg_new_59cb74e423758ede,\n\t\t\t\"__wbg_stack_558ba5917b466edd\": WEBPACK_IMPORTED_MODULE_0.__wbg_stack_558ba5917b466edd,\n\t\t\t\"__wbg_error_4bb6c2a97407129a\": WEBPACK_IMPORTED_MODULE_0.__wbg_error_4bb6c2a97407129a,\n\t\t\t\"__wbg_log_9a99fb1af846153b\": WEBPACK_IMPORTED_MODULE_0.__wbg_log_9a99fb1af846153b,\n\t\t\t\"__wbindgen_throw\": WEBPACK_IMPORTED_MODULE_0.__wbindgen_throw\n\t\t}\n\t});\n}\n__webpack_require__.a(module, (__webpack_handle_async_dependencies__) => {\n\t/* harmony import */ var WEBPACK_IMPORTED_MODULE_0 = __webpack_require__(/*! ./gameoflife_bg.js */ \"../pkg/gameoflife_bg.js\");\n\tvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([WEBPACK_IMPORTED_MODULE_0]);\n\treturn __webpack_async_dependencies__.then ? __webpack_async_dependencies__.then(__webpack_instantiate__) : __webpack_instantiate__(__webpack_async_dependencies__);\n}, 1);\n\n//# sourceURL=webpack://game-of-life-web/../pkg/gameoflife_bg.wasm?"); /***/ }), @@ -37,7 +37,7 @@ eval("var __webpack_instantiate__ = ([WEBPACK_IMPORTED_MODULE_0]) => {\n\treturn /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var gameoflife__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gameoflife */ \"../pkg/gameoflife_bg.js\");\n/* harmony import */ var gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gameoflife/gameoflife_bg.wasm */ \"../pkg/gameoflife_bg.wasm\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([gameoflife__WEBPACK_IMPORTED_MODULE_0__, gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__]);\n([gameoflife__WEBPACK_IMPORTED_MODULE_0__, gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__);\n\n\n\n// let PLAY = true;\n// let PLAY = false;\n(0,gameoflife__WEBPACK_IMPORTED_MODULE_0__.init)();\nconst randSlider = document.getElementById(\"randThreshold\");\nconst randSliderLabel = document.getElementById(\"randThreshold-label\");\n\nconst CELL_SIZE = 5; // px\nconst GRID_COLOR = \"#BBBBBB\";\nconst DEAD_COLOR = \"#FFFFFF\";\nconst ALIVE_COLOR = \"#FF55AA\";\n\nlet universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(100, 100, randSlider.value, new Date().getTime() / 1000);\nlet width = universe.width();\nlet height = universe.height();\n\nconst canvas = document.getElementById(\"game-of-life-canvas\");\ncanvas.height = (CELL_SIZE + 1) * height + 1;\ncanvas.width = (CELL_SIZE + 1) * width + 1;\n\nconst ctx = canvas.getContext('2d');\n \nconst drawGrid = () => {\n ctx.beginPath();\n ctx.strokeStyle = GRID_COLOR;\n\n // Vertical lines.\n for (let i = 0; i <= width; i++) {\n ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0);\n ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1);\n }\n\n // Horizontal lines.\n for (let j = 0; j <= height; j++) {\n ctx.moveTo(0, j * (CELL_SIZE + 1) + 1);\n ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1);\n }\n\n ctx.stroke();\n};\n\nconst getIndex = (row, column) => {\n return row * width + column;\n};\n\nconst drawCells = () => {\n const cellsPtr = universe.cells();\n const cells = new Uint8Array(gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__.memory.buffer, cellsPtr, width * height);\n\n ctx.beginPath();\n\n for (let row = 0; row < height; row++) {\n for (let col = 0; col < width; col++) {\n const idx = getIndex(row, col);\n\n ctx.fillStyle = cells[idx] === gameoflife__WEBPACK_IMPORTED_MODULE_0__.Cell.Dead\n ? DEAD_COLOR\n : ALIVE_COLOR;\n\n ctx.fillRect(\n col * (CELL_SIZE + 1) + 1,\n row * (CELL_SIZE + 1) + 1,\n CELL_SIZE,\n CELL_SIZE\n );\n }\n }\n\n ctx.stroke();\n};\n\nconst renderSingle = () => {\n // fps.render(); //new\n universe.tick();\n \n drawGrid();\n drawCells();\n}\n\nconst start = () => {\n if(loop != null) clearInterval(loop);\n loop = setInterval(renderSingle, frameInterval);\n}\n\nconst stop = () => {\n if(loop != null) clearInterval(loop);\n loop = null;\n}\n\n// const renderLoop = () => {\n// if(PLAY){\n// renderSingle();\n// requestAnimationFrame(renderLoop);\n// }\n// };\n\n// renderSingle();\n// requestAnimationFrame(renderLoop);\n\nvar frameInterval = 50;\n// var loop = setInterval(renderSingle, frameInterval);\nvar loop = null;\n\nconst frameSlider = document.getElementById(\"frameRate\");\nconst frameSliderLabel = document.getElementById(\"frameRate-label\");\nconst onFrameSlider = () => {\n stop();\n\n frameInterval = frameSlider.value;\n frameSliderLabel.innerHTML = `Frame Interval: ${frameSlider.value}`;\n\n if(playCheck.checked) start();\n}\nframeSlider.onchange = onFrameSlider;\n\nconst onRandSlider = () => {\n stop();\n\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n randSliderLabel.innerHTML = `Rand Threshold: ${randSlider.value}`;\n\n if(playCheck.checked) start();\n}\nrandSlider.onchange = onRandSlider;\n\nconst refreshCanvas = () => {\n canvas.width = (CELL_SIZE + 1) * width + 1;\n canvas.height = (CELL_SIZE + 1) * height + 1;\n drawGrid();\n drawCells();\n}\n\nconst widthBox = document.getElementById(\"width\");\nconst onWidth = () => {\n // PLAY = false;\n width = widthBox.value;\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n // PLAY = true;\n // requestAnimationFrame(renderLoop);\n}\nwidthBox.onchange = onWidth;\n\nconst heightBox = document.getElementById(\"height\");\nconst onHeight = () => {\n // PLAY = false;\n height = heightBox.value;\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n // PLAY = true;\n // requestAnimationFrame(renderLoop);\n}\nheightBox.onchange = onHeight;\n\nconst playCheck = document.getElementById(\"play-check\");\nconst onPlay = () => {\n console.log(\"play: \" + playCheck.checked);\n if(playCheck.checked) {\n start();\n }else {\n stop();\n }\n // PLAY = playCheck.checked;\n // requestAnimationFrame(renderLoop);\n}\nplayCheck.onchange = onPlay;\n\nconst onStep = () => {\n console.log(\"stepping\");\n renderSingle();\n}\ndocument.getElementById(\"step\").onclick = onStep;\n\n\nconst onReset = () => {\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n}\ndocument.getElementById(\"reset\").onclick = onReset;\n\ndrawGrid();\ndrawCells();\n\nconst fps = new class {\n constructor() {\n this.fps = document.getElementById(\"fps\");\n this.frames = [];\n this.lastFrameTimeStamp = performance.now();\n }\n \n render() {\n // Convert the delta time since the last frame render into a measure\n // of frames per second.\n const now = performance.now();\n const delta = now - this.lastFrameTimeStamp;\n this.lastFrameTimeStamp = now;\n const fps = 1 / delta * 1000;\n \n // Save only the latest 100 timings.\n this.frames.push(fps);\n if (this.frames.length > 100) {\n this.frames.shift();\n }\n \n // Find the max, min, and mean of our 100 latest timings.\n let min = Infinity;\n let max = -Infinity;\n let sum = 0;\n for (let i = 0; i < this.frames.length; i++) {\n sum += this.frames[i];\n min = Math.min(this.frames[i], min);\n max = Math.max(this.frames[i], max);\n }\n let mean = sum / this.frames.length;\n \n // Render the statistics.\n this.fps.textContent = `\n Frames per Second:\n latest = ${Math.round(fps)} // \n avg of last 100 = ${Math.round(mean)} // \n min of last 100 = ${Math.round(min)} // \n max of last 100 = ${Math.round(max)}\n `.trim();\n }\n };\n});\n\n//# sourceURL=webpack://game-of-life-web/./index.js?"); +eval("__webpack_require__.a(module, async (__webpack_handle_async_dependencies__) => {\n__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var gameoflife__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! gameoflife */ \"../pkg/gameoflife_bg.js\");\n/* harmony import */ var gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! gameoflife/gameoflife_bg.wasm */ \"../pkg/gameoflife_bg.wasm\");\nvar __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([gameoflife__WEBPACK_IMPORTED_MODULE_0__, gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__]);\n([gameoflife__WEBPACK_IMPORTED_MODULE_0__, gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__] = __webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__);\n\n\n\n// let PLAY = true;\n// let PLAY = false;\n(0,gameoflife__WEBPACK_IMPORTED_MODULE_0__.init)();\nconst randSlider = document.getElementById(\"randThreshold\");\nconst randSliderLabel = document.getElementById(\"randThreshold-label\");\n\nconst CELL_SIZE = 5; // px\nconst GRID_COLOR = \"#BBBBBB\";\nconst DEAD_COLOR = \"#FFFFFF\";\nconst ALIVE_COLOR = \"#FF55AA\";\n\nlet universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(100, 100, randSlider.value, new Date().getTime() / 1000);\nlet width = universe.width();\nlet height = universe.height();\nlet play = false;\n\nconst canvas = document.getElementById(\"game-of-life-canvas\");\ncanvas.height = (CELL_SIZE + 1) * height + 1;\ncanvas.width = (CELL_SIZE + 1) * width + 1;\n\nconst ctx = canvas.getContext('2d');\n \n/**\n * Draw grid onto canvas prior to painting cells\n */\nconst drawGrid = () => {\n ctx.beginPath();\n ctx.strokeStyle = GRID_COLOR;\n\n // Vertical lines.\n for (let i = 0; i <= width; i++) {\n ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0);\n ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1);\n }\n\n // Horizontal lines.\n for (let j = 0; j <= height; j++) {\n ctx.moveTo(0, j * (CELL_SIZE + 1) + 1);\n ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1);\n }\n\n ctx.stroke();\n};\n\n/**\n * Get linear index from row and column indices\n * @param {*} row Row index\n * @param {*} column Column index\n * @returns Linear index\n */\nconst getIndex = (row, column) => {\n return row * width + column;\n};\n\n/**\n * Paint alive cells onto grid\n */\nconst drawCells = () => {\n const cellsPtr = universe.cells();\n const cells = new Uint8Array(gameoflife_gameoflife_bg_wasm__WEBPACK_IMPORTED_MODULE_1__.memory.buffer, cellsPtr, width * height);\n\n ctx.beginPath();\n\n for (let row = 0; row < height; row++) {\n for (let col = 0; col < width; col++) {\n const idx = getIndex(row, col);\n\n ctx.fillStyle = cells[idx] === gameoflife__WEBPACK_IMPORTED_MODULE_0__.Cell.Dead\n ? DEAD_COLOR\n : ALIVE_COLOR;\n\n ctx.fillRect(\n col * (CELL_SIZE + 1) + 1,\n row * (CELL_SIZE + 1) + 1,\n CELL_SIZE,\n CELL_SIZE\n );\n }\n }\n\n ctx.stroke();\n};\n\n/**\n * Single frame/step of game, tick universe, refresh UI\n */\nconst renderSingle = () => {\n // fps.render(); //new\n universe.tick();\n \n drawGrid();\n drawCells();\n}\n\n/**\n * Start interval timer to periodically iterate frames\n */\nconst start = () => {\n if(loop != null) clearInterval(loop);\n loop = setInterval(renderSingle, frameInterval);\n}\n\n/**\n * Clear interval timer to stop animation loop\n */\nconst stop = () => {\n if(loop != null) clearInterval(loop);\n loop = null;\n}\n\nvar frameInterval = 50;\n// var loop = setInterval(renderSingle, frameInterval);\nvar loop = null;\n\n// SLIDERS\n\nconst frameSlider = document.getElementById(\"frameRate\");\nconst frameSliderLabel = document.getElementById(\"frameRate-label\");\n/**\n * Handler for frame interval slider change, stop, change interval, start\n */\nconst onFrameSlider = () => {\n stop();\n\n frameInterval = frameSlider.value;\n frameSliderLabel.innerHTML = `Frame Interval: ${frameSlider.value}ms`;\n\n if(play) start();\n}\nframeSlider.onchange = onFrameSlider;\nframeSlider.value = 100;\n\n/**\n * Handler for random threshold slider change, get a new universe with new threshold\n */\nconst onRandSlider = () => {\n stop();\n\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n randSliderLabel.innerHTML = `Random Threshold: ${randSlider.value}%`;\n\n if(play) start();\n}\nrandSlider.onchange = onRandSlider;\nrandSlider.value = 50;\n\n/**\n * Refresh existing canvas, calculate dimensions and draw\n */\nconst refreshCanvas = () => {\n canvas.width = (CELL_SIZE + 1) * width + 1;\n canvas.height = (CELL_SIZE + 1) * height + 1;\n drawGrid();\n drawCells();\n}\n\n// INPUT BOXES\n\nconst widthBox = document.getElementById(\"width\");\n/**\n * Handler for width input box change, get a new universe of given size\n */\nconst onWidth = () => {\n // PLAY = false;\n width = widthBox.value;\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n // PLAY = true;\n // requestAnimationFrame(renderLoop);\n}\nwidthBox.onchange = onWidth;\n\nconst heightBox = document.getElementById(\"height\");\n/**\n * Handler for height input box change, get a new universe of given size\n */\nconst onHeight = () => {\n // PLAY = false;\n height = heightBox.value;\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n // PLAY = true;\n // requestAnimationFrame(renderLoop);\n}\nheightBox.onchange = onHeight;\n\n// BUTTONS\n\n/**\n * Click handler for step button, make single move\n */\nconst onPlay = () => {\n play = !play;\n\n // console.log(\"play: \" + play);\n if(play) {\n playButton.classList.remove(\"btn-success\");\n playButton.classList.add(\"btn-danger\");\n playButton.innerText = \"Stop\";\n start();\n }else {\n playButton.classList.add(\"btn-success\");\n playButton.classList.remove(\"btn-danger\");\n playButton.innerText = \"Play\";\n stop();\n }\n}\nconst playButton = document.getElementById(\"play\");\nplayButton.onclick = onPlay;\n\n/**\n * Click handler for step button, make single move\n */\nconst onStep = () => {\n console.log(\"stepping\");\n renderSingle();\n}\ndocument.getElementById(\"step\").onclick = onStep;\n\n/**\n * Click handler for reset button, generate a new universe and refresh the canvas\n */\nconst onReset = () => {\n universe = gameoflife__WEBPACK_IMPORTED_MODULE_0__.Universe.new(width, height, randSlider.value, new Date().getTime() / 1000);\n refreshCanvas();\n}\ndocument.getElementById(\"reset\").onclick = onReset;\n\ndrawGrid();\ndrawCells();\n\n});\n\n//# sourceURL=webpack://game-of-life-web/./index.js?"); /***/ })