Refactor grid drawing for greater clarity
parent
8e3521fe56
commit
a9a397ba97
|
@ -2,6 +2,7 @@ use piston_window::*;
|
||||||
use piston_window::math::*;
|
use piston_window::math::*;
|
||||||
|
|
||||||
const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 0.05];
|
const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 0.05];
|
||||||
|
const GRID_SIZE: Scalar = 100.0;
|
||||||
|
|
||||||
pub struct Map {
|
pub struct Map {
|
||||||
pub width: Scalar,
|
pub width: Scalar,
|
||||||
|
@ -19,43 +20,41 @@ impl Map {
|
||||||
|
|
||||||
pub fn draw_grid<G>(&self,
|
pub fn draw_grid<G>(&self,
|
||||||
cam_pos: Vec2d,
|
cam_pos: Vec2d,
|
||||||
cam_width: Scalar,
|
cam_size: Vec2d,
|
||||||
cam_height: Scalar,
|
|
||||||
draw_state: &DrawState,
|
draw_state: &DrawState,
|
||||||
transform: Matrix2d,
|
transform: Matrix2d,
|
||||||
g: &mut G)
|
g: &mut G)
|
||||||
where G: Graphics
|
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;
|
/* Determine the number of grid lines to draw in each direction */
|
||||||
let ycount = (cam_height / 100.0).ceil() as u32 + 2;
|
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;
|
/* Clamp the line coordinates to multiples of the grid size */
|
||||||
let min_y = cam_pos[1] - cam_height / 2.0;
|
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;
|
/* Draw vertical grid lines */
|
||||||
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;
|
|
||||||
for x in 0..xcount {
|
for x in 0..xcount {
|
||||||
let line_x = first_x + (100.0 * x as Scalar);
|
let line_x = first_x + (GRID_SIZE * x as Scalar);
|
||||||
let p1 = sub([line_x, start_y], cam_pos);
|
let p1 = [line_x, min[1]];
|
||||||
let p2 = sub([line_x, end_y], cam_pos);
|
let p2 = [line_x, max[1]];
|
||||||
Line::new(GREEN, 1.0)
|
Line::new(GREEN, 1.0)
|
||||||
.draw([p1[0], p1[1], p2[0], p2[1]],
|
.draw([p1[0], p1[1], p2[0], p2[1]], draw_state, transform, g);
|
||||||
draw_state, transform, g);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let start_x = cam_pos[0] - cam_width;
|
/* Draw horizontal grid lines */
|
||||||
let end_x = cam_pos[0] + cam_width;
|
|
||||||
for y in 0..ycount {
|
for y in 0..ycount {
|
||||||
let line_y = first_y + (100.0 * y as Scalar);
|
let line_y = first_y + (GRID_SIZE * y as Scalar);
|
||||||
let p1 = sub([start_x, line_y], cam_pos);
|
let p1 = [min[0], line_y];
|
||||||
let p2 = sub([end_x, line_y], cam_pos);
|
let p2 = [max[0], line_y];
|
||||||
Line::new(GREEN, 1.0)
|
Line::new(GREEN, 1.0)
|
||||||
.draw([p1[0], p1[1], p2[0], p2[1]],
|
.draw([p1[0], p1[1], p2[0], p2[1]], draw_state, transform, g);
|
||||||
draw_state, transform, g);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,10 +74,10 @@ impl Game {
|
||||||
let cam_width = self.camera.width;
|
let cam_width = self.camera.width;
|
||||||
let cam_height = self.camera.height;
|
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)));
|
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() {
|
for bullet in self.bullets.iter() {
|
||||||
draw_bullet(&bullet, &ds, cam_trans, gl);
|
draw_bullet(&bullet, &ds, cam_trans, gl);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue