From 128c8104b20b48d5fc00d7d374ffa90457157423 Mon Sep 17 00:00:00 2001 From: klangner Date: Thu, 19 Nov 2020 21:00:36 +0100 Subject: [PATCH] updated demo --- Cargo.toml | 2 +- demo/src/lib.rs | 11 +++++++++++ demo/www/index.html | 1 + demo/www/index.js | 7 +++++++ docs/0.bootstrap.js | 6 +++--- docs/bootstrap.js | 2 +- docs/f22182091a16774e383e.module.wasm | Bin 0 -> 111768 bytes docs/index.html | 1 + 8 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 docs/f22182091a16774e383e.module.wasm diff --git a/Cargo.toml b/Cargo.toml index b1a1374..8c7a4e8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mapgen" -version = "0.4.1" +version = "0.4.2" authors = ["Krzysztof Langner "] description = "Map generator for games (dungeons, worlds etc.)" keywords = ["game", "map", "map-generator"] diff --git a/demo/src/lib.rs b/demo/src/lib.rs index 5c59bf3..89ba923 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -110,6 +110,17 @@ impl World { World::new(width, height, map) } + pub fn new_voronoi(width: u32, height: u32, seed: u32) -> World { + World::print_map_info(format!("Voronoi Hive with the seed: {}", seed)); + let mut rng = StdRng::seed_from_u64(seed as u64); + let map = MapBuilder::new(width as usize, height as usize) + .with(VoronoiHive::new()) + .with(AreaStartingPosition::new(XStart::LEFT, YStart::TOP)) + .with(DistantExit::new()) + .build_with_rng(&mut rng); + World::new(width, height, map) + } + pub fn new_random(width: u32, height: u32, seed: u32) -> World { let mut rng = rand::thread_rng(); let px = rng.gen::(); diff --git a/demo/www/index.html b/demo/www/index.html index e3fc112..d3d6bc4 100644 --- a/demo/www/index.html +++ b/demo/www/index.html @@ -42,6 +42,7 @@ BSP Interior Drunkard Walk Maze + Voronoi Hive Random Generator diff --git a/demo/www/index.js b/demo/www/index.js index de206f1..6cef284 100644 --- a/demo/www/index.js +++ b/demo/www/index.js @@ -66,6 +66,12 @@ function newMaze() { requestAnimationFrame(renderLoop); } +function newVoronoi() { + var seed = Date.now(); + world = World.new_voronoi(GRID_COLS, GRID_ROWS, get_seed()); + requestAnimationFrame(renderLoop); +} + function newRandomGen() { var seed = Date.now(); world = World.new_random(GRID_COLS, GRID_ROWS, get_seed()); @@ -163,4 +169,5 @@ document.getElementById('bsp-rooms-option').addEventListener('click', newBspRoom document.getElementById('drunkard-option').addEventListener('click', newDrunkard); document.getElementById('bsp-interior-option').addEventListener('click', newBspInterior); document.getElementById('maze-option').addEventListener('click', newMaze); +document.getElementById('voronoi-option').addEventListener('click', newVoronoi); document.getElementById('random-option').addEventListener('click', newRandomGen); diff --git a/docs/0.bootstrap.js b/docs/0.bootstrap.js index 4328fad..47f77d7 100644 --- a/docs/0.bootstrap.js +++ b/docs/0.bootstrap.js @@ -20,7 +20,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _map /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module, global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Cell\", function() { return Cell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Position\", function() { return Position; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return World; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_drop_ref\", function() { return __wbindgen_object_drop_ref; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_3ac1b33c90b52596\", function() { return __wbg_getRandomValues_3ac1b33c90b52596; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_randomFillSync_6f956029658662ec\", function() { return __wbg_randomFillSync_6f956029658662ec; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_1c83eb4471d9eb9b\", function() { return __wbg_self_1c83eb4471d9eb9b; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_static_accessor_MODULE_abf5ae284bffdf45\", function() { return __wbg_static_accessor_MODULE_abf5ae284bffdf45; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_require_5b2b5b594d809d9f\", function() { return __wbg_require_5b2b5b594d809d9f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_crypto_c12f14e810edcaa2\", function() { return __wbg_crypto_c12f14e810edcaa2; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_msCrypto_679be765111ba775\", function() { return __wbg_msCrypto_679be765111ba775; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_is_undefined\", function() { return __wbindgen_is_undefined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_05a60bf171bfc2be\", function() { return __wbg_getRandomValues_05a60bf171bfc2be; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_instanceof_Window_adf3196bdc02b386\", function() { return __wbg_instanceof_Window_adf3196bdc02b386; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_document_6cc8d0b87c0a99b9\", function() { return __wbg_document_6cc8d0b87c0a99b9; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getElementById_0cb6ad9511b1efc0\", function() { return __wbg_getElementById_0cb6ad9511b1efc0; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_setinnerHTML_4ff235db1a3cb4d8\", function() { return __wbg_setinnerHTML_4ff235db1a3cb4d8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_call_8e95613cc6524977\", function() { return __wbg_call_8e95613cc6524977; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_clone_ref\", function() { return __wbindgen_object_clone_ref; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newnoargs_f3b8a801d5d4b079\", function() { return __wbg_newnoargs_f3b8a801d5d4b079; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_07b2f89e82ceb76d\", function() { return __wbg_self_07b2f89e82ceb76d; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_window_ba85d88572adc0dc\", function() { return __wbg_window_ba85d88572adc0dc; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_globalThis_b9277fc37e201fe5\", function() { return __wbg_globalThis_b9277fc37e201fe5; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_global_e16303fe83e1d57f\", function() { return __wbg_global_e16303fe83e1d57f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_throw\", function() { return __wbindgen_throw; });\n/* harmony import */ var _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mapgen_demo_bg.wasm */ \"../pkg/mapgen_demo_bg.wasm\");\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\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\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 !== _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"memory\"].buffer) {\n cachegetUint8Memory0 = new Uint8Array(_mapgen_demo_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 handleError(f) {\n return function () {\n try {\n return f.apply(this, arguments);\n\n } catch (e) {\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbindgen_exn_store\"](addHeapObject(e));\n }\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n/**\n*/\nconst Cell = Object.freeze({ Floor:0,\"0\":\"Floor\",Wall:1,\"1\":\"Wall\", });\n/**\n*/\nclass Position {\n\n static __wrap(ptr) {\n const obj = Object.create(Position.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbg_position_free\"](ptr);\n }\n /**\n * @param {number} col\n * @param {number} row\n * @returns {Position}\n */\n static new(col, row) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_new\"](col, row);\n return Position.__wrap(ret);\n }\n /**\n * @returns {number}\n */\n col() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_col\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n row() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_row\"](this.ptr);\n return ret >>> 0;\n }\n}\n/**\n*/\nclass World {\n\n static __wrap(ptr) {\n const obj = Object.create(World.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbg_world_free\"](ptr);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_cellular_automata(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_cellular_automata\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_simple_rooms(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_simple_rooms\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_bsp_rooms(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_bsp_rooms\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_bsp_interior(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_bsp_interior\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_drunkard(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_drunkard\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_maze(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_maze\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_random(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_random\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @returns {number}\n */\n width() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_col\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n height() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_height\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n tiles() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_tiles\"](this.ptr);\n return ret;\n }\n /**\n * @returns {Position}\n */\n player_pos() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_player_pos\"](this.ptr);\n return Position.__wrap(ret);\n }\n /**\n * @returns {Position}\n */\n exit_pos() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_exit_pos\"](this.ptr);\n return Position.__wrap(ret);\n }\n}\n\nconst __wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n};\n\nconst __wbg_getRandomValues_3ac1b33c90b52596 = function(arg0, arg1, arg2) {\n getObject(arg0).getRandomValues(getArrayU8FromWasm0(arg1, arg2));\n};\n\nconst __wbg_randomFillSync_6f956029658662ec = function(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nconst __wbg_self_1c83eb4471d9eb9b = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n});\n\nconst __wbg_static_accessor_MODULE_abf5ae284bffdf45 = function() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nconst __wbg_require_5b2b5b594d809d9f = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nconst __wbg_crypto_c12f14e810edcaa2 = function(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nconst __wbg_msCrypto_679be765111ba775 = function(arg0) {\n var ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nconst __wbindgen_is_undefined = function(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nconst __wbg_getRandomValues_05a60bf171bfc2be = function(arg0) {\n var ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nconst __wbg_instanceof_Window_adf3196bdc02b386 = function(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nconst __wbg_document_6cc8d0b87c0a99b9 = function(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nconst __wbg_getElementById_0cb6ad9511b1efc0 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nconst __wbg_setinnerHTML_4ff235db1a3cb4d8 = function(arg0, arg1, arg2) {\n getObject(arg0).innerHTML = getStringFromWasm0(arg1, arg2);\n};\n\nconst __wbg_call_8e95613cc6524977 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n});\n\nconst __wbindgen_object_clone_ref = function(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nconst __wbg_newnoargs_f3b8a801d5d4b079 = function(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nconst __wbg_self_07b2f89e82ceb76d = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n});\n\nconst __wbg_window_ba85d88572adc0dc = handleError(function() {\n var ret = window.window;\n return addHeapObject(ret);\n});\n\nconst __wbg_globalThis_b9277fc37e201fe5 = handleError(function() {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n});\n\nconst __wbg_global_e16303fe83e1d57f = handleError(function() {\n var ret = global.global;\n return addHeapObject(ret);\n});\n\nconst __wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../www/node_modules/webpack/buildin/harmony-module.js */ \"./node_modules/webpack/buildin/harmony-module.js\")(module), __webpack_require__(/*! ./../www/node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///../pkg/mapgen_demo_bg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(function(module, global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Cell\", function() { return Cell; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Position\", function() { return Position; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return World; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_drop_ref\", function() { return __wbindgen_object_drop_ref; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_3ac1b33c90b52596\", function() { return __wbg_getRandomValues_3ac1b33c90b52596; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_randomFillSync_6f956029658662ec\", function() { return __wbg_randomFillSync_6f956029658662ec; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_1c83eb4471d9eb9b\", function() { return __wbg_self_1c83eb4471d9eb9b; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_static_accessor_MODULE_abf5ae284bffdf45\", function() { return __wbg_static_accessor_MODULE_abf5ae284bffdf45; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_require_5b2b5b594d809d9f\", function() { return __wbg_require_5b2b5b594d809d9f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_crypto_c12f14e810edcaa2\", function() { return __wbg_crypto_c12f14e810edcaa2; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_msCrypto_679be765111ba775\", function() { return __wbg_msCrypto_679be765111ba775; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_is_undefined\", function() { return __wbindgen_is_undefined; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_05a60bf171bfc2be\", function() { return __wbg_getRandomValues_05a60bf171bfc2be; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_instanceof_Window_adf3196bdc02b386\", function() { return __wbg_instanceof_Window_adf3196bdc02b386; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_document_6cc8d0b87c0a99b9\", function() { return __wbg_document_6cc8d0b87c0a99b9; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getElementById_0cb6ad9511b1efc0\", function() { return __wbg_getElementById_0cb6ad9511b1efc0; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_setinnerHTML_4ff235db1a3cb4d8\", function() { return __wbg_setinnerHTML_4ff235db1a3cb4d8; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_call_8e95613cc6524977\", function() { return __wbg_call_8e95613cc6524977; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_clone_ref\", function() { return __wbindgen_object_clone_ref; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newnoargs_f3b8a801d5d4b079\", function() { return __wbg_newnoargs_f3b8a801d5d4b079; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_07b2f89e82ceb76d\", function() { return __wbg_self_07b2f89e82ceb76d; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_window_ba85d88572adc0dc\", function() { return __wbg_window_ba85d88572adc0dc; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_globalThis_b9277fc37e201fe5\", function() { return __wbg_globalThis_b9277fc37e201fe5; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_global_e16303fe83e1d57f\", function() { return __wbg_global_e16303fe83e1d57f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_throw\", function() { return __wbindgen_throw; });\n/* harmony import */ var _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mapgen_demo_bg.wasm */ \"../pkg/mapgen_demo_bg.wasm\");\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\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\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 !== _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"memory\"].buffer) {\n cachegetUint8Memory0 = new Uint8Array(_mapgen_demo_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 handleError(f) {\n return function () {\n try {\n return f.apply(this, arguments);\n\n } catch (e) {\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbindgen_exn_store\"](addHeapObject(e));\n }\n };\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n return getUint8Memory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n/**\n*/\nconst Cell = Object.freeze({ Floor:0,\"0\":\"Floor\",Wall:1,\"1\":\"Wall\", });\n/**\n*/\nclass Position {\n\n static __wrap(ptr) {\n const obj = Object.create(Position.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbg_position_free\"](ptr);\n }\n /**\n * @param {number} col\n * @param {number} row\n * @returns {Position}\n */\n static new(col, row) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_new\"](col, row);\n return Position.__wrap(ret);\n }\n /**\n * @returns {number}\n */\n col() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_col\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n row() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_row\"](this.ptr);\n return ret >>> 0;\n }\n}\n/**\n*/\nclass World {\n\n static __wrap(ptr) {\n const obj = Object.create(World.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n free() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"__wbg_world_free\"](ptr);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_cellular_automata(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_cellular_automata\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_simple_rooms(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_simple_rooms\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_bsp_rooms(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_bsp_rooms\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_bsp_interior(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_bsp_interior\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_drunkard(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_drunkard\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_maze(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_maze\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_voronoi(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_voronoi\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @param {number} width\n * @param {number} height\n * @param {number} seed\n * @returns {World}\n */\n static new_random(width, height, seed) {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_new_random\"](width, height, seed);\n return World.__wrap(ret);\n }\n /**\n * @returns {number}\n */\n width() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"position_col\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n height() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_height\"](this.ptr);\n return ret >>> 0;\n }\n /**\n * @returns {number}\n */\n tiles() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_tiles\"](this.ptr);\n return ret;\n }\n /**\n * @returns {Position}\n */\n player_pos() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_player_pos\"](this.ptr);\n return Position.__wrap(ret);\n }\n /**\n * @returns {Position}\n */\n exit_pos() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"world_exit_pos\"](this.ptr);\n return Position.__wrap(ret);\n }\n}\n\nconst __wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n};\n\nconst __wbg_getRandomValues_3ac1b33c90b52596 = function(arg0, arg1, arg2) {\n getObject(arg0).getRandomValues(getArrayU8FromWasm0(arg1, arg2));\n};\n\nconst __wbg_randomFillSync_6f956029658662ec = function(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n};\n\nconst __wbg_self_1c83eb4471d9eb9b = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n});\n\nconst __wbg_static_accessor_MODULE_abf5ae284bffdf45 = function() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nconst __wbg_require_5b2b5b594d809d9f = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n};\n\nconst __wbg_crypto_c12f14e810edcaa2 = function(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nconst __wbg_msCrypto_679be765111ba775 = function(arg0) {\n var ret = getObject(arg0).msCrypto;\n return addHeapObject(ret);\n};\n\nconst __wbindgen_is_undefined = function(arg0) {\n var ret = getObject(arg0) === undefined;\n return ret;\n};\n\nconst __wbg_getRandomValues_05a60bf171bfc2be = function(arg0) {\n var ret = getObject(arg0).getRandomValues;\n return addHeapObject(ret);\n};\n\nconst __wbg_instanceof_Window_adf3196bdc02b386 = function(arg0) {\n var ret = getObject(arg0) instanceof Window;\n return ret;\n};\n\nconst __wbg_document_6cc8d0b87c0a99b9 = function(arg0) {\n var ret = getObject(arg0).document;\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nconst __wbg_getElementById_0cb6ad9511b1efc0 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).getElementById(getStringFromWasm0(arg1, arg2));\n return isLikeNone(ret) ? 0 : addHeapObject(ret);\n};\n\nconst __wbg_setinnerHTML_4ff235db1a3cb4d8 = function(arg0, arg1, arg2) {\n getObject(arg0).innerHTML = getStringFromWasm0(arg1, arg2);\n};\n\nconst __wbg_call_8e95613cc6524977 = handleError(function(arg0, arg1) {\n var ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n});\n\nconst __wbindgen_object_clone_ref = function(arg0) {\n var ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nconst __wbg_newnoargs_f3b8a801d5d4b079 = function(arg0, arg1) {\n var ret = new Function(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nconst __wbg_self_07b2f89e82ceb76d = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n});\n\nconst __wbg_window_ba85d88572adc0dc = handleError(function() {\n var ret = window.window;\n return addHeapObject(ret);\n});\n\nconst __wbg_globalThis_b9277fc37e201fe5 = handleError(function() {\n var ret = globalThis.globalThis;\n return addHeapObject(ret);\n});\n\nconst __wbg_global_e16303fe83e1d57f = handleError(function() {\n var ret = global.global;\n return addHeapObject(ret);\n});\n\nconst __wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../www/node_modules/webpack/buildin/harmony-module.js */ \"./node_modules/webpack/buildin/harmony-module.js\")(module), __webpack_require__(/*! ./../www/node_modules/webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n//# sourceURL=webpack:///../pkg/mapgen_demo_bg.js?"); /***/ }), @@ -28,7 +28,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* WEBPACK VAR INJECTION */(f /*!**********************************!*\ !*** ../pkg/mapgen_demo_bg.wasm ***! \**********************************/ -/*! exports provided: memory, __wbg_world_free, __wbg_position_free, world_new_cellular_automata, world_new_simple_rooms, world_new_bsp_rooms, world_new_bsp_interior, world_new_drunkard, world_new_maze, world_new_random, world_height, world_tiles, world_player_pos, world_exit_pos, position_new, position_col, position_row, world_width, __wbindgen_exn_store */ +/*! exports provided: memory, __wbg_world_free, __wbg_position_free, world_new_cellular_automata, world_new_simple_rooms, world_new_bsp_rooms, world_new_bsp_interior, world_new_drunkard, world_new_maze, world_new_voronoi, world_new_random, world_height, world_tiles, world_player_pos, world_exit_pos, position_new, position_col, position_row, world_width, __wbindgen_exn_store */ /***/ (function(module, exports, __webpack_require__) { eval("\"use strict\";\n// Instantiate WebAssembly module\nvar wasmExports = __webpack_require__.w[module.i];\n__webpack_require__.r(exports);\n// export exports from WebAssembly module\nfor(var name in wasmExports) if(name != \"__webpack_init__\") exports[name] = wasmExports[name];\n// exec imports from WebAssembly module (for esm order)\n/* harmony import */ var m0 = __webpack_require__(/*! ./mapgen_demo_bg.js */ \"../pkg/mapgen_demo_bg.js\");\n\n\n// exec wasm module\nwasmExports[\"__webpack_init__\"]()\n\n//# sourceURL=webpack:///../pkg/mapgen_demo_bg.wasm?"); @@ -43,7 +43,7 @@ eval("\"use strict\";\n// Instantiate WebAssembly module\nvar wasmExports = __we /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var mapgen_demo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mapgen-demo */ \"../pkg/mapgen_demo.js\");\n/* harmony import */ var mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mapgen-demo/mapgen_demo_bg */ \"../pkg/mapgen_demo_bg.wasm\");\n\n\n\nconst CANVAS_SIZE = 750;\nconst GRID_COLS = 80;\nconst GRID_ROWS = 50;\nconst CELL_SIZE = CANVAS_SIZE/GRID_ROWS;\nconst TILE_SIZE = 39;\n\n// Init canvas\nconst canvas = document.getElementById(\"mapgen-canvas\");\ncanvas.height = CELL_SIZE * GRID_ROWS;\ncanvas.width = CELL_SIZE * GRID_COLS;\nconst ctx = canvas.getContext('2d');\n// Info box\nconst infoDiv = document.getElementById('map-info');\n// API to the WASM\nlet world = null;\n\n// Load tiles bitmap\nlet tiles_image = new Image();\ntiles_image.src = 'assets/tiles.png';\n\n// Take provided seed or generate new one\nfunction get_seed() {\n var seed_text = document.getElementById(\"seed\").value;\n if( seed_text.length > 0) {\n return Number(seed_text);\n } \n return Date.now();\n}\n\n// Map generators\nfunction newCellularAutomata() {\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_cellular_automata(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newSimpleRooms() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_simple_rooms(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newBspInterior() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_bsp_interior(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newDrunkard() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_drunkard(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newBspRooms() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_bsp_rooms(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newMaze() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_maze(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newRandomGen() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_random(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nconst renderLoop = () => {\n // universe.tick();\n drawCells();\n requestAnimationFrame(renderLoop);\n};\n\nconst getIndex = (row, column) => {\n return row * GRID_COLS + column;\n};\n\nconst is_inner_wall = (tiles, col, row) => {\n for (let c = Math.max(col - 1, 0); c < Math.min(col + 2, GRID_COLS); c++) {\n for (let r = Math.max(row - 1, 0); r < Math.min(row + 2, GRID_ROWS); r++) {\n if ((c != col || r != row) && tiles[getIndex(r, c)] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nconst draw_tile = (ctx, row, col, tile_type) => {\n var tile_x = 0;\n var tile_y = 0;\n if (tile_type == \"floor\") {\n tile_x = 3;\n tile_y = 2;\n } else if (tile_type == \"wall\") {\n tile_x = 0;\n tile_y = 3;\n } else if (tile_type == \"player\") {\n tile_x = 0;\n tile_y = 8;\n } else if (tile_type == \"exit\") {\n tile_x = 10;\n tile_y = 1;\n } else {\n tile_x = 18;\n tile_y = 0;\n }\n\n ctx.drawImage(\n tiles_image,\n tile_x * TILE_SIZE + 3,\n tile_y * TILE_SIZE + 3,\n TILE_SIZE - 3,\n TILE_SIZE - 3,\n col * CELL_SIZE,\n row * CELL_SIZE,\n CELL_SIZE,\n CELL_SIZE);\n\n}\n\nconst drawCells = () => {\n const tilesPtr = world.tiles();\n const tiles = new Uint8Array(mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__[\"memory\"].buffer, tilesPtr, GRID_COLS * GRID_ROWS);\n\n // tiles\n for (let row = 0; row < GRID_ROWS; row++) {\n for (let col = 0; col < GRID_COLS; col++) {\n const idx = getIndex(row, col);\n if (tiles[idx] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor) {\n draw_tile(ctx, row, col, \"floor\");\n } else if (is_inner_wall(tiles, col, row)){\n draw_tile(ctx, row, col, \"inner-wall\");\n } else {\n draw_tile(ctx, row, col, \"wall\");\n }\n }\n }\n\n // Player position\n let player = world.player_pos();\n draw_tile(ctx, player.row(), player.col(), \"player\");\n\n // Exit position\n let exit = world.exit_pos();\n draw_tile(ctx, exit.row(), exit.col(), \"exit\");\n};\n\nnewRandomGen();\n\n// Connect UI element\ndocument.getElementById('cellular-automata-option').addEventListener('click', newCellularAutomata);\ndocument.getElementById('simple-rooms-option').addEventListener('click', newSimpleRooms);\ndocument.getElementById('bsp-rooms-option').addEventListener('click', newBspRooms);\ndocument.getElementById('drunkard-option').addEventListener('click', newDrunkard);\ndocument.getElementById('bsp-interior-option').addEventListener('click', newBspInterior);\ndocument.getElementById('maze-option').addEventListener('click', newMaze);\ndocument.getElementById('random-option').addEventListener('click', newRandomGen);\n\n\n//# sourceURL=webpack:///./index.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var mapgen_demo__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mapgen-demo */ \"../pkg/mapgen_demo.js\");\n/* harmony import */ var mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mapgen-demo/mapgen_demo_bg */ \"../pkg/mapgen_demo_bg.wasm\");\n\n\n\nconst CANVAS_SIZE = 750;\nconst GRID_COLS = 80;\nconst GRID_ROWS = 50;\nconst CELL_SIZE = CANVAS_SIZE/GRID_ROWS;\nconst TILE_SIZE = 39;\n\n// Init canvas\nconst canvas = document.getElementById(\"mapgen-canvas\");\ncanvas.height = CELL_SIZE * GRID_ROWS;\ncanvas.width = CELL_SIZE * GRID_COLS;\nconst ctx = canvas.getContext('2d');\n// Info box\nconst infoDiv = document.getElementById('map-info');\n// API to the WASM\nlet world = null;\n\n// Load tiles bitmap\nlet tiles_image = new Image();\ntiles_image.src = 'assets/tiles.png';\n\n// Take provided seed or generate new one\nfunction get_seed() {\n var seed_text = document.getElementById(\"seed\").value;\n if( seed_text.length > 0) {\n return Number(seed_text);\n } \n return Date.now();\n}\n\n// Map generators\nfunction newCellularAutomata() {\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_cellular_automata(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newSimpleRooms() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_simple_rooms(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newBspInterior() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_bsp_interior(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newDrunkard() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_drunkard(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newBspRooms() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_bsp_rooms(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newMaze() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_maze(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newVoronoi() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_voronoi(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nfunction newRandomGen() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_random(GRID_COLS, GRID_ROWS, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nconst renderLoop = () => {\n // universe.tick();\n drawCells();\n requestAnimationFrame(renderLoop);\n};\n\nconst getIndex = (row, column) => {\n return row * GRID_COLS + column;\n};\n\nconst is_inner_wall = (tiles, col, row) => {\n for (let c = Math.max(col - 1, 0); c < Math.min(col + 2, GRID_COLS); c++) {\n for (let r = Math.max(row - 1, 0); r < Math.min(row + 2, GRID_ROWS); r++) {\n if ((c != col || r != row) && tiles[getIndex(r, c)] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor) {\n return false;\n }\n }\n }\n\n return true;\n}\n\nconst draw_tile = (ctx, row, col, tile_type) => {\n var tile_x = 0;\n var tile_y = 0;\n if (tile_type == \"floor\") {\n tile_x = 3;\n tile_y = 2;\n } else if (tile_type == \"wall\") {\n tile_x = 0;\n tile_y = 3;\n } else if (tile_type == \"player\") {\n tile_x = 0;\n tile_y = 8;\n } else if (tile_type == \"exit\") {\n tile_x = 10;\n tile_y = 1;\n } else {\n tile_x = 18;\n tile_y = 0;\n }\n\n ctx.drawImage(\n tiles_image,\n tile_x * TILE_SIZE + 3,\n tile_y * TILE_SIZE + 3,\n TILE_SIZE - 3,\n TILE_SIZE - 3,\n col * CELL_SIZE,\n row * CELL_SIZE,\n CELL_SIZE,\n CELL_SIZE);\n\n}\n\nconst drawCells = () => {\n const tilesPtr = world.tiles();\n const tiles = new Uint8Array(mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__[\"memory\"].buffer, tilesPtr, GRID_COLS * GRID_ROWS);\n\n // tiles\n for (let row = 0; row < GRID_ROWS; row++) {\n for (let col = 0; col < GRID_COLS; col++) {\n const idx = getIndex(row, col);\n if (tiles[idx] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor) {\n draw_tile(ctx, row, col, \"floor\");\n } else if (is_inner_wall(tiles, col, row)){\n draw_tile(ctx, row, col, \"inner-wall\");\n } else {\n draw_tile(ctx, row, col, \"wall\");\n }\n }\n }\n\n // Player position\n let player = world.player_pos();\n draw_tile(ctx, player.row(), player.col(), \"player\");\n\n // Exit position\n let exit = world.exit_pos();\n draw_tile(ctx, exit.row(), exit.col(), \"exit\");\n};\n\nnewRandomGen();\n\n// Connect UI element\ndocument.getElementById('cellular-automata-option').addEventListener('click', newCellularAutomata);\ndocument.getElementById('simple-rooms-option').addEventListener('click', newSimpleRooms);\ndocument.getElementById('bsp-rooms-option').addEventListener('click', newBspRooms);\ndocument.getElementById('drunkard-option').addEventListener('click', newDrunkard);\ndocument.getElementById('bsp-interior-option').addEventListener('click', newBspInterior);\ndocument.getElementById('maze-option').addEventListener('click', newMaze);\ndocument.getElementById('voronoi-option').addEventListener('click', newVoronoi);\ndocument.getElementById('random-option').addEventListener('click', newRandomGen);\n\n\n//# sourceURL=webpack:///./index.js?"); /***/ }), diff --git a/docs/bootstrap.js b/docs/bootstrap.js index 3052c17..1b7e92b 100644 --- a/docs/bootstrap.js +++ b/docs/bootstrap.js @@ -222,7 +222,7 @@ /******/ promises.push(installedWasmModuleData); /******/ else { /******/ var importObject = wasmImportObjects[wasmModuleId](); -/******/ var req = fetch(__webpack_require__.p + "" + {"../pkg/mapgen_demo_bg.wasm":"fa6c9d72e1d9a518ed31"}[wasmModuleId] + ".module.wasm"); +/******/ var req = fetch(__webpack_require__.p + "" + {"../pkg/mapgen_demo_bg.wasm":"f22182091a16774e383e"}[wasmModuleId] + ".module.wasm"); /******/ var promise; /******/ if(importObject instanceof Promise && typeof WebAssembly.compileStreaming === 'function') { /******/ promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) { diff --git a/docs/f22182091a16774e383e.module.wasm b/docs/f22182091a16774e383e.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..fbd68649f82fd0e2a0385b9ddb31d46da0a1972f GIT binary patch literal 111768 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 Pb6vF+l(dEOTHF5*RH4X6 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html index e3fc112..d3d6bc4 100644 --- a/docs/index.html +++ b/docs/index.html @@ -42,6 +42,7 @@ BSP Interior Drunkard Walk Maze + Voronoi Hive Random Generator