1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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();
}
|