From ecec85d37cfef36979691cee5d75b870b7700b14 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Mon, 6 Jan 2025 20:32:25 -0500 Subject: [PATCH] Return 0 opacity if out of range. --- src/visibility.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/visibility.rs b/src/visibility.rs index f6e25b5..2365df0 100644 --- a/src/visibility.rs +++ b/src/visibility.rs @@ -58,7 +58,12 @@ impl Viewshed { (start.x.abs() + self.range as f32 * 2.) as u32, (start.y.abs() + self.range as f32 * 2.) as u32, ); - let visibility_grid = VisibilityGrid(*viewer_entity, opacity_map.clone()); + let visibility_grid = VisibilityGrid( + *viewer_entity, + start.as_ivec2(), + self.range, + opacity_map.clone(), + ); let mut new_visible = HashSet::new(); let mut new_visible_entities = HashSet::new(); // println!("Start: {viewer_entity}"); @@ -281,7 +286,7 @@ fn viewshed_removed( } } -struct VisibilityGrid(Entity, OpacityMap); +struct VisibilityGrid(Entity, IVec2, u32, OpacityMap); impl InputGrid for VisibilityGrid { type Grid = (u32, u32); @@ -294,7 +299,11 @@ impl InputGrid for VisibilityGrid { fn get_opacity(&self, _grid: &Self::Grid, coord: Coord) -> Self::Opacity { // println!("Checking {coord:?}"); - if let Some((opacity, entities)) = self.1.get(&IVec2::new(coord.x, coord.y)) { + let coord = IVec2::new(coord.x, coord.y); + if coord.distance(&self.1) > self.2 as f32 { + return 0; + } + if let Some((opacity, entities)) = self.3.get(&coord) { if entities.contains(&self.0) { // println!("Hit viewer, 0"); 0