mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 15:14:50 +00:00
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:
parent
19c53578e6
commit
d3beaff56f
1 changed files with 9 additions and 4 deletions
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue