#[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 = None; static mut RNG: Option = 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(); }