Since visibility requires physics, use RigidBodyPositionComponent
rather than Coordinates
for calculations.
This commit is contained in:
parent
460039548a
commit
6d6ff3ae23
|
@ -238,7 +238,7 @@ where
|
|||
|
||||
fn update_viewshed(
|
||||
config: Res<RapierConfiguration>,
|
||||
coordinates: Query<(Entity, &Coordinates), Changed<Coordinates>>,
|
||||
positions: Query<(Entity, &RigidBodyPositionComponent), Changed<RigidBodyPositionComponent>>,
|
||||
visible: Query<&Visible>,
|
||||
mut viewers: Query<(Entity, &mut Viewshed, &mut VisibleEntities, &Coordinates)>,
|
||||
map: Query<&Map>,
|
||||
|
@ -250,10 +250,14 @@ fn update_viewshed(
|
|||
return;
|
||||
}
|
||||
let mut to_update = HashSet::new();
|
||||
for (entity, coordinates) in coordinates.iter() {
|
||||
for (entity, position) in positions.iter() {
|
||||
if to_update.contains(&entity) {
|
||||
continue;
|
||||
}
|
||||
let coordinates = (
|
||||
position.position.translation.x,
|
||||
position.position.translation.y,
|
||||
);
|
||||
if viewers.get_mut(entity).is_ok() {
|
||||
to_update.insert(entity);
|
||||
}
|
||||
|
@ -397,7 +401,7 @@ impl Plugin for VisibilityPlugin {
|
|||
fn build(&self, app: &mut App) {
|
||||
app.add_event::<VisibilityChanged>()
|
||||
.add_system(add_visibility_indices)
|
||||
.add_system(update_viewshed)
|
||||
.add_system_to_stage(CoreStage::PostUpdate, update_viewshed)
|
||||
.add_system_to_stage(CoreStage::PostUpdate, viewshed_removed)
|
||||
.add_system_to_stage(CoreStage::PostUpdate, remove_visible)
|
||||
.add_system_to_stage(CoreStage::PostUpdate, update_revealed_tiles)
|
||||
|
|
Loading…
Reference in New Issue
Block a user