Skip to content

Commit

Permalink
Clarify a comment in Option WorldQuery impl (#9749)
Browse files Browse the repository at this point in the history
I found a comment a bit confusing

## Solution

Reword it.

---------

Co-authored-by: Joseph <[email protected]>
  • Loading branch information
nicopap and joseph-gio authored Sep 11, 2023
1 parent 19c5357 commit d3beaff
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions crates/bevy_ecs/src/query/fetch.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1218,10 +1218,15 @@ unsafe impl<T: WorldQuery> WorldQuery for Option<T> {
}

fn update_component_access(state: &T::State, access: &mut FilteredAccess<ComponentId>) {
// We don't want to add the `with`/`without` of `T` as `Option<T>` will match things regardless of
// `T`'s filters. for example `Query<(Option<&U>, &mut V)>` will match every entity with a `V` component
// regardless of whether it has a `U` component. If we don't do this the query will not conflict with
// `Query<&mut V, Without<U>>` which would be unsound.
// FilteredAccess::add_[write,read] adds the component to the `with` filter.
// Those methods are called on `access` in `T::update_component_access`.
// But in `Option<T>`, we specifically don't filter on `T`,
// since `(Option<T>, &OtherComponent)` should be a valid item, even
// if `Option<T>` is `None`.
//
// We pass a clone of the `FilteredAccess` to `T`, and only update the `Access`
// using `extend_access` so that we can apply `T`'s component_access
// without updating the `with` filters of `access`.
let mut intermediate = access.clone();
T::update_component_access(state, &mut intermediate);
access.extend_access(&intermediate);
Expand Down

0 comments on commit d3beaff

Please sign in to comment.