-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<i32>,
}
impl TestState {
pub fn new() -> TestState {
TestState {
start: Instant::now(),
+ mouse: point!(0, 0),
}
}
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<StateChange> {
+ match _event {
+ Event::MouseMotion { x, y, .. } => self.mouse = point!(x, y),
+ _ => {}
+ }
None
}
}