Remove Map
dependency from some visibility systems.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4e63ad21d1
commit
21f79b0528
|
@ -48,13 +48,12 @@ impl Viewshed {
|
||||||
self.visible_points.contains(&point.into())
|
self.visible_points.contains(&point.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update<D: 'static + Clone + Default + Send + Sync>(
|
fn update(
|
||||||
&mut self,
|
&mut self,
|
||||||
viewer_entity: &Entity,
|
viewer_entity: &Entity,
|
||||||
visible_entities: &mut VisibleEntities,
|
visible_entities: &mut VisibleEntities,
|
||||||
start: &GlobalTransform,
|
start: &GlobalTransform,
|
||||||
rapier_context: &RapierContext,
|
rapier_context: &RapierContext,
|
||||||
map: &Map<D>,
|
|
||||||
visible_query: &Query<(&Visible, &Collider, &GlobalTransform)>,
|
visible_query: &Query<(&Visible, &Collider, &GlobalTransform)>,
|
||||||
obstructions_query: &Query<&MapObstruction>,
|
obstructions_query: &Query<&MapObstruction>,
|
||||||
events: &mut EventWriter<VisibilityChanged>,
|
events: &mut EventWriter<VisibilityChanged>,
|
||||||
|
@ -88,7 +87,10 @@ impl Viewshed {
|
||||||
let vision_distance = vision_distance::Circle::new(self.range);
|
let vision_distance = vision_distance::Circle::new(self.range);
|
||||||
let shape = Collider::cuboid(0.5, 0.5);
|
let shape = Collider::cuboid(0.5, 0.5);
|
||||||
let mut new_visible_entities = HashSet::new();
|
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(
|
let visibility_grid = VisibilityGrid(
|
||||||
size,
|
size,
|
||||||
RefCell::new(Box::new(|coord: Coord| {
|
RefCell::new(Box::new(|coord: Coord| {
|
||||||
|
@ -295,7 +297,7 @@ where
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_viewshed<D: 'static + Clone + Default + Send + Sync>(
|
fn update_viewshed(
|
||||||
config: Res<RapierConfiguration>,
|
config: Res<RapierConfiguration>,
|
||||||
visible: Query<(&Visible, &Collider, &GlobalTransform)>,
|
visible: Query<(&Visible, &Collider, &GlobalTransform)>,
|
||||||
obstructions: Query<&MapObstruction>,
|
obstructions: Query<&MapObstruction>,
|
||||||
|
@ -305,34 +307,29 @@ fn update_viewshed<D: 'static + Clone + Default + Send + Sync>(
|
||||||
&mut VisibleEntities,
|
&mut VisibleEntities,
|
||||||
&GlobalTransform,
|
&GlobalTransform,
|
||||||
)>,
|
)>,
|
||||||
map: Query<&Map<D>>,
|
|
||||||
rapier_context: Res<RapierContext>,
|
rapier_context: Res<RapierContext>,
|
||||||
mut changed: EventWriter<VisibilityChanged>,
|
mut changed: EventWriter<VisibilityChanged>,
|
||||||
) {
|
) {
|
||||||
if !config.query_pipeline_active {
|
if !config.query_pipeline_active {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if let Ok(map) = map.get_single() {
|
|
||||||
let mut cache = HashMap::new();
|
let mut cache = HashMap::new();
|
||||||
for (viewer_entity, mut viewshed, mut visible_entities, viewer_transform) in
|
for (viewer_entity, mut viewshed, mut visible_entities, viewer_transform) in viewers.iter_mut()
|
||||||
viewers.iter_mut()
|
|
||||||
{
|
{
|
||||||
viewshed.update(
|
viewshed.update(
|
||||||
&viewer_entity,
|
&viewer_entity,
|
||||||
&mut visible_entities,
|
&mut visible_entities,
|
||||||
viewer_transform,
|
viewer_transform,
|
||||||
&rapier_context,
|
&rapier_context,
|
||||||
map,
|
|
||||||
&visible,
|
&visible,
|
||||||
&obstructions,
|
&obstructions,
|
||||||
&mut changed,
|
&mut changed,
|
||||||
&mut cache,
|
&mut cache,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn remove_visible<D: 'static + Clone + Default + Send + Sync>(
|
fn remove_visible(
|
||||||
removed: RemovedComponents<Visible>,
|
removed: RemovedComponents<Visible>,
|
||||||
mut viewers: Query<(
|
mut viewers: Query<(
|
||||||
Entity,
|
Entity,
|
||||||
|
@ -340,7 +337,6 @@ fn remove_visible<D: 'static + Clone + Default + Send + Sync>(
|
||||||
&mut VisibleEntities,
|
&mut VisibleEntities,
|
||||||
&GlobalTransform,
|
&GlobalTransform,
|
||||||
)>,
|
)>,
|
||||||
map: Query<&Map<D>>,
|
|
||||||
rapier_context: Res<RapierContext>,
|
rapier_context: Res<RapierContext>,
|
||||||
visible: Query<(&Visible, &Collider, &GlobalTransform)>,
|
visible: Query<(&Visible, &Collider, &GlobalTransform)>,
|
||||||
obstructions: Query<&MapObstruction>,
|
obstructions: Query<&MapObstruction>,
|
||||||
|
@ -354,13 +350,11 @@ fn remove_visible<D: 'static + Clone + Default + Send + Sync>(
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
visible_entities.remove(&removed);
|
visible_entities.remove(&removed);
|
||||||
if let Ok(map) = map.get_single() {
|
|
||||||
viewshed.update(
|
viewshed.update(
|
||||||
&viewer_entity,
|
&viewer_entity,
|
||||||
&mut visible_entities,
|
&mut visible_entities,
|
||||||
start,
|
start,
|
||||||
&*rapier_context,
|
&*rapier_context,
|
||||||
map,
|
|
||||||
&visible,
|
&visible,
|
||||||
&obstructions,
|
&obstructions,
|
||||||
&mut changed,
|
&mut changed,
|
||||||
|
@ -369,7 +363,6 @@ fn remove_visible<D: 'static + Clone + Default + Send + Sync>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_revealed_tiles<D: 'static + Clone + Default + Send + Sync>(
|
fn update_revealed_tiles<D: 'static + Clone + Default + Send + Sync>(
|
||||||
|
@ -449,9 +442,9 @@ impl<D: 'static + Clone + Default + Send + Sync> Plugin for VisibilityPlugin<D>
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
app.add_event::<VisibilityChanged>()
|
app.add_event::<VisibilityChanged>()
|
||||||
.add_system_to_stage(CoreStage::PreUpdate, add_visibility_indices::<D>)
|
.add_system_to_stage(CoreStage::PreUpdate, add_visibility_indices::<D>)
|
||||||
.add_system_to_stage(CoreStage::PreUpdate, update_viewshed::<D>)
|
.add_system_to_stage(CoreStage::PreUpdate, update_viewshed)
|
||||||
.add_system_to_stage(CoreStage::PostUpdate, viewshed_removed)
|
.add_system_to_stage(CoreStage::PostUpdate, viewshed_removed)
|
||||||
.add_system_to_stage(CoreStage::PostUpdate, remove_visible::<D>)
|
.add_system_to_stage(CoreStage::PostUpdate, remove_visible)
|
||||||
.add_system_to_stage(CoreStage::PreUpdate, update_revealed_tiles::<D>)
|
.add_system_to_stage(CoreStage::PreUpdate, update_revealed_tiles::<D>)
|
||||||
.add_system_to_stage(CoreStage::PreUpdate, log_visible);
|
.add_system_to_stage(CoreStage::PreUpdate, log_visible);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user