Struct bevy::ecs::query::QueryState

pub struct QueryState<Q, F = ()>where
    Q: WorldQuery,
    F: ReadOnlyWorldQuery,{ /* private fields */ }
Expand description

Provides scoped access to a World state according to a given WorldQuery and query filter.

Implementations§

§

impl<Q, F> QueryState<Q, F>where Q: WorldQuery, F: ReadOnlyWorldQuery,

pub fn as_readonly( &self ) -> &QueryState<<Q as WorldQuery>::ReadOnly, <F as WorldQuery>::ReadOnly>

Converts this QueryState reference to a QueryState that does not access anything mutably.

pub fn as_nop(&self) -> &QueryState<NopWorldQuery<Q>, F>

Converts this QueryState reference to a QueryState that does not return any data which can be faster.

This doesn’t use NopWorldQuery as it loses filter functionality, for example NopWorldQuery<Changed<T>> is functionally equivalent to With<T>.

§

impl<Q, F> QueryState<Q, F>where Q: WorldQuery, F: ReadOnlyWorldQuery,

pub fn new(world: &mut World) -> QueryState<Q, F>

Creates a new QueryState from a given World and inherits the result of world.id().

pub fn is_empty( &self, world: &World, last_change_tick: u32, change_tick: u32 ) -> bool

Checks if the query is empty for the given World, where the last change and current tick are given.

pub fn update_archetypes(&mut self, world: &World)

Takes a query for the given World, checks if the given world is the same as the query, and updates the QueryState’s view of the World with any newly-added archetypes.

Panics

Panics if the world.id() does not equal the current QueryState internal id.

pub fn validate_world(&self, world: &World)

pub fn new_archetype(&mut self, archetype: &Archetype)

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).

pub fn get<'w>( &mut self, world: &'w World, entity: Entity ) -> Result<<<Q as WorldQuery>::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.

pub fn get_many<const N: usize, 'w>( &mut self, world: &'w World, entities: [Entity; N] ) -> Result<[<<Q as WorldQuery>::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<<Q as WorldQuery>::Item<'w>, QueryEntityError>

Gets the query result for the given World and Entity.

pub fn get_many_mut<const N: usize, 'w>( &mut self, world: &'w mut World, entities: [Entity; N] ) -> Result<[<Q 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<<<Q as WorldQuery>::ReadOnly as WorldQuery>::Item<'w>, QueryEntityError>

pub unsafe fn get_unchecked<'w>( &mut self, world: &'w World, entity: Entity ) -> Result<<Q as WorldQuery>::Item<'w>, QueryEntityError>

Gets the query result for the given World and Entity.

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 iter<'w, 's>( &'s mut self, world: &'w World ) -> QueryIter<'w, 's, <Q as WorldQuery>::ReadOnly, <F as WorldQuery>::ReadOnly>

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_mut<'w, 's>( &'s mut self, world: &'w mut World ) -> QueryIter<'w, 's, Q, F>

Returns an Iterator over the query results for the given World.

pub fn iter_manual<'w, 's>( &'s self, world: &'w World ) -> QueryIter<'w, 's, <Q as WorldQuery>::ReadOnly, <F as WorldQuery>::ReadOnly>

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 can only be called for read-only queries.

pub fn iter_combinations<const K: usize, 'w, 's>( &'s mut self, world: &'w World ) -> QueryCombinationIter<'w, 's, <Q as WorldQuery>::ReadOnly, <F as WorldQuery>::ReadOnly, 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 possible K-sized combinations of query results, without repetition
  • if K > N: empty set (no K-sized combinations exist)

The iter_combinations method does not guarantee order of iteration.

This can only be called for read-only queries, see Self::iter_combinations_mut for write-queries.

pub fn iter_combinations_mut<const K: usize, 'w, 's>( &'s mut self, world: &'w mut World ) -> QueryCombinationIter<'w, 's, Q, 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 possible K-sized combinations of query results, without repetition
  • if K > N: empty set (no K-sized combinations exist)

The iter_combinations_mut method does not guarantee order of iteration.

pub fn iter_many<EntityList, 'w, 's>( &'s mut self, world: &'w World, entities: EntityList ) -> QueryManyIter<'w, 's, <Q as WorldQuery>::ReadOnly, <F as WorldQuery>::ReadOnly, <EntityList as IntoIterator>::IntoIter> where EntityList: IntoIterator, <EntityList as IntoIterator>::Item: Borrow<Entity>,

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

pub fn iter_many_mut<EntityList, 'w, 's>( &'s mut self, world: &'w mut World, entities: EntityList ) -> QueryManyIter<'w, 's, Q, F, <EntityList as IntoIterator>::IntoIter> where EntityList: IntoIterator, <EntityList as IntoIterator>::Item: Borrow<Entity>,

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: &'w World ) -> QueryIter<'w, 's, Q, F>

Returns an Iterator over the query results for the given World.

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<const K: usize, 'w, 's>( &'s mut self, world: &'w World ) -> QueryCombinationIter<'w, 's, Q, 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.

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 for_each<'w, FN>(&mut self, world: &'w World, func: FN)where FN: FnMut(<<Q as WorldQuery>::ReadOnly as WorldQuery>::Item<'w>),

Runs func on each query result for the given World. This is faster than the equivalent iter() method, but cannot be chained like a normal Iterator.

This can only be called for read-only queries, see Self::for_each_mut for write-queries.

pub fn for_each_mut<'w, FN>(&mut self, world: &'w mut World, func: FN)where FN: FnMut(<Q as WorldQuery>::Item<'w>),

Runs func on each query result for the given World. This is faster than the equivalent iter_mut() method, but cannot be chained like a normal Iterator.

pub unsafe fn for_each_unchecked<'w, FN>(&mut self, world: &'w World, func: FN)where FN: FnMut(<Q as WorldQuery>::Item<'w>),

Runs func on each query result for the given World. This is faster than the equivalent iter() method, but cannot be chained like a normal Iterator.

This can only be called for read-only queries.

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, Q, 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.

pub fn par_iter_mut<'w, 's>( &'s mut self, world: &'w mut World ) -> QueryParIter<'w, 's, Q, 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.

pub fn single<'w>( &mut self, world: &'w World ) -> <<Q as WorldQuery>::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<<<Q as WorldQuery>::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 ) -> <Q 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<<Q 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: &'w World ) -> Result<<Q 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: &'w World, last_change_tick: u32, change_tick: u32 ) -> Result<<Q 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<Q, F> Debug for QueryState<Q, F>where Q: WorldQuery, F: ReadOnlyWorldQuery,

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl<'a, Q, F> ExclusiveSystemParam for &'a mut QueryState<Q, F>where Q: WorldQuery + 'static, F: ReadOnlyWorldQuery + 'static,

§

type State = QueryState<Q, F>

§

type Item = &'s mut QueryState<Q, F>

§

fn init( world: &mut World, _system_meta: &mut SystemMeta ) -> <&'a mut QueryState<Q, F> as ExclusiveSystemParam>::State

§

fn get_param<'s>( state: &'s mut <&'a mut QueryState<Q, F> as ExclusiveSystemParam>::State, _system_meta: &SystemMeta ) -> <&'a mut QueryState<Q, F> as ExclusiveSystemParam>::Item<'s>

§

impl<Q, F> FromWorld for QueryState<Q, F>where Q: WorldQuery, F: ReadOnlyWorldQuery,

§

fn from_world(world: &mut World) -> QueryState<Q, F>

Creates Self using data from the given World

Auto Trait Implementations§

§

impl<Q, F> RefUnwindSafe for QueryState<Q, F>where <F as WorldQuery>::State: RefUnwindSafe, <Q as WorldQuery>::State: RefUnwindSafe,

§

impl<Q, F> Send for QueryState<Q, F>

§

impl<Q, F> Sync for QueryState<Q, F>

§

impl<Q, F> Unpin for QueryState<Q, F>where <F as WorldQuery>::State: Unpin, <Q as WorldQuery>::State: Unpin,

§

impl<Q, F> UnwindSafe for QueryState<Q, F>where <F as WorldQuery>::State: UnwindSafe, <Q as WorldQuery>::State: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

impl<T, U> AsBindGroupShaderType<U> for Twhere U: ShaderType, &'a T: for<'a> Into<U>,

§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>

Convert 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 + 'static>

Convert 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)

Convert &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)

Convert &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 Twhere T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send + 'static>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

const: unstable · source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T, U> ToSample<U> for Twhere U: FromSample<T>,

§

fn to_sample_(self) -> U

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
const: unstable · source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
const: unstable · source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
§

impl<S, T> Duplex<S> for Twhere T: FromSample<S> + ToSample<S>,

§

impl<T> Event for Twhere T: Send + Sync + 'static,