| 1 | use common::Point; |
| 2 | use core::render::Renderer; |
| 3 | use sprites::SpriteManager; |
| 4 | |
| 5 | mod lvlgen; |
| 6 | |
| 7 | pub use self::lvlgen::LevelGenerator; |
| 8 | |
| 9 | ////////// LEVEL /////////////////////////////////////////////////////////////// |
| 10 | |
| 11 | #[derive(Default)] |
| 12 | pub struct Level { |
| 13 | pub gravity: Point<f64>, |
| 14 | pub grid: Grid, |
| 15 | walls: Vec<Vec<Point<isize>>>, |
| 16 | } |
| 17 | |
| 18 | impl Level { |
| 19 | // pub fn new(gravity: Point<f64>) -> Self { |
| 20 | // let seed = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_secs() as u32; |
| 21 | // let mut lvl = Level { gravity, grid: Grid::generate(seed, 10), iterations: 10, walls: vec!() }; |
| 22 | // lvl.filter_regions(); |
| 23 | // lvl |
| 24 | // } |
| 25 | |
| 26 | pub fn render(&mut self, renderer: &mut Renderer, _sprites: &SpriteManager) { |
| 27 | renderer.canvas().set_draw_color((64, 64, 64)); |
| 28 | let size = self.grid.cell_size; |
| 29 | for x in 0..self.grid.width { |
| 30 | for y in 0..self.grid.height { |
| 31 | if self.grid.cells[x][y] { |
| 32 | 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(); |
| 33 | } |
| 34 | } |
| 35 | } |
| 36 | |
| 37 | let off = (size / 2) as i32; |
| 38 | for wall in &self.walls { |
| 39 | for w in wall.windows(2) { |
| 40 | 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)); |
| 41 | } |
| 42 | let last = wall.len() - 1; |
| 43 | 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)); |
| 44 | } |
| 45 | } |
| 46 | } |
| 47 | |
| 48 | ////////// GRID //////////////////////////////////////////////////////////////// |
| 49 | |
| 50 | #[derive(Default)] |
| 51 | pub struct Grid { |
| 52 | pub width: usize, |
| 53 | pub height: usize, |
| 54 | pub cell_size: usize, |
| 55 | pub cells: Vec<Vec<bool>>, |
| 56 | } |