From 56417cf9b4078f3be833b89f696512d98535a0f1 Mon Sep 17 00:00:00 2001 From: klangner Date: Thu, 14 Jan 2021 12:18:31 +0100 Subject: [PATCH] Metrics Fixed: #20, Fixed #21. --- demo/Cargo.toml | 5 +- demo/index.html | 59 ---------------- demo/src/lib.rs | 18 +++++ demo/www/index.html | 1 + docs/0.bootstrap.js | 8 +-- docs/98c7bb1ad7a2b17fcade.module.wasm | Bin 0 -> 132863 bytes docs/bootstrap.js | 54 ++++++++++----- docs/index.html | 1 + src/lib.rs | 1 + src/metric.rs | 95 ++++++++++++++++++++++++++ 10 files changed, 159 insertions(+), 83 deletions(-) delete mode 100644 demo/index.html create mode 100644 docs/98c7bb1ad7a2b17fcade.module.wasm create mode 100644 src/metric.rs diff --git a/demo/Cargo.toml b/demo/Cargo.toml index 76bccfc..7e86f4c 100644 --- a/demo/Cargo.toml +++ b/demo/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "mapgen-demo" -version = "0.1.1" +version = "0.1.2" authors = ["Krzysztof Langner "] description = "Map generator demo" license = "MIT OR Apache-2.0" @@ -11,8 +11,9 @@ edition = "2018" crate-type = ["cdylib"] [dependencies] -rand = { version = "0.7", features = ["wasm-bindgen"] } mapgen = {path=".."} +getrandom = { version = "0.2", features = ["js"] } +rand = "0.8" wasm-bindgen = "0.2" js-sys = "0.3" diff --git a/demo/index.html b/demo/index.html deleted file mode 100644 index 02f635b..0000000 --- a/demo/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/demo/src/lib.rs b/demo/src/lib.rs index 89ba923..df221f9 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -3,6 +3,7 @@ use web_sys; use rand::prelude::*; use mapgen::{Map, MapBuilder, TileType, geometry::Point}; use mapgen::filter::*; +use mapgen::metric; #[wasm_bindgen] @@ -48,6 +49,7 @@ impl World { .with(CullUnreachable::new()) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -60,6 +62,7 @@ impl World { .with(AreaStartingPosition::new(XStart::LEFT, YStart::TOP)) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -72,6 +75,7 @@ impl World { .with(AreaStartingPosition::new(XStart::LEFT, YStart::BOTTOM)) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -84,6 +88,7 @@ impl World { .with(CullUnreachable::new()) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -96,6 +101,7 @@ impl World { .with(CullUnreachable::new()) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -107,6 +113,7 @@ impl World { .with(AreaStartingPosition::new(XStart::LEFT, YStart::TOP)) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -118,6 +125,7 @@ impl World { .with(AreaStartingPosition::new(XStart::LEFT, YStart::TOP)) .with(DistantExit::new()) .build_with_rng(&mut rng); + World::print_map_metrics(&map); World::new(width, height, map) } @@ -167,6 +175,16 @@ impl World { let div = document.get_element_by_id("map-info").expect("Need div with id: map-info"); div.set_inner_html(&info); } + + fn print_map_metrics(map: &Map) { + let window = web_sys::window().expect("no global `window` exists"); + let document = window.document().expect("should have a document on window"); + let div = document.get_element_by_id("map-metrics").expect("Need div with id: map-metrics"); + let density = metric::density(map); + let path_length = metric::path_length(map); + let info = format!("Metrics: density: {}, path length: {}", density, path_length); + div.set_inner_html(&info); + } } #[wasm_bindgen] diff --git a/demo/www/index.html b/demo/www/index.html index d3d6bc4..9b4a739 100644 --- a/demo/www/index.html +++ b/demo/www/index.html @@ -55,6 +55,7 @@
+
diff --git a/docs/0.bootstrap.js b/docs/0.bootstrap.js index 47f77d7..2b47808 100644 --- a/docs/0.bootstrap.js +++ b/docs/0.bootstrap.js @@ -4,11 +4,11 @@ /*!*****************************!*\ !*** ../pkg/mapgen_demo.js ***! \*****************************/ -/*! exports provided: Cell, Position, World, __wbindgen_object_drop_ref, __wbg_getRandomValues_3ac1b33c90b52596, __wbg_randomFillSync_6f956029658662ec, __wbg_self_1c83eb4471d9eb9b, __wbg_static_accessor_MODULE_abf5ae284bffdf45, __wbg_require_5b2b5b594d809d9f, __wbg_crypto_c12f14e810edcaa2, __wbg_msCrypto_679be765111ba775, __wbindgen_is_undefined, __wbg_getRandomValues_05a60bf171bfc2be, __wbg_instanceof_Window_adf3196bdc02b386, __wbg_document_6cc8d0b87c0a99b9, __wbg_getElementById_0cb6ad9511b1efc0, __wbg_setinnerHTML_4ff235db1a3cb4d8, __wbg_call_8e95613cc6524977, __wbindgen_object_clone_ref, __wbg_newnoargs_f3b8a801d5d4b079, __wbg_self_07b2f89e82ceb76d, __wbg_window_ba85d88572adc0dc, __wbg_globalThis_b9277fc37e201fe5, __wbg_global_e16303fe83e1d57f, __wbindgen_throw */ +/*! exports provided: Cell, Position, World, __wbindgen_object_drop_ref, __wbg_getRandomValues_c73f06b5ed8b878d, __wbg_randomFillSync_5fa0a72035c7bfd9, __wbg_self_23b14d60c8dbf9da, __wbg_static_accessor_MODULE_ff1e47f7076e0ee1, __wbg_require_1dab18ea211c4fa1, __wbg_crypto_df96f3577c8a9bae, __wbg_msCrypto_331efcdb9be40d7c, __wbindgen_is_undefined, __wbg_instanceof_Window_adf3196bdc02b386, __wbg_document_6cc8d0b87c0a99b9, __wbg_getElementById_0cb6ad9511b1efc0, __wbg_setinnerHTML_4ff235db1a3cb4d8, __wbg_call_8e95613cc6524977, __wbindgen_object_clone_ref, __wbg_newnoargs_f3b8a801d5d4b079, __wbg_self_07b2f89e82ceb76d, __wbg_window_ba85d88572adc0dc, __wbg_globalThis_b9277fc37e201fe5, __wbg_global_e16303fe83e1d57f, __wbg_buffer_49131c283a06686f, __wbg_length_2b13641a9d906653, __wbg_new_9b295d24cf1d706f, __wbg_set_3bb960a9975f3cd2, __wbg_newwithlength_3c570aeea9a95954, __wbg_subarray_4eaeb3de00cf1955, __wbindgen_throw, __wbindgen_memory */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mapgen_demo_bg.wasm */ \"../pkg/mapgen_demo_bg.wasm\");\n/* harmony import */ var _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mapgen_demo_bg.js */ \"../pkg/mapgen_demo_bg.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Cell\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"Cell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Position\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"Position\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"World\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_drop_ref\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_object_drop_ref\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_3ac1b33c90b52596\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_getRandomValues_3ac1b33c90b52596\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_randomFillSync_6f956029658662ec\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_randomFillSync_6f956029658662ec\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_1c83eb4471d9eb9b\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_self_1c83eb4471d9eb9b\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_static_accessor_MODULE_abf5ae284bffdf45\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_static_accessor_MODULE_abf5ae284bffdf45\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_require_5b2b5b594d809d9f\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_require_5b2b5b594d809d9f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_crypto_c12f14e810edcaa2\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_crypto_c12f14e810edcaa2\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_msCrypto_679be765111ba775\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_msCrypto_679be765111ba775\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_is_undefined\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_is_undefined\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_05a60bf171bfc2be\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_getRandomValues_05a60bf171bfc2be\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_instanceof_Window_adf3196bdc02b386\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_instanceof_Window_adf3196bdc02b386\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_document_6cc8d0b87c0a99b9\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_document_6cc8d0b87c0a99b9\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getElementById_0cb6ad9511b1efc0\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_getElementById_0cb6ad9511b1efc0\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_setinnerHTML_4ff235db1a3cb4d8\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_setinnerHTML_4ff235db1a3cb4d8\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_call_8e95613cc6524977\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_call_8e95613cc6524977\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_clone_ref\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_object_clone_ref\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newnoargs_f3b8a801d5d4b079\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_newnoargs_f3b8a801d5d4b079\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_07b2f89e82ceb76d\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_self_07b2f89e82ceb76d\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_window_ba85d88572adc0dc\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_window_ba85d88572adc0dc\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_globalThis_b9277fc37e201fe5\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_globalThis_b9277fc37e201fe5\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_global_e16303fe83e1d57f\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_global_e16303fe83e1d57f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_throw\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_throw\"]; });\n\n\n\n\n//# sourceURL=webpack:///../pkg/mapgen_demo.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./mapgen_demo_bg.wasm */ \"../pkg/mapgen_demo_bg.wasm\");\n/* harmony import */ var _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mapgen_demo_bg.js */ \"../pkg/mapgen_demo_bg.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Cell\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"Cell\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Position\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"Position\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"World\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"World\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_drop_ref\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_object_drop_ref\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getRandomValues_c73f06b5ed8b878d\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_getRandomValues_c73f06b5ed8b878d\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_randomFillSync_5fa0a72035c7bfd9\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_randomFillSync_5fa0a72035c7bfd9\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_23b14d60c8dbf9da\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_self_23b14d60c8dbf9da\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_static_accessor_MODULE_ff1e47f7076e0ee1\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_static_accessor_MODULE_ff1e47f7076e0ee1\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_require_1dab18ea211c4fa1\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_require_1dab18ea211c4fa1\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_crypto_df96f3577c8a9bae\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_crypto_df96f3577c8a9bae\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_msCrypto_331efcdb9be40d7c\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_msCrypto_331efcdb9be40d7c\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_is_undefined\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_is_undefined\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_instanceof_Window_adf3196bdc02b386\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_instanceof_Window_adf3196bdc02b386\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_document_6cc8d0b87c0a99b9\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_document_6cc8d0b87c0a99b9\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_getElementById_0cb6ad9511b1efc0\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_getElementById_0cb6ad9511b1efc0\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_setinnerHTML_4ff235db1a3cb4d8\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_setinnerHTML_4ff235db1a3cb4d8\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_call_8e95613cc6524977\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_call_8e95613cc6524977\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_object_clone_ref\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_object_clone_ref\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newnoargs_f3b8a801d5d4b079\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_newnoargs_f3b8a801d5d4b079\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_07b2f89e82ceb76d\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_self_07b2f89e82ceb76d\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_window_ba85d88572adc0dc\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_window_ba85d88572adc0dc\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_globalThis_b9277fc37e201fe5\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_globalThis_b9277fc37e201fe5\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_global_e16303fe83e1d57f\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_global_e16303fe83e1d57f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_buffer_49131c283a06686f\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_buffer_49131c283a06686f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_length_2b13641a9d906653\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_length_2b13641a9d906653\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_new_9b295d24cf1d706f\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_new_9b295d24cf1d706f\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_set_3bb960a9975f3cd2\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_set_3bb960a9975f3cd2\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newwithlength_3c570aeea9a95954\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_newwithlength_3c570aeea9a95954\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbg_subarray_4eaeb3de00cf1955\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbg_subarray_4eaeb3de00cf1955\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_throw\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_throw\"]; });\n\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_memory\", function() { return _mapgen_demo_bg_js__WEBPACK_IMPORTED_MODULE_1__[\"__wbindgen_memory\"]; });\n\n\n\n\n//# sourceURL=webpack:///../pkg/mapgen_demo.js?"); /***/ }), @@ -16,11 +16,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _map /*!********************************!*\ !*** ../pkg/mapgen_demo_bg.js ***! \********************************/ -/*! exports provided: Cell, Position, World, __wbindgen_object_drop_ref, __wbg_getRandomValues_3ac1b33c90b52596, __wbg_randomFillSync_6f956029658662ec, __wbg_self_1c83eb4471d9eb9b, __wbg_static_accessor_MODULE_abf5ae284bffdf45, __wbg_require_5b2b5b594d809d9f, __wbg_crypto_c12f14e810edcaa2, __wbg_msCrypto_679be765111ba775, __wbindgen_is_undefined, __wbg_getRandomValues_05a60bf171bfc2be, __wbg_instanceof_Window_adf3196bdc02b386, __wbg_document_6cc8d0b87c0a99b9, __wbg_getElementById_0cb6ad9511b1efc0, __wbg_setinnerHTML_4ff235db1a3cb4d8, __wbg_call_8e95613cc6524977, __wbindgen_object_clone_ref, __wbg_newnoargs_f3b8a801d5d4b079, __wbg_self_07b2f89e82ceb76d, __wbg_window_ba85d88572adc0dc, __wbg_globalThis_b9277fc37e201fe5, __wbg_global_e16303fe83e1d57f, __wbindgen_throw */ +/*! exports provided: Cell, Position, World, __wbindgen_object_drop_ref, __wbg_getRandomValues_c73f06b5ed8b878d, __wbg_randomFillSync_5fa0a72035c7bfd9, __wbg_self_23b14d60c8dbf9da, __wbg_static_accessor_MODULE_ff1e47f7076e0ee1, __wbg_require_1dab18ea211c4fa1, __wbg_crypto_df96f3577c8a9bae, __wbg_msCrypto_331efcdb9be40d7c, __wbindgen_is_undefined, __wbg_instanceof_Window_adf3196bdc02b386, __wbg_document_6cc8d0b87c0a99b9, __wbg_getElementById_0cb6ad9511b1efc0, __wbg_setinnerHTML_4ff235db1a3cb4d8, __wbg_call_8e95613cc6524977, __wbindgen_object_clone_ref, __wbg_newnoargs_f3b8a801d5d4b079, __wbg_self_07b2f89e82ceb76d, __wbg_window_ba85d88572adc0dc, __wbg_globalThis_b9277fc37e201fe5, __wbg_global_e16303fe83e1d57f, __wbg_buffer_49131c283a06686f, __wbg_length_2b13641a9d906653, __wbg_new_9b295d24cf1d706f, __wbg_set_3bb960a9975f3cd2, __wbg_newwithlength_3c570aeea9a95954, __wbg_subarray_4eaeb3de00cf1955, __wbindgen_throw, __wbindgen_memory */ /***/ (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_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?"); +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_c73f06b5ed8b878d\", function() { return __wbg_getRandomValues_c73f06b5ed8b878d; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_randomFillSync_5fa0a72035c7bfd9\", function() { return __wbg_randomFillSync_5fa0a72035c7bfd9; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_self_23b14d60c8dbf9da\", function() { return __wbg_self_23b14d60c8dbf9da; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_static_accessor_MODULE_ff1e47f7076e0ee1\", function() { return __wbg_static_accessor_MODULE_ff1e47f7076e0ee1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_require_1dab18ea211c4fa1\", function() { return __wbg_require_1dab18ea211c4fa1; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_crypto_df96f3577c8a9bae\", function() { return __wbg_crypto_df96f3577c8a9bae; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_msCrypto_331efcdb9be40d7c\", function() { return __wbg_msCrypto_331efcdb9be40d7c; });\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_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__, \"__wbg_buffer_49131c283a06686f\", function() { return __wbg_buffer_49131c283a06686f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_length_2b13641a9d906653\", function() { return __wbg_length_2b13641a9d906653; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_new_9b295d24cf1d706f\", function() { return __wbg_new_9b295d24cf1d706f; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_set_3bb960a9975f3cd2\", function() { return __wbg_set_3bb960a9975f3cd2; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_newwithlength_3c570aeea9a95954\", function() { return __wbg_newwithlength_3c570aeea9a95954; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbg_subarray_4eaeb3de00cf1955\", function() { return __wbg_subarray_4eaeb3de00cf1955; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_throw\", function() { return __wbindgen_throw; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"__wbindgen_memory\", function() { return __wbindgen_memory; });\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_c73f06b5ed8b878d = handleError(function(arg0, arg1) {\n getObject(arg0).getRandomValues(getObject(arg1));\n});\n\nconst __wbg_randomFillSync_5fa0a72035c7bfd9 = handleError(function(arg0, arg1, arg2) {\n getObject(arg0).randomFillSync(getArrayU8FromWasm0(arg1, arg2));\n});\n\nconst __wbg_self_23b14d60c8dbf9da = handleError(function() {\n var ret = self.self;\n return addHeapObject(ret);\n});\n\nconst __wbg_static_accessor_MODULE_ff1e47f7076e0ee1 = function() {\n var ret = module;\n return addHeapObject(ret);\n};\n\nconst __wbg_require_1dab18ea211c4fa1 = handleError(function(arg0, arg1, arg2) {\n var ret = getObject(arg0).require(getStringFromWasm0(arg1, arg2));\n return addHeapObject(ret);\n});\n\nconst __wbg_crypto_df96f3577c8a9bae = function(arg0) {\n var ret = getObject(arg0).crypto;\n return addHeapObject(ret);\n};\n\nconst __wbg_msCrypto_331efcdb9be40d7c = 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_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 __wbg_buffer_49131c283a06686f = function(arg0) {\n var ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nconst __wbg_length_2b13641a9d906653 = function(arg0) {\n var ret = getObject(arg0).length;\n return ret;\n};\n\nconst __wbg_new_9b295d24cf1d706f = function(arg0) {\n var ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nconst __wbg_set_3bb960a9975f3cd2 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nconst __wbg_newwithlength_3c570aeea9a95954 = function(arg0) {\n var ret = new Uint8Array(arg0 >>> 0);\n return addHeapObject(ret);\n};\n\nconst __wbg_subarray_4eaeb3de00cf1955 = function(arg0, arg1, arg2) {\n var ret = getObject(arg0).subarray(arg1 >>> 0, arg2 >>> 0);\n return addHeapObject(ret);\n};\n\nconst __wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nconst __wbindgen_memory = function() {\n var ret = _mapgen_demo_bg_wasm__WEBPACK_IMPORTED_MODULE_0__[\"memory\"];\n return addHeapObject(ret);\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?"); /***/ }), diff --git a/docs/98c7bb1ad7a2b17fcade.module.wasm b/docs/98c7bb1ad7a2b17fcade.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..80ac74b446f5fc6490b60e04d34638814c749040 GIT binary patch literal 132863 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�mo@c$RDrbei{t83CwnYPUG3iz&-Id)&OQE~+0L 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 literal 0 HcmV?d00001 diff --git a/docs/bootstrap.js b/docs/bootstrap.js index 1b7e92b..ff33c31 100644 --- a/docs/bootstrap.js +++ b/docs/bootstrap.js @@ -58,33 +58,30 @@ /******/ "__wbindgen_object_drop_ref": function(p0i32) { /******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbindgen_object_drop_ref"](p0i32); /******/ }, -/******/ "__wbg_getRandomValues_3ac1b33c90b52596": function(p0i32,p1i32,p2i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_getRandomValues_3ac1b33c90b52596"](p0i32,p1i32,p2i32); +/******/ "__wbg_getRandomValues_c73f06b5ed8b878d": function(p0i32,p1i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_getRandomValues_c73f06b5ed8b878d"](p0i32,p1i32); /******/ }, -/******/ "__wbg_randomFillSync_6f956029658662ec": function(p0i32,p1i32,p2i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_randomFillSync_6f956029658662ec"](p0i32,p1i32,p2i32); +/******/ "__wbg_randomFillSync_5fa0a72035c7bfd9": function(p0i32,p1i32,p2i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_randomFillSync_5fa0a72035c7bfd9"](p0i32,p1i32,p2i32); /******/ }, -/******/ "__wbg_self_1c83eb4471d9eb9b": function() { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_self_1c83eb4471d9eb9b"](); +/******/ "__wbg_self_23b14d60c8dbf9da": function() { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_self_23b14d60c8dbf9da"](); /******/ }, -/******/ "__wbg_static_accessor_MODULE_abf5ae284bffdf45": function() { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_static_accessor_MODULE_abf5ae284bffdf45"](); +/******/ "__wbg_static_accessor_MODULE_ff1e47f7076e0ee1": function() { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_static_accessor_MODULE_ff1e47f7076e0ee1"](); /******/ }, -/******/ "__wbg_require_5b2b5b594d809d9f": function(p0i32,p1i32,p2i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_require_5b2b5b594d809d9f"](p0i32,p1i32,p2i32); +/******/ "__wbg_require_1dab18ea211c4fa1": function(p0i32,p1i32,p2i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_require_1dab18ea211c4fa1"](p0i32,p1i32,p2i32); /******/ }, -/******/ "__wbg_crypto_c12f14e810edcaa2": function(p0i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_crypto_c12f14e810edcaa2"](p0i32); +/******/ "__wbg_crypto_df96f3577c8a9bae": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_crypto_df96f3577c8a9bae"](p0i32); /******/ }, -/******/ "__wbg_msCrypto_679be765111ba775": function(p0i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_msCrypto_679be765111ba775"](p0i32); +/******/ "__wbg_msCrypto_331efcdb9be40d7c": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_msCrypto_331efcdb9be40d7c"](p0i32); /******/ }, /******/ "__wbindgen_is_undefined": function(p0i32) { /******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbindgen_is_undefined"](p0i32); /******/ }, -/******/ "__wbg_getRandomValues_05a60bf171bfc2be": function(p0i32) { -/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_getRandomValues_05a60bf171bfc2be"](p0i32); -/******/ }, /******/ "__wbg_instanceof_Window_adf3196bdc02b386": function(p0i32) { /******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_instanceof_Window_adf3196bdc02b386"](p0i32); /******/ }, @@ -118,8 +115,29 @@ /******/ "__wbg_global_e16303fe83e1d57f": function() { /******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_global_e16303fe83e1d57f"](); /******/ }, +/******/ "__wbg_buffer_49131c283a06686f": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_buffer_49131c283a06686f"](p0i32); +/******/ }, +/******/ "__wbg_length_2b13641a9d906653": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_length_2b13641a9d906653"](p0i32); +/******/ }, +/******/ "__wbg_new_9b295d24cf1d706f": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_new_9b295d24cf1d706f"](p0i32); +/******/ }, +/******/ "__wbg_set_3bb960a9975f3cd2": function(p0i32,p1i32,p2i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_set_3bb960a9975f3cd2"](p0i32,p1i32,p2i32); +/******/ }, +/******/ "__wbg_newwithlength_3c570aeea9a95954": function(p0i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_newwithlength_3c570aeea9a95954"](p0i32); +/******/ }, +/******/ "__wbg_subarray_4eaeb3de00cf1955": function(p0i32,p1i32,p2i32) { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbg_subarray_4eaeb3de00cf1955"](p0i32,p1i32,p2i32); +/******/ }, /******/ "__wbindgen_throw": function(p0i32,p1i32) { /******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbindgen_throw"](p0i32,p1i32); +/******/ }, +/******/ "__wbindgen_memory": function() { +/******/ return installedModules["../pkg/mapgen_demo_bg.js"].exports["__wbindgen_memory"](); /******/ } /******/ } /******/ }; @@ -222,7 +240,7 @@ /******/ promises.push(installedWasmModuleData); /******/ else { /******/ var importObject = wasmImportObjects[wasmModuleId](); -/******/ var req = fetch(__webpack_require__.p + "" + {"../pkg/mapgen_demo_bg.wasm":"f22182091a16774e383e"}[wasmModuleId] + ".module.wasm"); +/******/ var req = fetch(__webpack_require__.p + "" + {"../pkg/mapgen_demo_bg.wasm":"98c7bb1ad7a2b17fcade"}[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/index.html b/docs/index.html index d3d6bc4..9b4a739 100644 --- a/docs/index.html +++ b/docs/index.html @@ -55,6 +55,7 @@
+
diff --git a/src/lib.rs b/src/lib.rs index 5f32511..b124846 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -31,6 +31,7 @@ pub mod filter; pub mod geometry; pub mod map; +pub mod metric; pub use map::{Map, Symmetry, TileType}; pub use filter::*; diff --git a/src/metric.rs b/src/metric.rs new file mode 100644 index 0000000..c4e2033 --- /dev/null +++ b/src/metric.rs @@ -0,0 +1,95 @@ +//! Different metrics for the map +//! Can be used to meausre the quality of the map or the quality of the generator. +//! To meause the quality of the generator; generate lots of maps, measure them +//! and the provide generator score as an average. +//! + +use super::map::{Map, TileType}; +use super::dijkstra::DijkstraMap; + + +/// This metric calculates the percentage of walkable cells (Floor). +/// If this number is very low (like < 10%) then it means that the map +/// is probably to degenerated and shouldn't be used +pub fn density(map: &Map) -> f32 { + let floor_count = map.tiles.iter() + .filter(|&t| *t == TileType::Floor) + .count(); + floor_count as f32 / map.tiles.len() as f32 +} + + +/// Calculate the length of the shortes path from the starting point +/// to the exit. +/// If this path is very short, then the map is probably degenerated. +pub fn path_length(map: &Map) -> f32 { + if map.starting_point.is_none() { + return 0.0 + } + + match map.exit_point { + None => 0.0, + Some(exit) => { + let dijkstra = DijkstraMap::new(map); + dijkstra.tiles[map.xy_idx(exit.x, exit.y)] + }, + } +} + + +/// ------------------------------------------------------------------------------------------------ +/// Module unit tests +/// ------------------------------------------------------------------------------------------------ +#[cfg(test)] +mod tests { + use super::*; + use crate::geometry::Point; + + + #[test] + fn test_density_no_floor() { + let map = Map::new(10, 10); + let score = density(&map); + assert_eq!(score, 0.0); + } + + #[test] + fn test_density() { + let map_str = " + ########## + # ## # + ########## + "; + let map = Map::from_string(map_str); + let score = density(&map); + assert_eq!(score, 0.2); + } + + #[test] + fn test_no_path() { + let map_str = " + ########## + # ## # + ########## + "; + let map = Map::from_string(map_str); + let score = path_length(&map); + assert_eq!(score, 0.0); + } + + #[test] + fn test_path_length() { + let map_str = " + ########## + # ## # + # # + ########## + "; + let mut map = Map::from_string(map_str); + map.starting_point = Some(Point::new(1,1)); + map.exit_point = Some(Point::new(8,1)); + + let score = path_length(&map); + assert!(f32::abs(score - 7.9) <= 0.01); + } +} \ No newline at end of file