From 259006ce56e7a3d09f202ac42b7dcb1fdfaa73c4 Mon Sep 17 00:00:00 2001 From: klangner Date: Sat, 12 Sep 2020 14:44:37 +0200 Subject: [PATCH] without bundle --- .gitignore | 3 +- demo/Cargo.toml | 23 ++++-- demo/config/display.ron | 4 - demo/config/input.ron | 27 ------ demo/index.html | 59 +++++++++++++ demo/src/lib.rs | 24 ++++++ demo/src/main.rs | 179 ---------------------------------------- demo/src/utils.rs | 12 +++ 8 files changed, 111 insertions(+), 220 deletions(-) delete mode 100644 demo/config/display.ron delete mode 100644 demo/config/input.ron create mode 100644 demo/index.html create mode 100644 demo/src/lib.rs delete mode 100644 demo/src/main.rs create mode 100644 demo/src/utils.rs diff --git a/.gitignore b/.gitignore index 49e95d5..f94e817 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /target /demo/target Cargo.lock -.vscode/ \ No newline at end of file +.vscode/ +pkg/ \ No newline at end of file diff --git a/demo/Cargo.toml b/demo/Cargo.toml index 68fd312..ee0b48d 100644 --- a/demo/Cargo.toml +++ b/demo/Cargo.toml @@ -4,13 +4,18 @@ version = "0.1.1" authors = ["Krzysztof Langner "] edition = "2018" -[dependencies] -rand = "0.7" -amethyst = {version = "0.15", features = ["tiles", "no-slow-safety-checks"]} -log = { version = "0.4.8", features = ["serde"] } -mapgen = {path=".."} +[lib] +crate-type = ["cdylib"] -[features] -default = ["metal"] -metal = ["amethyst/metal"] -vulkan = ["amethyst/vulkan"] +[dependencies] +wasm-bindgen = "0.2.68" + +[dependencies.web-sys] +version = "0.3.4" +features = [ + 'Document', + 'Element', + 'HtmlElement', + 'Node', + 'Window', +] \ No newline at end of file diff --git a/demo/config/display.ron b/demo/config/display.ron deleted file mode 100644 index c5a98fd..0000000 --- a/demo/config/display.ron +++ /dev/null @@ -1,4 +0,0 @@ -( - title: "mapgen demo", - dimensions: Some((840, 520)), -) \ No newline at end of file diff --git a/demo/config/input.ron b/demo/config/input.ron deleted file mode 100644 index cb5dae1..0000000 --- a/demo/config/input.ron +++ /dev/null @@ -1,27 +0,0 @@ - -( - axes: { - "camera_x": Emulated( - pos: Key(D), - neg: Key(A), - ), - "camera_y": Emulated( - pos: Key(W), - neg: Key(S), - ), - "camera_scale": Emulated( - pos: Key(E), - neg: Key(Q), - ), - "camera_z": Emulated( - pos: Key(R), - neg: Key(F), - ), - }, - actions: { - "camera_switch": [[Key(Space)]], - "select": [[Mouse(Left)]], - "toggle_rotation": [[Key(Y)]], - "toggle_translation": [[Key(T)]], - }, -) \ No newline at end of file diff --git a/demo/index.html b/demo/index.html new file mode 100644 index 0000000..02f635b --- /dev/null +++ b/demo/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/demo/src/lib.rs b/demo/src/lib.rs new file mode 100644 index 0000000..1e83b62 --- /dev/null +++ b/demo/src/lib.rs @@ -0,0 +1,24 @@ +use wasm_bindgen::prelude::*; + +// Called when the wasm module is instantiated +#[wasm_bindgen(start)] +pub fn main() -> Result<(), JsValue> { + // Use `web_sys`'s global `window` function to get a handle on the global + // window object. + let window = web_sys::window().expect("no global `window` exists"); + let document = window.document().expect("should have a document on window"); + let body = document.body().expect("document should have a body"); + + // Manufacture the element we're gonna append + let val = document.create_element("p")?; + val.set_inner_html("Hello from Rust!"); + + body.append_child(&val)?; + + Ok(()) +} + +#[wasm_bindgen] +pub fn add(a: u32, b: u32) -> u32 { + a + b +} \ No newline at end of file diff --git a/demo/src/main.rs b/demo/src/main.rs deleted file mode 100644 index 436b976..0000000 --- a/demo/src/main.rs +++ /dev/null @@ -1,179 +0,0 @@ -use amethyst::{ - assets::{AssetStorage, Loader}, - core::{ - math::{Point3, Vector3}, - Transform, TransformBundle, - }, - ecs::Entity, - input::{is_close_requested, is_key_down, InputBundle, StringBindings}, - prelude::*, - renderer::{ - camera::Camera, - formats::texture::ImageFormat, - sprite::{SpriteSheet, SpriteSheetFormat, SpriteSheetHandle}, - types::DefaultBackend, - RenderFlat2D, RenderToWindow, RenderingBundle, Texture, - palette::Srgba, - }, - tiles::{MortonEncoder, RenderTiles2D, Tile, TileMap}, - utils::application_root_dir, - window::ScreenDimensions, - winit, -}; -use mapgen::dungeon::{ - MapBuilder, - map::{Map, Point, TileType}, - cellular_automata::CellularAutomataGen, - starting_point::{AreaStartingPosition, XStart, YStart}, - cull_unreachable::CullUnreachable, - distant_exit::DistantExit, -}; - - -#[derive(Default, Clone)] -struct MapTiles ; - -impl Tile for MapTiles { - fn sprite(&self, p: Point3, world: &World) -> Option { - let map = world.read_resource::(); - let pos = Point::new(p.x as usize, p.y as usize); - if map.starting_point == Some(pos) { - Some(160) - } else if map.exit_point == Some(pos) { - Some(12) - } else if map.at(p.x as usize, p.y as usize) == TileType::Wall { - Some(140) - } else { - Some(19) - } - } - - fn tint(&self, p: Point3, world: &World) -> Srgba { - let map = world.read_resource::(); - let pos = Some(Point::new(p.x as usize, p.y as usize)); - if map.starting_point == pos || map.exit_point == pos { - Srgba::new(1.0, 1.0, 0.0, 1.0) - } else { - Srgba::new(1.0, 1.0, 1.0, 1.0) - } - } -} - -fn load_tiles_sprite_sheet(world: &mut World, png_path: &str, ron_path: &str) -> SpriteSheetHandle { - let texture_handle = { - let loader = world.read_resource::(); - let texture_storage = world.read_resource::>(); - loader.load(png_path, ImageFormat::default(), (), &texture_storage) - }; - let loader = world.read_resource::(); - let sprite_sheet_store = world.read_resource::>(); - loader.load( - ron_path, - SpriteSheetFormat(texture_handle), - (), - &sprite_sheet_store, - ) -} - -fn init_camera(world: &mut World, transform: Transform, camera: Camera) -> Entity { - world - .create_entity() - .with(transform) - .with(camera) - .named("camera") - .build() -} - -fn init_map(world: &mut World) { - let map = MapBuilder::new(Box::new(CellularAutomataGen::new(80, 50))) - .with(AreaStartingPosition::new(XStart::CENTER, YStart::CENTER)) - .with(CullUnreachable::new()) - .with(DistantExit::new()) - .build_map(); - world.insert(map); -} - - -struct PlayState; -impl SimpleState for PlayState { - fn on_start(&mut self, data: StateData<'_, GameData<'_, '_>>) { - - let mut world = data.world; - - // Create map - init_map(&mut world); - - let map_sprite_sheet_handle = - load_tiles_sprite_sheet(world, "texture/basic.png", "texture/basic.ron"); - - let (width, height) = { - let dim = world.read_resource::(); - (dim.width(), dim.height()) - }; - - let _camera = init_camera( - world, - Transform::from(Vector3::new(-10.0, 10.0, 1.1)), - Camera::standard_2d(width, height), - ); - - let tile_map = TileMap::::new( - Vector3::new(80, 50, 1), - Vector3::new(20, 20, 1), - Some(map_sprite_sheet_handle), - ); - - let _map_entity = world - .create_entity() - .with(tile_map) - .with(Transform::default()) - .build(); - } - - fn handle_event( - &mut self, - data: StateData<'_, GameData<'_, '_>>, - event: StateEvent, - ) -> SimpleTrans { - let StateData { .. } = data; - if let StateEvent::Window(event) = &event { - if is_close_requested(&event) || is_key_down(&event, winit::VirtualKeyCode::Escape) { - Trans::Quit - } else { - Trans::None - } - } else { - Trans::None - } - } -} - -fn main() -> amethyst::Result<()> { - amethyst::Logger::from_config(Default::default()) - .level_for("demo", log::LevelFilter::Warn) - .start(); - - let app_root = application_root_dir()?; - let assets_directory = app_root.join("assets"); - let display_config_path = app_root.join("config/display.ron"); - - let game_data = GameDataBuilder::default() - .with_bundle(TransformBundle::new())? - .with_bundle( - InputBundle::::new() - .with_bindings_from_file("config/input.ron")?, - )? - .with_bundle( - RenderingBundle::::new() - .with_plugin( - RenderToWindow::from_config_path(display_config_path)? - .with_clear([0.0, 0.0, 0.0, 1.0]), - ) - .with_plugin(RenderFlat2D::default()) - .with_plugin(RenderTiles2D::::default()), - )?; - - let mut game = Application::build(assets_directory, PlayState)?.build(game_data)?; - game.run(); - Ok(()) -} \ No newline at end of file diff --git a/demo/src/utils.rs b/demo/src/utils.rs new file mode 100644 index 0000000..971a4bc --- /dev/null +++ b/demo/src/utils.rs @@ -0,0 +1,12 @@ + +pub fn set_panic_hook() { + // When the `console_error_panic_hook` feature is enabled, we can call the + // `set_panic_hook` function at least once during initialization, and then + // we will get better error messages if our code ever panics. + // + // For more details see + // https://github.com/rustwasm/console_error_panic_hook#readme + #[cfg(feature = "console_error_panic_hook")] + console_error_panic_hook::set_once(); +} +