From 21f79b0528344997d3e9fd980cbf432d7ae8d399 Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Mon, 25 Jul 2022 13:52:50 -0500 Subject: [PATCH] Remove `Map` dependency from some visibility systems. --- src/visibility.rs | 71 +++++++++++++++++++++-------------------------- 1 file changed, 32 insertions(+), 39 deletions(-) diff --git a/src/visibility.rs b/src/visibility.rs index 7d58c1a..43026f4 100644 --- a/src/visibility.rs +++ b/src/visibility.rs @@ -48,13 +48,12 @@ impl Viewshed { self.visible_points.contains(&point.into()) } - fn update( + fn update( &mut self, viewer_entity: &Entity, visible_entities: &mut VisibleEntities, start: &GlobalTransform, rapier_context: &RapierContext, - map: &Map, visible_query: &Query<(&Visible, &Collider, &GlobalTransform)>, obstructions_query: &Query<&MapObstruction>, events: &mut EventWriter, @@ -88,7 +87,10 @@ impl Viewshed { let vision_distance = vision_distance::Circle::new(self.range); let shape = Collider::cuboid(0.5, 0.5); let mut new_visible_entities = HashSet::new(); - let size = (map.width as u32, map.height as u32); + let size = ( + (start.translation.x + self.range as f32) as u32, + (start.translation.y + self.range as f32) as u32, + ); let visibility_grid = VisibilityGrid( size, RefCell::new(Box::new(|coord: Coord| { @@ -295,7 +297,7 @@ where } } -fn update_viewshed( +fn update_viewshed( config: Res, visible: Query<(&Visible, &Collider, &GlobalTransform)>, obstructions: Query<&MapObstruction>, @@ -305,34 +307,29 @@ fn update_viewshed( &mut VisibleEntities, &GlobalTransform, )>, - map: Query<&Map>, rapier_context: Res, mut changed: EventWriter, ) { if !config.query_pipeline_active { return; } - if let Ok(map) = map.get_single() { - let mut cache = HashMap::new(); - for (viewer_entity, mut viewshed, mut visible_entities, viewer_transform) in - viewers.iter_mut() - { - viewshed.update( - &viewer_entity, - &mut visible_entities, - viewer_transform, - &rapier_context, - map, - &visible, - &obstructions, - &mut changed, - &mut cache, - ); - } + let mut cache = HashMap::new(); + for (viewer_entity, mut viewshed, mut visible_entities, viewer_transform) in viewers.iter_mut() + { + viewshed.update( + &viewer_entity, + &mut visible_entities, + viewer_transform, + &rapier_context, + &visible, + &obstructions, + &mut changed, + &mut cache, + ); } } -fn remove_visible( +fn remove_visible( removed: RemovedComponents, mut viewers: Query<( Entity, @@ -340,7 +337,6 @@ fn remove_visible( &mut VisibleEntities, &GlobalTransform, )>, - map: Query<&Map>, rapier_context: Res, visible: Query<(&Visible, &Collider, &GlobalTransform)>, obstructions: Query<&MapObstruction>, @@ -354,19 +350,16 @@ fn remove_visible( continue; } visible_entities.remove(&removed); - if let Ok(map) = map.get_single() { - viewshed.update( - &viewer_entity, - &mut visible_entities, - start, - &*rapier_context, - map, - &visible, - &obstructions, - &mut changed, - &mut cache, - ); - } + viewshed.update( + &viewer_entity, + &mut visible_entities, + start, + &*rapier_context, + &visible, + &obstructions, + &mut changed, + &mut cache, + ); } } } @@ -449,9 +442,9 @@ impl Plugin for VisibilityPlugin fn build(&self, app: &mut App) { app.add_event::() .add_system_to_stage(CoreStage::PreUpdate, add_visibility_indices::) - .add_system_to_stage(CoreStage::PreUpdate, update_viewshed::) + .add_system_to_stage(CoreStage::PreUpdate, update_viewshed) .add_system_to_stage(CoreStage::PostUpdate, viewshed_removed) - .add_system_to_stage(CoreStage::PostUpdate, remove_visible::) + .add_system_to_stage(CoreStage::PostUpdate, remove_visible) .add_system_to_stage(CoreStage::PreUpdate, update_revealed_tiles::) .add_system_to_stage(CoreStage::PreUpdate, log_visible); }