Struct valence::ecs::query::QueryState
#[repr(C)]pub struct QueryState<D, F = ()>where
D: QueryData,
F: QueryFilter,{ /* private fields */ }
Expand description
Provides scoped access to a World
state according to a given QueryData
and QueryFilter
.
This data is cached between system runs, and is used to:
- store metadata about which
Table
orArchetype
are matched by the query. “Matched” means that the query will iterate over the data in the matched table/archetype. - cache the
State
needed to compute theFetch
struct used to retrieve data from a specificTable
orArchetype
- build iterators that can iterate over the query results
Implementations§
§impl<D, F> QueryState<D, F>where
D: QueryData,
F: QueryFilter,
impl<D, F> QueryState<D, F>where
D: QueryData,
F: QueryFilter,
pub fn as_readonly(&self) -> &QueryState<<D as QueryData>::ReadOnly, F>
pub fn as_readonly(&self) -> &QueryState<<D as QueryData>::ReadOnly, F>
Converts this QueryState
reference to a QueryState
that does not access anything mutably.
pub fn component_access(&self) -> &FilteredAccess<ComponentId>
pub fn component_access(&self) -> &FilteredAccess<ComponentId>
Returns the components accessed by this query.
pub fn matched_tables(&self) -> impl Iterator<Item = TableId>
pub fn matched_tables(&self) -> impl Iterator<Item = TableId>
Returns the tables matched by this query.
pub fn matched_archetypes(&self) -> impl Iterator<Item = ArchetypeId>
pub fn matched_archetypes(&self) -> impl Iterator<Item = ArchetypeId>
Returns the archetypes matched by this query.
§impl<D, F> QueryState<D, F>where
D: QueryData,
F: QueryFilter,
impl<D, F> QueryState<D, F>where
D: QueryData,
F: QueryFilter,
pub fn new(world: &mut World) -> QueryState<D, F>
pub fn new(world: &mut World) -> QueryState<D, F>
Creates a new QueryState
from a given World
and inherits the result of world.id()
.
pub fn from_builder(builder: &mut QueryBuilder<'_, D, F>) -> QueryState<D, F>
pub fn from_builder(builder: &mut QueryBuilder<'_, D, F>) -> QueryState<D, F>
Creates a new QueryState
from a given QueryBuilder
and inherits its FilteredAccess
.
pub fn is_empty(&self, world: &World, last_run: Tick, this_run: Tick) -> bool
pub fn is_empty(&self, world: &World, last_run: Tick, this_run: Tick) -> bool
Checks if the query is empty for the given World
, where the last change and current tick are given.
This is equivalent to self.iter().next().is_none()
, and thus the worst case runtime will be O(n)
where n
is the number of potential matches. This can be notably expensive for queries that rely
on non-archetypal filters such as Added
or Changed
which must individually check each query
result for a match.
§Panics
If world
does not match the one used to call QueryState::new
for this instance.
pub fn contains(
&self,
entity: Entity,
world: &World,
last_run: Tick,
this_run: Tick,
) -> bool
pub fn contains( &self, entity: Entity, world: &World, last_run: Tick, this_run: Tick, ) -> bool
Returns true
if the given Entity
matches the query.
This is always guaranteed to run in O(1)
time.
pub fn update_archetypes(&mut self, world: &World)
pub fn update_archetypes(&mut self, world: &World)
Updates the state’s internal view of the World
’s archetypes. If this is not called before querying data,
the results may not accurately reflect what is in the world
.
This is only required if a manual
method (such as Self::get_manual
) is being called, and it only needs to
be called if the world
has been structurally mutated (i.e. added/removed a component or resource). Users using
non-manual
methods such as QueryState::get
do not need to call this as it will be automatically called for them.
If you have an UnsafeWorldCell
instead of &World
, consider using QueryState::update_archetypes_unsafe_world_cell
.
§Panics
If world
does not match the one used to call QueryState::new
for this instance.
pub fn update_archetypes_unsafe_world_cell(
&mut self,
world: UnsafeWorldCell<'_>,
)
pub fn update_archetypes_unsafe_world_cell( &mut self, world: UnsafeWorldCell<'_>, )
Updates the state’s internal view of the world
’s archetypes. If this is not called before querying data,
the results may not accurately reflect what is in the world
.
This is only required if a manual
method (such as Self::get_manual
) is being called, and it only needs to
be called if the world
has been structurally mutated (i.e. added/removed a component or resource). Users using
non-manual
methods such as QueryState::get
do not need to call this as it will be automatically called for them.
§Note
This method only accesses world metadata.
§Panics
If world
does not match the one used to call QueryState::new
for this instance.
pub fn validate_world(&self, world_id: WorldId)
pub fn validate_world(&self, world_id: WorldId)
pub unsafe fn new_archetype(
&mut self,
archetype: &Archetype,
access: &mut Access<ArchetypeComponentId>,
)
pub unsafe fn new_archetype( &mut self, archetype: &Archetype, access: &mut Access<ArchetypeComponentId>, )
Update the current QueryState
with information from the provided Archetype
(if applicable, i.e. if the archetype has any intersecting ComponentId
with the current QueryState
).
The passed in access
will be updated with any new accesses introduced by the new archetype.
§Safety
archetype
must be from the World
this state was initialized from.
pub fn matches_component_set(
&self,
set_contains_id: &impl Fn(ComponentId) -> bool,
) -> bool
pub fn matches_component_set( &self, set_contains_id: &impl Fn(ComponentId) -> bool, ) -> bool
Returns true
if this query matches a set of components. Otherwise, returns false
.
pub unsafe fn update_archetype_component_access(
&mut self,
archetype: &Archetype,
access: &mut Access<ArchetypeComponentId>,
)
pub unsafe fn update_archetype_component_access( &mut self, archetype: &Archetype, access: &mut Access<ArchetypeComponentId>, )
For the given archetype
, adds any component accessed used by this query’s underlying FilteredAccess
to access
.
The passed in access
will be updated with any new accesses introduced by the new archetype.
§Safety
archetype
must be from the World
this state was initialized from.
pub fn transmute<NewD>(&self, components: &Components) -> QueryState<NewD>where
NewD: QueryData,
pub fn transmute<NewD>(&self, components: &Components) -> QueryState<NewD>where
NewD: QueryData,
Use this to transform a QueryState
into a more generic QueryState
.
This can be useful for passing to another function that might take the more general form.
See Query::transmute_lens
for more details.
You should not call update_archetypes
on the returned QueryState
as the result will be unpredictable.
You might end up with a mix of archetypes that only matched the original query + archetypes that only match
the new QueryState
. Most of the safe methods on QueryState
call QueryState::update_archetypes
internally, so this
best used through a Query
.
pub fn transmute_filtered<NewD, NewF>(
&self,
components: &Components,
) -> QueryState<NewD, NewF>where
NewD: QueryData,
NewF: QueryFilter,
pub fn transmute_filtered<NewD, NewF>(
&self,
components: &Components,
) -> QueryState<NewD, NewF>where
NewD: QueryData,
NewF: QueryFilter,
Creates a new QueryState
with the same underlying FilteredAccess
, matched tables and archetypes
as self but with a new type signature.
Panics if NewD
or NewF
require accesses that this query does not have.
pub fn join<OtherD, NewD>(
&self,
components: &Components,
other: &QueryState<OtherD>,
) -> QueryState<NewD>
pub fn join<OtherD, NewD>( &self, components: &Components, other: &QueryState<OtherD>, ) -> QueryState<NewD>
Use this to combine two queries. The data accessed will be the intersection of archetypes included in both queries. This can be useful for accessing a subset of the entities between two queries.
You should not call update_archetypes
on the returned QueryState
as the result
could be unpredictable. You might end up with a mix of archetypes that only matched
the original query + archetypes that only match the new QueryState
. Most of the
safe methods on QueryState
call QueryState::update_archetypes
internally, so
this is best used through a Query
.
§Performance
This will have similar performance as constructing a new QueryState
since much of internal state
needs to be reconstructed. But it will be a little faster as it only needs to compare the intersection
of matching archetypes rather than iterating over all archetypes.
§Panics
Will panic if NewD
contains accesses not in Q
or OtherQ
.
pub fn join_filtered<OtherD, OtherF, NewD, NewF>(
&self,
components: &Components,
other: &QueryState<OtherD, OtherF>,
) -> QueryState<NewD, NewF>
pub fn join_filtered<OtherD, OtherF, NewD, NewF>( &self, components: &Components, other: &QueryState<OtherD, OtherF>, ) -> QueryState<NewD, NewF>
Use this to combine two queries. The data accessed will be the intersection of archetypes included in both queries.
§Panics
Will panic if NewD
or NewF
requires accesses not in Q
or OtherQ
.
pub fn get<'w>(
&mut self,
world: &'w World,
entity: Entity,
) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QueryEntityError>
pub fn get<'w>( &mut self, world: &'w World, entity: Entity, ) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QueryEntityError>
Gets the query result for the given World
and Entity
.
This can only be called for read-only queries, see Self::get_mut
for write-queries.
This is always guaranteed to run in O(1)
time.
pub fn get_many<'w, const N: usize>(
&mut self,
world: &'w World,
entities: [Entity; N],
) -> Result<[<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>; N], QueryEntityError>
pub fn get_many<'w, const N: usize>( &mut self, world: &'w World, entities: [Entity; N], ) -> Result<[<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>; N], QueryEntityError>
Returns the read-only query results for the given array of Entity
.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is
returned instead.
Note that the unlike QueryState::get_many_mut
, the entities passed in do not need to be unique.
§Examples
use bevy_ecs::prelude::*;
use bevy_ecs::query::QueryEntityError;
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entity_vec: Vec<Entity> = (0..3).map(|i|world.spawn(A(i)).id()).collect();
let entities: [Entity; 3] = entity_vec.try_into().unwrap();
world.spawn(A(73));
let mut query_state = world.query::<&A>();
let component_values = query_state.get_many(&world, entities).unwrap();
assert_eq!(component_values, [&A(0), &A(1), &A(2)]);
let wrong_entity = Entity::from_raw(365);
assert_eq!(query_state.get_many(&world, [wrong_entity]), Err(QueryEntityError::NoSuchEntity(wrong_entity)));
pub fn get_mut<'w>(
&mut self,
world: &'w mut World,
entity: Entity,
) -> Result<<D as WorldQuery>::Item<'w>, QueryEntityError>
pub fn get_mut<'w>( &mut self, world: &'w mut World, entity: Entity, ) -> Result<<D as WorldQuery>::Item<'w>, QueryEntityError>
pub fn get_many_mut<'w, const N: usize>(
&mut self,
world: &'w mut World,
entities: [Entity; N],
) -> Result<[<D as WorldQuery>::Item<'w>; N], QueryEntityError>
pub fn get_many_mut<'w, const N: usize>( &mut self, world: &'w mut World, entities: [Entity; N], ) -> Result<[<D as WorldQuery>::Item<'w>; N], QueryEntityError>
Returns the query results for the given array of Entity
.
In case of a nonexisting entity or mismatched component, a QueryEntityError
is
returned instead.
use bevy_ecs::prelude::*;
use bevy_ecs::query::QueryEntityError;
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let entities: Vec<Entity> = (0..3).map(|i|world.spawn(A(i)).id()).collect();
let entities: [Entity; 3] = entities.try_into().unwrap();
world.spawn(A(73));
let mut query_state = world.query::<&mut A>();
let mut mutable_component_values = query_state.get_many_mut(&mut world, entities).unwrap();
for mut a in &mut mutable_component_values {
a.0 += 5;
}
let component_values = query_state.get_many(&world, entities).unwrap();
assert_eq!(component_values, [&A(5), &A(6), &A(7)]);
let wrong_entity = Entity::from_raw(57);
let invalid_entity = world.spawn_empty().id();
assert_eq!(query_state.get_many_mut(&mut world, [wrong_entity]).unwrap_err(), QueryEntityError::NoSuchEntity(wrong_entity));
assert_eq!(query_state.get_many_mut(&mut world, [invalid_entity]).unwrap_err(), QueryEntityError::QueryDoesNotMatch(invalid_entity));
assert_eq!(query_state.get_many_mut(&mut world, [entities[0], entities[0]]).unwrap_err(), QueryEntityError::AliasedMutability(entities[0]));
pub fn get_manual<'w>(
&self,
world: &'w World,
entity: Entity,
) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QueryEntityError>
pub fn get_manual<'w>( &self, world: &'w World, entity: Entity, ) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QueryEntityError>
Gets the query result for the given World
and Entity
.
This method is slightly more efficient than QueryState::get
in some situations, since
it does not update this instance’s internal cache. This method will return an error if entity
belongs to an archetype that has not been cached.
To ensure that the cache is up to date, call QueryState::update_archetypes
before this method.
The cache is also updated in QueryState::new
, QueryState::get
, or any method with mutable
access to self
.
This can only be called for read-only queries, see Self::get_mut
for mutable queries.
This is always guaranteed to run in O(1)
time.
pub unsafe fn get_unchecked<'w>(
&mut self,
world: UnsafeWorldCell<'w>,
entity: Entity,
) -> Result<<D as WorldQuery>::Item<'w>, QueryEntityError>
pub unsafe fn get_unchecked<'w>( &mut self, world: UnsafeWorldCell<'w>, entity: Entity, ) -> Result<<D as WorldQuery>::Item<'w>, QueryEntityError>
pub fn iter<'w, 's>(
&'s mut self,
world: &'w World,
) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
pub fn iter<'w, 's>( &'s mut self, world: &'w World, ) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
Returns an Iterator
over the query results for the given World
.
This can only be called for read-only queries, see Self::iter_mut
for write-queries.
pub fn iter_manual<'w, 's>(
&'s self,
world: &'w World,
) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
pub fn iter_manual<'w, 's>( &'s self, world: &'w World, ) -> QueryIter<'w, 's, <D as QueryData>::ReadOnly, F> ⓘ
Returns an Iterator
over the query results for the given World
without updating the query’s archetypes.
Archetypes must be manually updated before by using Self::update_archetypes
.
This iterator is always guaranteed to return results from each matching entity once and only once. Iteration order is not guaranteed.
This can only be called for read-only queries.
pub fn iter_combinations<'w, 's, const K: usize>(
&'s mut self,
world: &'w World,
) -> QueryCombinationIter<'w, 's, <D as QueryData>::ReadOnly, F, K> ⓘ
pub fn iter_combinations<'w, 's, const K: usize>( &'s mut self, world: &'w World, ) -> QueryCombinationIter<'w, 's, <D as QueryData>::ReadOnly, F, K> ⓘ
Returns an Iterator
over all possible combinations of K
query results without repetition.
This can only be called for read-only queries.
A combination is an arrangement of a collection of items where order does not matter.
K
is the number of items that make up each subset, and the number of items returned by the iterator.
N
is the number of total entities output by query.
For example, given the list [1, 2, 3, 4], where K
is 2, the combinations without repeats are
[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4].
And in this case, N
would be defined as 4 since the size of the input list is 4.
For combinations of size K
of query taking N
inputs, you will get:
- if
K == N
: one combination of all query results - if
K < N
: all possibleK
-sized combinations of query results, without repetition - if
K > N
: empty set (noK
-sized combinations exist)
The iter_combinations
method does not guarantee order of iteration.
This iterator is always guaranteed to return results from each unique pair of matching entities. Iteration order is not guaranteed.
This can only be called for read-only queries, see Self::iter_combinations_mut
for
write-queries.
pub fn iter_combinations_mut<'w, 's, const K: usize>(
&'s mut self,
world: &'w mut World,
) -> QueryCombinationIter<'w, 's, D, F, K> ⓘ
pub fn iter_combinations_mut<'w, 's, const K: usize>( &'s mut self, world: &'w mut World, ) -> QueryCombinationIter<'w, 's, D, F, K> ⓘ
Returns an Iterator
over all possible combinations of K
query results without repetition.
A combination is an arrangement of a collection of items where order does not matter.
K
is the number of items that make up each subset, and the number of items returned by the iterator.
N
is the number of total entities output by query.
For example, given the list [1, 2, 3, 4], where K
is 2, the combinations without repeats are
[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4].
And in this case, N
would be defined as 4 since the size of the input list is 4.
For combinations of size K
of query taking N
inputs, you will get:
- if
K == N
: one combination of all query results - if
K < N
: all possibleK
-sized combinations of query results, without repetition - if
K > N
: empty set (noK
-sized combinations exist)
The iter_combinations_mut
method does not guarantee order of iteration.
pub fn iter_many<'w, 's, EntityList>(
&'s mut self,
world: &'w World,
entities: EntityList,
) -> QueryManyIter<'w, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub fn iter_many<'w, 's, EntityList>( &'s mut self, world: &'w World, entities: EntityList, ) -> QueryManyIter<'w, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an Iterator
over the read-only query items generated from an Entity
list.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
§See also
iter_many_mut
to get mutable query items.
pub fn iter_many_manual<'w, 's, EntityList>(
&'s self,
world: &'w World,
entities: EntityList,
) -> QueryManyIter<'w, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub fn iter_many_manual<'w, 's, EntityList>( &'s self, world: &'w World, entities: EntityList, ) -> QueryManyIter<'w, 's, <D as QueryData>::ReadOnly, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an Iterator
over the read-only query items generated from an Entity
list.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
If world
archetypes changed since Self::update_archetypes
was last called,
this will skip entities contained in new archetypes.
This can only be called for read-only queries.
§See also
iter_many
to update archetypes.iter_manual
to iterate over all query items.
pub fn iter_many_mut<'w, 's, EntityList>(
&'s mut self,
world: &'w mut World,
entities: EntityList,
) -> QueryManyIter<'w, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
pub fn iter_many_mut<'w, 's, EntityList>( &'s mut self, world: &'w mut World, entities: EntityList, ) -> QueryManyIter<'w, 's, D, F, <EntityList as IntoIterator>::IntoIter> ⓘ
Returns an iterator over the query items generated from an Entity
list.
Items are returned in the order of the list of entities. Entities that don’t match the query are skipped.
pub unsafe fn iter_unchecked<'w, 's>(
&'s mut self,
world: UnsafeWorldCell<'w>,
) -> QueryIter<'w, 's, D, F> ⓘ
pub unsafe fn iter_unchecked<'w, 's>( &'s mut self, world: UnsafeWorldCell<'w>, ) -> QueryIter<'w, 's, D, F> ⓘ
Returns an Iterator
over the query results for the given World
.
This iterator is always guaranteed to return results from each matching entity once and only once. Iteration order is not guaranteed.
§Safety
This does not check for mutable query correctness. To be safe, make sure mutable queries have unique access to the components they query.
pub unsafe fn iter_combinations_unchecked<'w, 's, const K: usize>(
&'s mut self,
world: UnsafeWorldCell<'w>,
) -> QueryCombinationIter<'w, 's, D, F, K> ⓘ
pub unsafe fn iter_combinations_unchecked<'w, 's, const K: usize>( &'s mut self, world: UnsafeWorldCell<'w>, ) -> QueryCombinationIter<'w, 's, D, F, K> ⓘ
Returns an Iterator
over all possible combinations of K
query results for the
given World
without repetition.
This can only be called for read-only queries.
This iterator is always guaranteed to return results from each unique pair of matching entities. Iteration order is not guaranteed.
§Safety
This does not check for mutable query correctness. To be safe, make sure mutable queries have unique access to the components they query.
pub fn par_iter<'w, 's>(
&'s mut self,
world: &'w World,
) -> QueryParIter<'w, 's, <D as QueryData>::ReadOnly, F>
pub fn par_iter<'w, 's>( &'s mut self, world: &'w World, ) -> QueryParIter<'w, 's, <D as QueryData>::ReadOnly, F>
Returns a parallel iterator over the query results for the given World
.
This can only be called for read-only queries, see par_iter_mut
for write-queries.
Note that you must use the for_each
method to iterate over the
results, see par_iter_mut
for an example.
pub fn par_iter_mut<'w, 's>(
&'s mut self,
world: &'w mut World,
) -> QueryParIter<'w, 's, D, F>
pub fn par_iter_mut<'w, 's>( &'s mut self, world: &'w mut World, ) -> QueryParIter<'w, 's, D, F>
Returns a parallel iterator over the query results for the given World
.
This can only be called for mutable queries, see par_iter
for read-only-queries.
§Examples
use bevy_ecs::prelude::*;
use bevy_ecs::query::QueryEntityError;
#[derive(Component, PartialEq, Debug)]
struct A(usize);
let mut world = World::new();
let mut query_state = world.query::<&mut A>();
query_state.par_iter_mut(&mut world).for_each(|mut a| {
a.0 += 5;
});
§Panics
The ComputeTaskPool
is not initialized. If using this from a query that is being
initialized and run from the ECS scheduler, this should never panic.
pub fn single<'w>(
&mut self,
world: &'w World,
) -> <<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>
pub fn single<'w>( &mut self, world: &'w World, ) -> <<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>
Returns a single immutable query result when there is exactly one entity matching the query.
This can only be called for read-only queries,
see single_mut
for write-queries.
§Panics
Panics if the number of query results is not exactly one. Use
get_single
to return a Result
instead of panicking.
pub fn get_single<'w>(
&mut self,
world: &'w World,
) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QuerySingleError>
pub fn get_single<'w>( &mut self, world: &'w World, ) -> Result<<<D as QueryData>::ReadOnly as WorldQuery>::Item<'w>, QuerySingleError>
Returns a single immutable query result when there is exactly one entity matching the query.
This can only be called for read-only queries,
see get_single_mut
for write-queries.
If the number of query results is not exactly one, a QuerySingleError
is returned
instead.
pub fn single_mut<'w>(
&mut self,
world: &'w mut World,
) -> <D as WorldQuery>::Item<'w>
pub fn single_mut<'w>( &mut self, world: &'w mut World, ) -> <D as WorldQuery>::Item<'w>
Returns a single mutable query result when there is exactly one entity matching the query.
§Panics
Panics if the number of query results is not exactly one. Use
get_single_mut
to return a Result
instead of panicking.
pub fn get_single_mut<'w>(
&mut self,
world: &'w mut World,
) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
pub fn get_single_mut<'w>( &mut self, world: &'w mut World, ) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
Returns a single mutable query result when there is exactly one entity matching the query.
If the number of query results is not exactly one, a QuerySingleError
is returned
instead.
pub unsafe fn get_single_unchecked<'w>(
&mut self,
world: UnsafeWorldCell<'w>,
) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
pub unsafe fn get_single_unchecked<'w>( &mut self, world: UnsafeWorldCell<'w>, ) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
Returns a query result when there is exactly one entity matching the query.
If the number of query results is not exactly one, a QuerySingleError
is returned
instead.
§Safety
This does not check for mutable query correctness. To be safe, make sure mutable queries have unique access to the components they query.
pub unsafe fn get_single_unchecked_manual<'w>(
&self,
world: UnsafeWorldCell<'w>,
last_run: Tick,
this_run: Tick,
) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
pub unsafe fn get_single_unchecked_manual<'w>( &self, world: UnsafeWorldCell<'w>, last_run: Tick, this_run: Tick, ) -> Result<<D as WorldQuery>::Item<'w>, QuerySingleError>
Returns a query result when there is exactly one entity matching the query, where the last change and the current change tick are given.
If the number of query results is not exactly one, a QuerySingleError
is returned
instead.
§Safety
This does not check for mutable query correctness. To be safe, make sure mutable queries have unique access to the components they query.
Trait Implementations§
§impl<D, F> Debug for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
impl<D, F> Debug for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
§impl<'a, D, F> ExclusiveSystemParam for &'a mut QueryState<D, F>where
D: QueryData + 'static,
F: QueryFilter + 'static,
impl<'a, D, F> ExclusiveSystemParam for &'a mut QueryState<D, F>where
D: QueryData + 'static,
F: QueryFilter + 'static,
§type State = QueryState<D, F>
type State = QueryState<D, F>
§type Item<'s> = &'s mut QueryState<D, F>
type Item<'s> = &'s mut QueryState<D, F>
SystemParam::Item
.§fn init(
world: &mut World,
_system_meta: &mut SystemMeta,
) -> <&'a mut QueryState<D, F> as ExclusiveSystemParam>::State
fn init( world: &mut World, _system_meta: &mut SystemMeta, ) -> <&'a mut QueryState<D, F> as ExclusiveSystemParam>::State
State
.§fn get_param<'s>(
state: &'s mut <&'a mut QueryState<D, F> as ExclusiveSystemParam>::State,
_system_meta: &SystemMeta,
) -> <&'a mut QueryState<D, F> as ExclusiveSystemParam>::Item<'s>
fn get_param<'s>( state: &'s mut <&'a mut QueryState<D, F> as ExclusiveSystemParam>::State, _system_meta: &SystemMeta, ) -> <&'a mut QueryState<D, F> as ExclusiveSystemParam>::Item<'s>
ExclusiveSystemParamFunction
.§impl<D, F> From<QueryBuilder<'_, D, F>> for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
impl<D, F> From<QueryBuilder<'_, D, F>> for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
§fn from(value: QueryBuilder<'_, D, F>) -> QueryState<D, F>
fn from(value: QueryBuilder<'_, D, F>) -> QueryState<D, F>
§impl<D, F> FromWorld for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
impl<D, F> FromWorld for QueryState<D, F>where
D: QueryData,
F: QueryFilter,
§fn from_world(world: &mut World) -> QueryState<D, F>
fn from_world(world: &mut World) -> QueryState<D, F>
Self
using data from the given World
.Auto Trait Implementations§
impl<D, F> Freeze for QueryState<D, F>
impl<D, F> RefUnwindSafe for QueryState<D, F>
impl<D, F> Send for QueryState<D, F>
impl<D, F> Sync for QueryState<D, F>
impl<D, F> Unpin for QueryState<D, F>
impl<D, F> UnwindSafe for QueryState<D, F>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.§impl<T> DowncastSync for T
impl<T> DowncastSync for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.