From 5e2bba76c8f2a5e5532417e826218ca134ceb61b Mon Sep 17 00:00:00 2001 From: Martin Indra Date: Fri, 26 Jan 2024 13:42:50 +0100 Subject: [PATCH] ComputedVisibility -> InheritedVisibility, ViewVisibility --- crates/controller/src/hud/interaction.rs | 10 ++++++++-- crates/signs/src/pole.rs | 4 ++-- crates/spawner/src/draft.rs | 8 ++------ crates/spawner/src/spawner.rs | 3 +-- crates/terrain/src/marker.rs | 9 +++++---- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/crates/controller/src/hud/interaction.rs b/crates/controller/src/hud/interaction.rs index 17ffa08ab..cb755a585 100644 --- a/crates/controller/src/hud/interaction.rs +++ b/crates/controller/src/hud/interaction.rs @@ -23,7 +23,7 @@ where 's, ( &'static GlobalTransform, - &'static ComputedVisibility, + &'static ViewVisibility, &'static Node, ), F, @@ -34,6 +34,7 @@ impl<'w, 's, F> HudNodes<'w, 's, F> where F: ReadOnlyWorldQuery + Sync + Send + 'static, { + /// See [`Self::relative_position`]. pub(crate) fn contains_point(&self, point: Vec2) -> bool { self.relative_position(point).is_some() } @@ -43,11 +44,16 @@ where /// /// The returned point is between (0, 0) (top-left corner) and (1, 1) /// (bottom-right corner). + /// + /// The method relies on [`ViewVisibility`], therefore the results are + /// accurate with respect to the last rendered frame only iff called before + /// [`bevy::render::view::VisibilitySystems::VisibilityPropagate`] (during + /// `PostUpdate` schedule). pub(crate) fn relative_position(&self, point: Vec2) -> Option { self.hud .iter() .filter_map(|(box_transform, visibility, node)| { - if !visibility.is_visible() { + if !visibility.get() { return None; } diff --git a/crates/signs/src/pole.rs b/crates/signs/src/pole.rs index 4da0c6c43..fa08a2e98 100644 --- a/crates/signs/src/pole.rs +++ b/crates/signs/src/pole.rs @@ -208,8 +208,8 @@ fn spawn_poles( .spawn(( transform, GlobalTransform::from(transform), - Visibility::Visible, - ComputedVisibility::default(), + // TODO test this + VisibilityBundle::default(), DespawnOnGameExit, scene.clone(), )) diff --git a/crates/spawner/src/draft.rs b/crates/spawner/src/draft.rs index 5c9fb356c..876448226 100644 --- a/crates/spawner/src/draft.rs +++ b/crates/spawner/src/draft.rs @@ -53,8 +53,7 @@ pub struct DraftBundle { object_type: ObjectTypeComponent, transform: Transform, global_transform: GlobalTransform, - visibility: Visibility, - computed_visibility: ComputedVisibility, + visibility: VisibilityBundle, draft: DraftAllowed, ready: DraftReady, } @@ -65,10 +64,7 @@ impl DraftBundle { object_type: ObjectType::Active(ActiveObjectType::Building(building_type)).into(), transform, global_transform: transform.into(), - visibility: Visibility::Inherited, - computed_visibility: ComputedVisibility::HIDDEN, - draft: DraftAllowed::default(), - ready: DraftReady::default(), + ..default() } } } diff --git a/crates/spawner/src/spawner.rs b/crates/spawner/src/spawner.rs index b8c07f781..39bc33ea0 100644 --- a/crates/spawner/src/spawner.rs +++ b/crates/spawner/src/spawner.rs @@ -274,8 +274,7 @@ fn spawn(mut commands: Commands, scenes: Res, mut events: EventReader( mut materials: ResMut>, solids: SolidObjects, camera: Query<(&Transform, &Frustum), With>, - terrains: Query<(&ComputedVisibility, &Handle)>, + terrains: Query<(&ViewVisibility, &Handle)>, markers: Query<( &ObjectTypeComponent, - &ComputedVisibility, + &ViewVisibility, &GlobalTransform, &M, &MarkerVisibility, @@ -140,7 +141,7 @@ fn update_markers( let mut candidates = Vec::new(); for (&object_type, circle_visibility, transform, marker, marker_visibility) in markers.iter() { - if !circle_visibility.is_visible_in_hierarchy() { + if !circle_visibility.get() { continue; } @@ -171,7 +172,7 @@ fn update_markers( .collect(); for (terrain_visibility, material) in terrains.iter() { - if !terrain_visibility.is_visible_in_hierarchy() { + if !terrain_visibility.get() { continue; }