+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>>,
+}