Generic grids
[kaka/rust-sdl-test.git] / src / core / level / mod.rs
CommitLineData
e570927a 1use common::Point;
79914631
TW
2use core::render::Renderer;
3use sprites::SpriteManager;
4
5mod lvlgen;
6
7pub use self::lvlgen::LevelGenerator;
8
9////////// LEVEL ///////////////////////////////////////////////////////////////
10
11#[derive(Default)]
12pub struct Level {
e570927a 13 pub gravity: Point<f64>,
37f3e1ed 14 pub grid: Grid<bool>,
e570927a 15 walls: Vec<Vec<Point<isize>>>,
79914631
TW
16}
17
18impl Level {
e570927a 19 // pub fn new(gravity: Point<f64>) -> Self {
79914631
TW
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)]
37f3e1ed 51pub struct Grid<T> {
79914631
TW
52 pub width: usize,
53 pub height: usize,
54 pub cell_size: usize,
37f3e1ed 55 pub cells: Vec<Vec<T>>,
79914631 56}