use common::Point; use core::render::Renderer; use sprites::SpriteManager; mod lvlgen; pub use self::lvlgen::LevelGenerator; ////////// LEVEL /////////////////////////////////////////////////////////////// #[derive(Default)] pub struct Level { pub gravity: Point, pub grid: Grid, walls: Vec>>, } impl Level { // pub fn new(gravity: Point) -> 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>, }