diff options
Diffstat (limited to 'src/bin')
-rw-r--r-- | src/bin/main.rs | 39 | ||||
-rw-r--r-- | src/bin/web.rs | 73 |
2 files changed, 112 insertions, 0 deletions
diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..0806dfd --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,39 @@ +use darkcloud2_levelgen::{ Tile, Level, TileTemplate, Region, VecRegion, place_template, +connect_rooms, create_deadend, tunnel_branches, pretty_print, random_dungeon, create_templates}; + +use rand::{Rng, SeedableRng}; +use rand::rngs::SmallRng; +use rand::thread_rng; + +fn main() { + let mut thread_rng = thread_rng(); + let mut rng = SmallRng::from_seed([14;16]); + + let templates = create_templates(); + let template = &templates[0]; + + let mut level: VecRegion<Option<Tile>> = Region::new_with(15, 11); + let mut level = Level::new(Box::new(level)); + let res = place_template(&mut level, template, 0, 0); + let res = place_template(&mut level, template, 3, 7); + let res = place_template(&mut level, template, 5, 2); + let res = place_template(&mut level, template, 8, 7); + let res = connect_rooms(&mut level, 0, 1, &mut rng); + let res = connect_rooms(&mut level, 2, 1, &mut rng); + let res = connect_rooms(&mut level, 3, 2, &mut rng); + create_deadend(&mut level, &mut rng); + tunnel_branches(&mut level, &mut rng); + tunnel_branches(&mut level, &mut rng); + tunnel_branches(&mut level, &mut rng); + println!("{:?}", res); + pretty_print(&level); + + + let templates = create_templates(); + for _ in 0..10 { + let l = random_dungeon(&templates, &mut rng); + if l.is_ok() { + pretty_print(&l.unwrap()); + } + } +} diff --git a/src/bin/web.rs b/src/bin/web.rs new file mode 100644 index 0000000..166e3b2 --- /dev/null +++ b/src/bin/web.rs @@ -0,0 +1,73 @@ +#[macro_use] +extern crate stdweb; +extern crate darkcloud2_levelgen; + +use rand::{Rng, SeedableRng}; +use rand::rngs::SmallRng; + +use darkcloud2_levelgen::canvas::render_level; +use darkcloud2_levelgen::{random_dungeon, create_templates}; + +use stdweb::traits::*; +use stdweb::unstable::TryInto; +use stdweb::web::{ + document, + window, + CanvasRenderingContext2d +}; + +use stdweb::web::event::{ + MouseMoveEvent, + ResizeEvent, + ClickEvent, +}; + +use stdweb::web::html_element::CanvasElement; + +macro_rules! enclose { + ( ($( $x:ident ),*) $y:expr ) => { + { + $(let $x = $x.clone();)* + $y + } + }; +} + +static mut CANVAS: Option<CanvasRenderingContext2d> = None; +static mut RNG: Option<SmallRng> = None; + +fn draw_new_level() { + unsafe { + let mut canvas = CANVAS.as_mut().unwrap(); + let mut rng = RNG.as_mut().unwrap(); + canvas.clear_rect(0.0, 0.0, 1000.0, 1000.0); + let templates = create_templates(); + let mut l = random_dungeon(&templates, &mut rng); + while l.is_err() { + l = random_dungeon(&templates, &mut rng); + + } + let level = l.unwrap(); + render_level(&mut canvas, &level); + } +} + +fn main() { + stdweb::initialize(); + + let mut rng = SmallRng::from_seed([14;16]); + unsafe { RNG = Some(rng); } + + let canvas: CanvasElement = document().query_selector( "#canvas" ).unwrap().unwrap().try_into().unwrap(); + let mut context: CanvasRenderingContext2d = canvas.get_context().unwrap(); + unsafe { CANVAS = Some(context); } + draw_new_level(); + + let new = document().query_selector("#new").unwrap().unwrap(); + + new.add_event_listener(|_: ClickEvent| { + draw_new_level() + }); + + stdweb::event_loop(); +} |