summaryrefslogtreecommitdiff
path: root/src/bin/web.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/web.rs')
-rw-r--r--src/bin/web.rs73
1 files changed, 73 insertions, 0 deletions
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();
+}