Refactored level generation + fixed bug with wall finding
[kaka/rust-sdl-test.git] / src / core / level / mod.rs
diff --git a/src/core/level/mod.rs b/src/core/level/mod.rs
new file mode 100644 (file)
index 0000000..b70cdb8
--- /dev/null
@@ -0,0 +1,56 @@
+use common::Point2D;
+use core::render::Renderer;
+use sprites::SpriteManager;
+
+mod lvlgen;
+
+pub use self::lvlgen::LevelGenerator;
+
+////////// LEVEL ///////////////////////////////////////////////////////////////
+
+#[derive(Default)]
+pub struct Level {
+    pub gravity: Point2D<f64>,
+    pub grid: Grid,
+    walls: Vec<Vec<Point2D<isize>>>,
+}
+
+impl Level {
+    // pub fn new(gravity: Point2D<f64>) -> Self {
+    //         let seed = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs() as u32;
+    //         let mut lvl = Level { gravity, grid: Grid::generate(seed, 10), iterations: 10, walls: vec!() };
+    //         lvl.filter_regions();
+    //         lvl
+    // }
+
+    pub fn render(&mut self, renderer: &mut Renderer, _sprites: &SpriteManager) {
+       renderer.canvas().set_draw_color((64, 64, 64));
+       let size = self.grid.cell_size;
+       for x in 0..self.grid.width {
+           for y in 0..self.grid.height {
+               if self.grid.cells[x][y] {
+                   renderer.canvas().fill_rect(sdl2::rect::Rect::new(x as i32 * size as i32, y as i32 * size as i32, size as u32, size as u32)).unwrap();
+               }
+           }
+       }
+
+       let off = (size / 2) as i32;
+       for wall in &self.walls {
+           for w in wall.windows(2) {
+               renderer.draw_line((w[0].x as i32 + off, w[0].y as i32 + off), (w[1].x as i32 + off, w[1].y as i32 + off), (255, 255, 0));
+           }
+           let last = wall.len() - 1;
+           renderer.draw_line((wall[0].x as i32 + off, wall[0].y as i32 + off), (wall[last].x as i32 + off, wall[last].y as i32 + off), (255, 255, 0));
+       }
+    }
+}
+
+////////// GRID ////////////////////////////////////////////////////////////////
+
+#[derive(Default)]
+pub struct Grid {
+    pub width: usize,
+    pub height: usize,
+    pub cell_size: usize,
+    pub cells: Vec<Vec<bool>>,
+}