summaryrefslogtreecommitdiff
path: root/src/bin
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin')
-rw-r--r--src/bin/main.rs39
-rw-r--r--src/bin/web.rs73
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();
+}