From df1e52ad2611bdadbf717eb213a96588ed7c9d67 Mon Sep 17 00:00:00 2001 From: klangner Date: Sat, 17 Oct 2020 18:02:50 +0200 Subject: [PATCH] Fixed bsp-interior corridors --- demo/www/package.json | 1 + docs/0.bootstrap.js | 2 +- docs/44ffe41e5a9c873b1c79.module.wasm | Bin 0 -> 98132 bytes docs/bootstrap.js | 2 +- docs/index.html | 1 + examples/bsp_interior.rs | 2 +- src/filter/bsp_interior.rs | 8 ++++---- src/geometry.rs | 2 +- 8 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 docs/44ffe41e5a9c873b1c79.module.wasm diff --git a/demo/www/package.json b/demo/www/package.json index 0563a26..a9c408e 100644 --- a/demo/www/package.json +++ b/demo/www/package.json @@ -28,6 +28,7 @@ }, "homepage": "https://github.com/rustwasm/create-wasm-app#readme", "dependencies": { + "gh-pages": "^3.1.0", "mapgen-demo": "file:../pkg" }, "devDependencies": { diff --git a/docs/0.bootstrap.js b/docs/0.bootstrap.js index a232c4b..b03e627 100644 --- a/docs/0.bootstrap.js +++ b/docs/0.bootstrap.js @@ -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 CELL_SIZE = 12;\nconst GRID_COLOR = \"#CCCCCC\";\nconst DEAD_COLOR = \"#FFFFFF\";\nconst ALIVE_COLOR = \"#000000\";\n\nvar world = null;\nconst width = 80;\nconst height = 50;\n\nconst infoDiv = document.getElementById('map-info');\n// Give the canvas room for all of our cells and a 1px border\n// around each of them.\nconst canvas = document.getElementById(\"mapgen-canvas\");\ncanvas.height = (CELL_SIZE + 1) * height + 1;\ncanvas.width = (CELL_SIZE + 1) * width + 1;\n\nconst ctx = canvas.getContext('2d');\n\n// Map generators\nfunction newCellularAutomata() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_cellular_automata(width, height, 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(width, height, 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(width, height, seed);\n requestAnimationFrame(renderLoop);\n}\n\nfunction newDrunkard() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_drunkard(width, height, seed);\n requestAnimationFrame(renderLoop);\n}\n\nfunction newRandomGen() {\n var seed = Date.now();\n world = mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"World\"].new_random(width, height, seed);\n requestAnimationFrame(renderLoop);\n}\n\nconst renderLoop = () => {\n // universe.tick();\n\n drawGrid();\n drawCells();\n\n // requestAnimationFrame(renderLoop);\n};\n\nconst drawGrid = () => {\n ctx.beginPath();\n ctx.strokeStyle = GRID_COLOR;\n\n // Vertical lines.\n for (let i = 0; i <= width; i++) {\n ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0);\n ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1);\n }\n\n // Horizontal lines.\n for (let j = 0; j <= height; j++) {\n ctx.moveTo(0, j * (CELL_SIZE + 1) + 1);\n ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1);\n }\n\n ctx.stroke();\n};\n\nconst getIndex = (row, column) => {\n return row * width + column;\n};\n\nconst drawCells = () => {\n const tilesPtr = world.tiles();\n const tiles = new Uint8Array(mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__[\"memory\"].buffer, tilesPtr, width * height);\n\n ctx.beginPath();\n\n for (let row = 0; row < height; row++) {\n for (let col = 0; col < width; col++) {\n const idx = getIndex(row, col);\n\n ctx.fillStyle = tiles[idx] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor\n ? DEAD_COLOR\n : ALIVE_COLOR;\n\n ctx.fillRect(\n col * (CELL_SIZE + 1) + 1,\n row * (CELL_SIZE + 1) + 1,\n CELL_SIZE,\n CELL_SIZE\n );\n }\n }\n\n ctx.stroke();\n};\n\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-interior-option').addEventListener('click', newBspInterior);\ndocument.getElementById('drunkard-option').addEventListener('click', newDrunkard);\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 CELL_SIZE = 12;\nconst GRID_COLOR = \"#CCCCCC\";\nconst DEAD_COLOR = \"#FFFFFF\";\nconst ALIVE_COLOR = \"#000000\";\n\nvar world = null;\nconst width = 80;\nconst height = 50;\n\nconst infoDiv = document.getElementById('map-info');\n// Give the canvas room for all of our cells and a 1px border\n// around each of them.\nconst canvas = document.getElementById(\"mapgen-canvas\");\ncanvas.height = (CELL_SIZE + 1) * height + 1;\ncanvas.width = (CELL_SIZE + 1) * width + 1;\n\nconst ctx = canvas.getContext('2d');\n\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(width, height, 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(width, height, 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(width, height, 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(width, height, 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(width, height, get_seed());\n requestAnimationFrame(renderLoop);\n}\n\nconst renderLoop = () => {\n // universe.tick();\n\n drawGrid();\n drawCells();\n\n // requestAnimationFrame(renderLoop);\n};\n\nconst drawGrid = () => {\n ctx.beginPath();\n ctx.strokeStyle = GRID_COLOR;\n\n // Vertical lines.\n for (let i = 0; i <= width; i++) {\n ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0);\n ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1);\n }\n\n // Horizontal lines.\n for (let j = 0; j <= height; j++) {\n ctx.moveTo(0, j * (CELL_SIZE + 1) + 1);\n ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1);\n }\n\n ctx.stroke();\n};\n\nconst getIndex = (row, column) => {\n return row * width + column;\n};\n\nconst drawCells = () => {\n const tilesPtr = world.tiles();\n const tiles = new Uint8Array(mapgen_demo_mapgen_demo_bg__WEBPACK_IMPORTED_MODULE_1__[\"memory\"].buffer, tilesPtr, width * height);\n\n ctx.beginPath();\n\n for (let row = 0; row < height; row++) {\n for (let col = 0; col < width; col++) {\n const idx = getIndex(row, col);\n\n ctx.fillStyle = tiles[idx] == mapgen_demo__WEBPACK_IMPORTED_MODULE_0__[\"Cell\"].Floor\n ? DEAD_COLOR\n : ALIVE_COLOR;\n\n ctx.fillRect(\n col * (CELL_SIZE + 1) + 1,\n row * (CELL_SIZE + 1) + 1,\n CELL_SIZE,\n CELL_SIZE\n );\n }\n }\n\n ctx.stroke();\n};\n\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-interior-option').addEventListener('click', newBspInterior);\ndocument.getElementById('drunkard-option').addEventListener('click', newDrunkard);\ndocument.getElementById('random-option').addEventListener('click', newRandomGen);\n\n\n//# sourceURL=webpack:///./index.js?"); /***/ }), diff --git a/docs/44ffe41e5a9c873b1c79.module.wasm b/docs/44ffe41e5a9c873b1c79.module.wasm new file mode 100644 index 0000000000000000000000000000000000000000..88115cb7d5e70011b3a411851920608b7c0bf238 GIT binary patch literal 98132 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 W7|UX)=~>a%P-_JxZ{>=vp8o^mAuhTA literal 0 HcmV?d00001 diff --git a/docs/bootstrap.js b/docs/bootstrap.js index 04499f5..877afb3 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":"5a858ffd967a1d3be2df"}[wasmModuleId] + ".module.wasm"); +/******/ var req = fetch(__webpack_require__.p + "" + {"../pkg/mapgen_demo_bg.wasm":"44ffe41e5a9c873b1c79"}[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 017e877..3ef797c 100644 --- a/docs/index.html +++ b/docs/index.html @@ -42,6 +42,7 @@ Random Generator + diff --git a/examples/bsp_interior.rs b/examples/bsp_interior.rs index 4fa4ece..2b87425 100644 --- a/examples/bsp_interior.rs +++ b/examples/bsp_interior.rs @@ -5,6 +5,6 @@ use mapgen::*; fn main() { let mut rng = StdRng::seed_from_u64(907647352); let gen = BspInterior::new(); - let map = gen.modify_map(&mut rng, &Map::new(80, 50)); + let map = gen.modify_map(&mut rng, &Map::new(20, 10)); println!("{:}", &map); } \ No newline at end of file diff --git a/src/filter/bsp_interior.rs b/src/filter/bsp_interior.rs index aeb05fe..a700584 100644 --- a/src/filter/bsp_interior.rs +++ b/src/filter/bsp_interior.rs @@ -63,10 +63,10 @@ impl BspInterior { for i in 0..new_map.rooms.len()-1 { let room = new_map.rooms[i]; let next_room = new_map.rooms[i+1]; - let start_x = room.x1 + rng.random_range(1, room.width()); - let start_y = room.y1 + rng.random_range(1, room.height()); - let end_x = next_room.x1 + (rng.random_range(1, next_room.width())); - let end_y = next_room.y1 + (rng.random_range(1, next_room.width())); + let start_x = rng.random_range(room.x1, room.x2); + let start_y = rng.random_range(room.y1, room.y2); + let end_x = rng.random_range(next_room.x1, next_room.x2); + let end_y = rng.random_range(next_room.y1, next_room.y2); new_map.add_corridor(Point::new(start_x, start_y), Point::new(end_x, end_y)); } diff --git a/src/geometry.rs b/src/geometry.rs index 2beb41c..b02caff 100644 --- a/src/geometry.rs +++ b/src/geometry.rs @@ -28,7 +28,7 @@ impl Point { } /// Rectangle region on the map -#[derive(PartialEq, Copy, Clone)] +#[derive(PartialEq, Copy, Clone, Debug)] pub struct Rect { pub x1 : usize, pub x2 : usize,