From 8eb050d10ad0e3f732cb0b95b7f03632e420113e Mon Sep 17 00:00:00 2001 From: Nolan Darilek Date: Sun, 25 Aug 2024 17:59:57 -0500 Subject: [PATCH] Various visibility fixes. --- src/visibility.rs | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/visibility.rs b/src/visibility.rs index ba40a15..0f360d3 100644 --- a/src/visibility.rs +++ b/src/visibility.rs @@ -146,7 +146,30 @@ impl Viewshed { }; if let Some((opacity, coord_entities)) = result { for e in &coord_entities { - new_visible_entities.insert(*e); + let mut should_insert = true; + if coord_entities.len() > 1 { + let start = start.translation().truncate(); + let dest = Vec2::new(coord.x as f32, coord.y as f32); + let dir = dest - start; + rapier_context.intersections_with_ray( + start, + dir, + 1., + true, + QueryFilter::new() + .exclude_sensors() + .exclude_collider(*viewer_entity) + .exclude_collider(*e) + .predicate(&|e| visible_query.contains(e)), + |_, _| { + should_insert = false; + false + }, + ); + } + if should_insert { + new_visible_entities.insert(*e); + } } opacity } else { @@ -187,7 +210,7 @@ impl Viewshed { } } -#[derive(Component, Clone, Copy, Debug, Deref, DerefMut, Reflect)] +#[derive(Component, Clone, Copy, Debug, Deref, DerefMut, Eq, PartialEq, Reflect)] #[reflect(Component)] pub struct Visible(pub u8); @@ -437,6 +460,9 @@ impl Plugin for VisibilityPlug update_revealed_tiles::, ), ) - .add_systems(FixedPostUpdate, (log_visible, viewshed_removed, remove_visible)); + .add_systems( + FixedPostUpdate, + (log_visible, viewshed_removed, remove_visible), + ); } }