X-Git-Url: http://www.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fteststate.rs;h=0a66d82982e2489bc25fecd4bbd4fb2c56603209;hb=8012f86b052f550fe6644ec33a2713f381fc4347;hp=2f8f24062326f45950962edeef83f56a3a84be56;hpb=40c949e573ea85720e1fa9972a1e16f5f1216799;p=kaka%2Frust-sdl-test.git diff --git a/src/teststate.rs b/src/teststate.rs index 2f8f240..0a66d82 100644 --- a/src/teststate.rs +++ b/src/teststate.rs @@ -1,20 +1,23 @@ -use common::{Point, Intersection}; +use common::{Dimension, Point, Intersection}; use core::app::{AppState, StateChange}; use core::controller::ControllerManager; +use core::level::Grid; use core::render::Renderer; -use point; // defined in common, but loaded from main... +use {point, dimen}; use sdl2::event::Event; use sprites::SpriteManager; use time::{Duration, Instant}; pub struct TestState { start: Instant, + mouse: Point, } impl TestState { pub fn new() -> TestState { TestState { start: Instant::now(), + mouse: point!(0, 0), } } @@ -67,12 +70,56 @@ impl AppState for TestState { let y2 = ((self.start.elapsed().as_seconds_f64() + std::f64::consts::FRAC_PI_4).sin() * 60.0) as i32; self.draw_intersecting_lines(renderer, (100 + x, 100 + y), (150 + x, 150 + y), (100 + x2, 150 + y2), (150 + x2, 100 + y2)); self.draw_intersecting_lines(renderer, (250 + x, 85 + y), (250 + x, 165 + y), (210 + x2, 125 + y2), (290 + x2, 125 + y2)); + + let grid = Grid { + size: dimen!(10, 10), + cell_size: dimen!(30, 30), + cells: vec!(vec!(false; 10); 10), + }; + + let offset = point!(200, 200); + let size = grid.cell_size; + for x in 0..grid.size.width { + for y in 0..grid.size.height { + let col = (32 + 32 * ((x + y) % 2)) as u8; + renderer.canvas().set_draw_color((col, col, col)); + renderer.canvas().fill_rect(sdl2::rect::Rect::new( + offset.x + x as i32 * size.width as i32, + offset.y + y as i32 * size.height as i32, + size.width as u32, + size.height as u32)).unwrap(); + } + } + + let offsetf = point!(offset.x as f64, offset.y as f64); +// let p1 = point!(23.0, 16.0); + let p1 = point!(300.0 / 2.0, 300.0 / 2.0); + let p2 = { + //let p = point!(78.0*3.0, 54.0*3.0); + let p = self.mouse - offset; + point!(p.x as f64, p.y as f64) + }; + for p in grid.grid_coordinates_on_line(p1, p2) { + renderer.canvas().set_draw_color((0, 96, 0)); + renderer.canvas().fill_rect(sdl2::rect::Rect::new( + offset.x + p.x as i32 * size.width as i32, + offset.y + p.y as i32 * size.height as i32, + size.width as u32, + size.height as u32)).unwrap(); + } + let p1 = p1 + offsetf; + let p2 = self.mouse;//p2 + offsetf; + renderer.draw_line((p1.x as i32, p1.y as i32), (p2.x as i32, p2.y as i32), (255, 255, 0)); } fn leave(&mut self) { } fn handle_event(&mut self, _event: Event) -> Option { + match _event { + Event::MouseMotion { x, y, .. } => self.mouse = point!(x, y), + _ => {} + } None } }