Clarify a comment in Option WorldQuery impl (#9749)

I found a comment a bit confusing

## Solution

Reword it.

---------

Co-authored-by: Joseph <21144246+JoJoJet@users.noreply.github.com>
This commit is contained in:
Nicola Papale 2023-09-11 21:27:21 +02:00 committed by GitHub
parent 19c53578e6
commit d3beaff56f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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);