Refactor grid drawing for greater clarity

master
Levi Pearson 2016-07-30 16:18:34 -06:00
parent 8e3521fe56
commit a9a397ba97
2 changed files with 24 additions and 25 deletions

View File

@ -2,6 +2,7 @@ use piston_window::*;
use piston_window::math::*;
const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 0.05];
const GRID_SIZE: Scalar = 100.0;
pub struct Map {
pub width: Scalar,
@ -19,43 +20,41 @@ impl Map {
pub fn draw_grid<G>(&self,
cam_pos: Vec2d,
cam_width: Scalar,
cam_height: Scalar,
cam_size: Vec2d,
draw_state: &DrawState,
transform: Matrix2d,
g: &mut G)
where G: Graphics
{
/* Camera coordinates will be centered in the screen, so find the
upper left and lower right coordinates */
let min = sub(cam_pos, mul_scalar(cam_size, 0.5));
let max = add(cam_pos, mul_scalar(cam_size, 0.5));
let xcount = (cam_width / 100.0).ceil() as u32 + 2;
let ycount = (cam_height / 100.0).ceil() as u32 + 2;
/* Determine the number of grid lines to draw in each direction */
let xcount = (cam_size[0] / GRID_SIZE).ceil() as u32 + 1;
let ycount = (cam_size[1] / GRID_SIZE).ceil() as u32 + 1;
let min_x = cam_pos[0] - cam_width / 2.0;
let min_y = cam_pos[1] - cam_height / 2.0;
/* Clamp the line coordinates to multiples of the grid size */
let first_x = (min[0] / GRID_SIZE).trunc() * GRID_SIZE;
let first_y = (min[1] / GRID_SIZE).trunc() * GRID_SIZE;
let first_x = (min_x / 100.0).trunc() * 100.0;
let first_y = (min_y / 100.0).trunc() * 100.0;
let start_y = cam_pos[1] - cam_height;
let end_y = cam_pos[1] + cam_height;
/* Draw vertical grid lines */
for x in 0..xcount {
let line_x = first_x + (100.0 * x as Scalar);
let p1 = sub([line_x, start_y], cam_pos);
let p2 = sub([line_x, end_y], cam_pos);
let line_x = first_x + (GRID_SIZE * x as Scalar);
let p1 = [line_x, min[1]];
let p2 = [line_x, max[1]];
Line::new(GREEN, 1.0)
.draw([p1[0], p1[1], p2[0], p2[1]],
draw_state, transform, g);
.draw([p1[0], p1[1], p2[0], p2[1]], draw_state, transform, g);
}
let start_x = cam_pos[0] - cam_width;
let end_x = cam_pos[0] + cam_width;
/* Draw horizontal grid lines */
for y in 0..ycount {
let line_y = first_y + (100.0 * y as Scalar);
let p1 = sub([start_x, line_y], cam_pos);
let p2 = sub([end_x, line_y], cam_pos);
let line_y = first_y + (GRID_SIZE * y as Scalar);
let p1 = [min[0], line_y];
let p2 = [max[0], line_y];
Line::new(GREEN, 1.0)
.draw([p1[0], p1[1], p2[0], p2[1]],
draw_state, transform, g);
.draw([p1[0], p1[1], p2[0], p2[1]], draw_state, transform, g);
}
}
}

View File

@ -74,10 +74,10 @@ impl Game {
let cam_width = self.camera.width;
let cam_height = self.camera.height;
self.map.draw_grid(cam_pos, cam_width, cam_height, &ds, ct, gl);
let cam_trans = ct.append_transform(translate(mul_scalar(cam_pos, -1.0)));
self.map.draw_grid(cam_pos, [cam_width, cam_height], &ds, cam_trans, gl);
for bullet in self.bullets.iter() {
draw_bullet(&bullet, &ds, cam_trans, gl);
}