From 62cc50dbc08a739ff368618c8d402c203dbeb13b Mon Sep 17 00:00:00 2001 From: klangner Date: Mon, 14 Sep 2020 11:46:48 +0200 Subject: [PATCH] Fixed #15 --- demo/src/lib.rs | 31 ++++++------ demo/www | 1 - demo/www2/.gitignore | 4 ++ demo/www2/bootstrap.js | 5 ++ demo/www2/favicon.ico | Bin 0 -> 32038 bytes demo/www2/index.html | 49 ++++++++++++++++++ demo/www2/index.js | 98 ++++++++++++++++++++++++++++++++++++ demo/www2/package.json | 40 +++++++++++++++ demo/www2/webpack.config.js | 14 ++++++ 9 files changed, 226 insertions(+), 16 deletions(-) delete mode 160000 demo/www create mode 100644 demo/www2/.gitignore create mode 100644 demo/www2/bootstrap.js create mode 100644 demo/www2/favicon.ico create mode 100644 demo/www2/index.html create mode 100644 demo/www2/index.js create mode 100644 demo/www2/package.json create mode 100644 demo/www2/webpack.config.js diff --git a/demo/src/lib.rs b/demo/src/lib.rs index 993c453..1746e6f 100644 --- a/demo/src/lib.rs +++ b/demo/src/lib.rs @@ -1,6 +1,5 @@ use wasm_bindgen::prelude::*; use rand::prelude::*; -use js_sys::Date; use mapgen::dungeon::{ MapBuilder, map::TileType, @@ -11,24 +10,33 @@ use mapgen::dungeon::{ }; +#[wasm_bindgen] +#[repr(u8)] +#[derive(Clone, Copy, Debug, PartialEq, Eq)] +pub enum Cell { + Floor = 0, + Wall = 1, +} + #[wasm_bindgen] pub struct World { width: u32, height: u32, - tiles: Vec, + tiles: Vec, } #[wasm_bindgen] impl World { - pub fn new(width: u32, height: u32) -> World { - let seed = Date::new_0().get_time() as u64; - let mut rng = StdRng::seed_from_u64(seed); + pub fn new_cellular_automata(width: u32, height: u32, seed: u32) -> World { + let mut rng = StdRng::seed_from_u64(seed as u64); let map = MapBuilder::new(Box::new(CellularAutomataGen::new(width as usize, height as usize))) .with(AreaStartingPosition::new(XStart::CENTER, YStart::CENTER)) .with(CullUnreachable::new()) .with(DistantExit::new()) .build_map_with_rng(&mut rng); - let tiles = (0..map.tiles.len()).map(|i| map.tiles[i] == TileType::Floor).collect(); + let tiles = (0..map.tiles.len()) + .map(|i| if map.tiles[i] == TileType::Floor {Cell::Floor} else {Cell::Wall}) + .collect(); World { width, height, @@ -43,14 +51,7 @@ impl World { self.height } - pub fn tiles(&self) -> *const bool { + pub fn tiles(&self) -> *const Cell { self.tiles.as_ptr() } -} - - -// Called when the wasm module is instantiated -// #[wasm_bindgen(start)] -// pub fn main() -> Result<(), JsValue> { -// Ok(()) -// } \ No newline at end of file +} \ No newline at end of file diff --git a/demo/www b/demo/www deleted file mode 160000 index 9ac3dff..0000000 --- a/demo/www +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9ac3dff9ebea4675e5c478bcdcbc0fd547d1529f diff --git a/demo/www2/.gitignore b/demo/www2/.gitignore new file mode 100644 index 0000000..4104484 --- /dev/null +++ b/demo/www2/.gitignore @@ -0,0 +1,4 @@ +node_modules +dist +.bin/ +package-lock.json \ No newline at end of file diff --git a/demo/www2/bootstrap.js b/demo/www2/bootstrap.js new file mode 100644 index 0000000..7934d62 --- /dev/null +++ b/demo/www2/bootstrap.js @@ -0,0 +1,5 @@ +// A dependency graph that contains any wasm must all be imported +// asynchronously. This `bootstrap.js` file does the single async import, so +// that no one else needs to worry about it again. +import("./index.js") + .catch(e => console.error("Error importing `index.js`:", e)); diff --git a/demo/www2/favicon.ico b/demo/www2/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..d9eaec7706ad2b85aa390f4cf474f54777a637fa GIT binary patch literal 32038 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 b`&qpnJ?A{A;~ckn7wBQ^A-$%5RZ0C1O6A2g literal 0 HcmV?d00001 diff --git a/demo/www2/index.html b/demo/www2/index.html new file mode 100644 index 0000000..16c15cf --- /dev/null +++ b/demo/www2/index.html @@ -0,0 +1,49 @@ + + + + + Mapgen demo + + + + + + + + +
+ + + + + + diff --git a/demo/www2/index.js b/demo/www2/index.js new file mode 100644 index 0000000..95e7d32 --- /dev/null +++ b/demo/www2/index.js @@ -0,0 +1,98 @@ +import {Cell, World} from "mapgen-demo"; +import { memory } from "mapgen-demo/mapgen_demo_bg"; + +const CELL_SIZE = 12; +const GRID_COLOR = "#CCCCCC"; +const DEAD_COLOR = "#FFFFFF"; +const ALIVE_COLOR = "#000000"; + +var world = null; +const width = 80; +const height = 50; + +const infoDiv = document.getElementById('map-info'); +// Give the canvas room for all of our cells and a 1px border +// around each of them. +const canvas = document.getElementById("mapgen-canvas"); +canvas.height = (CELL_SIZE + 1) * height + 1; +canvas.width = (CELL_SIZE + 1) * width + 1; + +const ctx = canvas.getContext('2d'); + +// Map generators +function newCellularAutomata() { + var seed = Date.now(); + world = World.new_cellular_automata(width, height, seed); + drawGrid(); + drawCells(); + requestAnimationFrame(renderLoop); + infoDiv.textContent = "Cellular automata with the seed: " + seed; +} + +function newSimpleRooms() { + console.log("Simple rooms") +} + +const renderLoop = () => { + // universe.tick(); + + drawGrid(); + drawCells(); + + requestAnimationFrame(renderLoop); +}; + +const drawGrid = () => { + ctx.beginPath(); + ctx.strokeStyle = GRID_COLOR; + + // Vertical lines. + for (let i = 0; i <= width; i++) { + ctx.moveTo(i * (CELL_SIZE + 1) + 1, 0); + ctx.lineTo(i * (CELL_SIZE + 1) + 1, (CELL_SIZE + 1) * height + 1); + } + + // Horizontal lines. + for (let j = 0; j <= height; j++) { + ctx.moveTo(0, j * (CELL_SIZE + 1) + 1); + ctx.lineTo((CELL_SIZE + 1) * width + 1, j * (CELL_SIZE + 1) + 1); + } + + ctx.stroke(); +}; + +const getIndex = (row, column) => { + return row * width + column; +}; + +const drawCells = () => { + const tilesPtr = world.tiles(); + const tiles = new Uint8Array(memory.buffer, tilesPtr, width * height); + + ctx.beginPath(); + + for (let row = 0; row < height; row++) { + for (let col = 0; col < width; col++) { + const idx = getIndex(row, col); + + ctx.fillStyle = tiles[idx] == Cell.Floor + ? DEAD_COLOR + : ALIVE_COLOR; + + ctx.fillRect( + col * (CELL_SIZE + 1) + 1, + row * (CELL_SIZE + 1) + 1, + CELL_SIZE, + CELL_SIZE + ); + } + } + + ctx.stroke(); +}; + +newCellularAutomata(); + +// Connect UI element +document.getElementById('cellular-automata-option').addEventListener('click', newCellularAutomata); +document.getElementById('simple-rooms-option').addEventListener('click', newSimpleRooms); diff --git a/demo/www2/package.json b/demo/www2/package.json new file mode 100644 index 0000000..85b7c26 --- /dev/null +++ b/demo/www2/package.json @@ -0,0 +1,40 @@ +{ + "name": "create-wasm-app", + "version": "0.1.0", + "description": "create an app to consume rust-generated wasm packages", + "main": "index.js", + "bin": { + "create-wasm-app": ".bin/create-wasm-app.js" + }, + "scripts": { + "build": "webpack --config webpack.config.js", + "start": "webpack-dev-server", + "deploy": "gh-pages -d dist" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/rustwasm/create-wasm-app.git" + }, + "keywords": [ + "webassembly", + "wasm", + "rust", + "webpack" + ], + "author": "Ashley Williams ", + "license": "(MIT OR Apache-2.0)", + "bugs": { + "url": "https://github.com/rustwasm/create-wasm-app/issues" + }, + "homepage": "https://github.com/rustwasm/create-wasm-app#readme", + "dependencies": { + "mapgen-demo": "file:../pkg" + }, + "devDependencies": { + "hello-wasm-pack": "^0.1.0", + "webpack": "^4.29.3", + "webpack-cli": "^3.1.0", + "webpack-dev-server": "^3.1.5", + "copy-webpack-plugin": "^5.0.0" + } +} diff --git a/demo/www2/webpack.config.js b/demo/www2/webpack.config.js new file mode 100644 index 0000000..3f7c2f3 --- /dev/null +++ b/demo/www2/webpack.config.js @@ -0,0 +1,14 @@ +const CopyWebpackPlugin = require("copy-webpack-plugin"); +const path = require('path'); + +module.exports = { + entry: "./bootstrap.js", + output: { + path: path.resolve(__dirname, "../../docs"), + filename: "bootstrap.js", + }, + mode: "development", + plugins: [ + new CopyWebpackPlugin(['index.html', 'favicon.ico']) + ], +};