X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fcore%2Flevel%2Fmod.rs;h=578a94e412061bf81d46cebb45854c18a2ef51b0;hb=0c56b1f7a5568d6bfbebd196cf63ccef503cf959;hp=84d4fad428720330d7d2a7f9e31282ee55e933c3;hpb=b5332019b30abd70698c9cdd7b7b9d42502681c2;p=kaka%2Frust-sdl-test.git diff --git a/src/core/level/mod.rs b/src/core/level/mod.rs index 84d4fad..578a94e 100644 --- a/src/core/level/mod.rs +++ b/src/core/level/mod.rs @@ -1,4 +1,4 @@ -use common::{Point, Dimension, Intersection, supercover_line}; +use common::{Point, Dimension, Intersection, Angle, ToAngle, supercover_line}; use core::render::Renderer; use sprites::SpriteManager; use std::rc::Rc; @@ -53,35 +53,50 @@ impl Level { grid } - pub fn render(&mut self, renderer: &mut Renderer, _sprites: &SpriteManager) { - // original grid - renderer.canvas().set_draw_color((64, 64, 64)); - let size = &self.grid.scale; - for x in 0..self.grid.size.width { - for y in 0..self.grid.size.height { - if self.grid.cells[x][y] { - renderer.canvas().fill_rect(sdl2::rect::Rect::new( - x as i32 * size.width as i32, - y as i32 * size.height as i32, - size.width as u32, - size.height as u32)).unwrap(); + pub fn render(&mut self, renderer: &mut Renderer, _sprites: &SpriteManager, debug_mode: bool) { + if debug_mode { + // original grid + renderer.canvas().set_draw_color((64, 64, 64)); + let size = &self.grid.scale; + for x in 0..self.grid.size.width { + for y in 0..self.grid.size.height { + if self.grid.cells[x][y] { + renderer.canvas().fill_rect(sdl2::rect::Rect::new( + x as i32 * size.width as i32, + y as i32 * size.height as i32, + size.width as u32, + size.height as u32)).unwrap(); + } } } - } - // wall grid - renderer.canvas().set_draw_color((0, 32, 0)); - let size = &self.wall_grid.scale; - for x in 0..self.wall_grid.size.width { - for y in 0..self.wall_grid.size.height { - if !self.wall_grid.cells[x][y].is_empty() { - let num = self.wall_grid.cells[x][y].len(); - renderer.canvas().set_draw_color((0, 32*num as u8, 0)); - renderer.canvas().fill_rect(sdl2::rect::Rect::new( - x as i32 * size.width as i32, - y as i32 * size.height as i32, - size.width as u32, - size.height as u32)).unwrap(); + // wall grid + renderer.canvas().set_draw_color((0, 32, 0)); + let size = &self.wall_grid.scale; + for x in 0..self.wall_grid.size.width { + for y in 0..self.wall_grid.size.height { + if !self.wall_grid.cells[x][y].is_empty() { + let num = self.wall_grid.cells[x][y].len(); + renderer.canvas().set_draw_color((0, 32*num as u8, 0)); + renderer.canvas().fill_rect(sdl2::rect::Rect::new( + x as i32 * size.width as i32, + y as i32 * size.height as i32, + size.width as u32, + size.height as u32)).unwrap(); + } + } + } + + // wall normals + for wall in &self.walls { + for e in &wall.edges { + let c = (e.p1 + e.p2) / 2.0; + let a = (e.p2 - e.p1).to_angle() + std::f64::consts::FRAC_PI_2.radians(); + + renderer.draw_line( + <(i32, i32)>::from(c.to_i32()), + <(i32, i32)>::from((c + Point::from(a) * 10.0).to_i32()), + (0, 128, 255)); } } } @@ -89,6 +104,25 @@ impl Level { // walls for wall in &self.walls { for e in &wall.edges { + if !debug_mode { + let c = (e.p1 + e.p2) / 2.0; + let a = (e.p2 - e.p1).to_angle() - std::f64::consts::FRAC_PI_2.radians(); + + renderer.draw_line( + <(i32, i32)>::from(c.to_i32()), + <(i32, i32)>::from((c + Point::from(a) * 10.0).to_i32()), + (255, 128, 0)); + + renderer.draw_line( + <(i32, i32)>::from(e.p1.to_i32()), + <(i32, i32)>::from((c + Point::from(a) * 20.0).to_i32()), + (96, 48, 0)); + renderer.draw_line( + <(i32, i32)>::from(e.p2.to_i32()), + <(i32, i32)>::from((c + Point::from(a) * 20.0).to_i32()), + (96, 48, 0)); + } + renderer.draw_line( <(i32, i32)>::from(e.p1.to_i32()), <(i32, i32)>::from(e.p2.to_i32()), @@ -238,4 +272,8 @@ impl<'a> Wall<'a> { edge, } } + + pub fn normal(&self) -> Angle { + (self.edge.p2 - self.edge.p1).to_angle() + std::f64::consts::FRAC_PI_2.radians() + } }