Struct EntityRef
pub struct EntityRef<'w> { /* private fields */ }Expand description
Implementations§
§impl<'w> EntityRef<'w>
impl<'w> EntityRef<'w>
pub fn into_filtered(self) -> FilteredEntityRef<'w, 'static>
pub fn into_filtered(self) -> FilteredEntityRef<'w, 'static>
Consumes self and returns a [FilteredEntityRef] which has read-only
access to all of the entity’s components, with the world 'w lifetime.
pub fn location(&self) -> EntityLocation
pub fn location(&self) -> EntityLocation
Gets metadata indicating the location where the current entity is stored.
pub fn archetype(&self) -> &Archetype
pub fn archetype(&self) -> &Archetype
Returns the archetype that the current entity belongs to.
pub fn contains<T>(&self) -> boolwhere
T: Component,
pub fn contains<T>(&self) -> boolwhere
T: Component,
Returns true if the current entity has a component of type T.
Otherwise, this returns false.
§Notes
If you do not know the concrete type of a component, consider using
Self::contains_id or Self::contains_type_id.
pub fn contains_id(&self, component_id: ComponentId) -> bool
pub fn contains_id(&self, component_id: ComponentId) -> bool
Returns true if the current entity has a component identified by component_id.
Otherwise, this returns false.
§Notes
- If you know the concrete type of the component, you should prefer
Self::contains. - If you know the component’s
TypeIdbut not its [ComponentId], consider usingSelf::contains_type_id.
pub fn contains_type_id(&self, type_id: TypeId) -> bool
pub fn contains_type_id(&self, type_id: TypeId) -> bool
Returns true if the current entity has a component with the type identified by type_id.
Otherwise, this returns false.
§Notes
- If you know the concrete type of the component, you should prefer
Self::contains. - If you have a [
ComponentId] instead of aTypeId, consider usingSelf::contains_id.
pub fn get<T>(&self) -> Option<&'w T>where
T: Component,
pub fn get<T>(&self) -> Option<&'w T>where
T: Component,
Gets access to the component of type T for the current entity.
Returns None if the entity does not have a component of type T.
pub fn get_ref<T>(&self) -> Option<Ref<'w, T>>where
T: Component,
pub fn get_ref<T>(&self) -> Option<Ref<'w, T>>where
T: Component,
Gets access to the component of type T for the current entity,
including change detection information as a Ref.
Returns None if the entity does not have a component of type T.
pub fn get_change_ticks<T>(&self) -> Option<ComponentTicks>where
T: Component,
pub fn get_change_ticks<T>(&self) -> Option<ComponentTicks>where
T: Component,
Retrieves the change ticks for the given component. This can be useful for implementing change detection in custom runtimes.
pub fn get_changed_by<T>(&self) -> Option<MaybeLocation>where
T: Component,
pub fn get_changed_by<T>(&self) -> Option<MaybeLocation>where
T: Component,
pub fn get_change_ticks_by_id(
&self,
component_id: ComponentId,
) -> Option<ComponentTicks>
pub fn get_change_ticks_by_id( &self, component_id: ComponentId, ) -> Option<ComponentTicks>
Retrieves the change ticks for the given [ComponentId]. This can be useful for implementing change
detection in custom runtimes.
You should prefer to use the typed API EntityRef::get_change_ticks where possible and only
use this in cases where the actual component types are not known at
compile time.
pub fn get_by_id<F>(
&self,
component_ids: F,
) -> Result<<F as DynamicComponentFetch>::Ref<'w>, EntityComponentError>where
F: DynamicComponentFetch,
pub fn get_by_id<F>(
&self,
component_ids: F,
) -> Result<<F as DynamicComponentFetch>::Ref<'w>, EntityComponentError>where
F: DynamicComponentFetch,
Returns untyped read-only reference(s) to component(s) for the
current entity, based on the given [ComponentId]s.
You should prefer to use the typed API EntityRef::get where
possible and only use this in cases where the actual component types
are not known at compile time.
Unlike EntityRef::get, this returns untyped reference(s) to
component(s), and it’s the job of the caller to ensure the correct
type(s) are dereferenced (if necessary).
§Errors
Returns [EntityComponentError::MissingComponent] if the entity does
not have a component.
§Examples
§Single [ComponentId]
let entity = world.spawn(Foo(42)).id();
// Grab the component ID for `Foo` in whatever way you like.
let component_id = world.register_component::<Foo>();
// Then, get the component by ID.
let ptr = world.entity(entity).get_by_id(component_id);§Array of [ComponentId]s
let entity = world.spawn((X(42), Y(10))).id();
// Grab the component IDs for `X` and `Y` in whatever way you like.
let x_id = world.register_component::<X>();
let y_id = world.register_component::<Y>();
// Then, get the components by ID. You'll receive a same-sized array.
let Ok([x_ptr, y_ptr]) = world.entity(entity).get_by_id([x_id, y_id]) else {
// Up to you to handle if a component is missing from the entity.
};§Slice of [ComponentId]s
let entity = world.spawn((X(42), Y(10))).id();
// Grab the component IDs for `X` and `Y` in whatever way you like.
let x_id = world.register_component::<X>();
let y_id = world.register_component::<Y>();
// Then, get the components by ID. You'll receive a vec of ptrs.
let ptrs = world.entity(entity).get_by_id(&[x_id, y_id] as &[ComponentId]);§HashSet of [ComponentId]s
let entity = world.spawn((X(42), Y(10))).id();
// Grab the component IDs for `X` and `Y` in whatever way you like.
let x_id = world.register_component::<X>();
let y_id = world.register_component::<Y>();
// Then, get the components by ID. You'll receive a vec of ptrs.
let ptrs = world.entity(entity).get_by_id(&HashSet::from_iter([x_id, y_id]));pub fn components<Q>(&self) -> <Q as QueryData>::Item<'w, 'static>where
Q: ReadOnlyQueryData + ReleaseStateQueryData + SingleEntityQueryData,
pub fn components<Q>(&self) -> <Q as QueryData>::Item<'w, 'static>where
Q: ReadOnlyQueryData + ReleaseStateQueryData + SingleEntityQueryData,
Returns read-only components for the current entity that match the query Q.
§Panics
If the entity does not have the components required by the query Q.
pub fn get_components<Q>(
&self,
) -> Result<<Q as QueryData>::Item<'w, 'static>, QueryAccessError>where
Q: ReadOnlyQueryData + ReleaseStateQueryData + SingleEntityQueryData,
pub fn get_components<Q>(
&self,
) -> Result<<Q as QueryData>::Item<'w, 'static>, QueryAccessError>where
Q: ReadOnlyQueryData + ReleaseStateQueryData + SingleEntityQueryData,
Returns read-only components for the current entity that match the query Q,
or None if the entity does not have the components required by the query Q.
pub fn spawned_by(&self) -> MaybeLocation
pub fn spawned_by(&self) -> MaybeLocation
Returns the source code location from which this entity has been spawned.
pub fn spawn_tick(&self) -> Tick
pub fn spawn_tick(&self) -> Tick
Returns the [Tick] at which this entity has been spawned.
Trait Implementations§
§impl<'a> From<&'a EntityWorldMut<'_>> for EntityRef<'a>
impl<'a> From<&'a EntityWorldMut<'_>> for EntityRef<'a>
§fn from(entity: &'a EntityWorldMut<'_>) -> EntityRef<'a>
fn from(entity: &'a EntityWorldMut<'_>) -> EntityRef<'a>
§impl<'w> From<EntityWorldMut<'w>> for EntityRef<'w>
impl<'w> From<EntityWorldMut<'w>> for EntityRef<'w>
§fn from(entity: EntityWorldMut<'w>) -> EntityRef<'w>
fn from(entity: EntityWorldMut<'w>) -> EntityRef<'w>
§impl Ord for EntityRef<'_>
impl Ord for EntityRef<'_>
1.21.0 (const: unstable) · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
§impl PartialOrd for EntityRef<'_>
impl PartialOrd for EntityRef<'_>
§impl<'a> QueryData for EntityRef<'a>
impl<'a> QueryData for EntityRef<'a>
§const IS_READ_ONLY: bool = true
const IS_READ_ONLY: bool = true
§const IS_ARCHETYPAL: bool = true
const IS_ARCHETYPAL: bool = true
§type ReadOnly = EntityRef<'a>
type ReadOnly = EntityRef<'a>
QueryData], which satisfies the [ReadOnlyQueryData] trait.§type Item<'w, 's> = EntityRef<'w>
type Item<'w, 's> = EntityRef<'w>
WorldQuery]
This will be the data retrieved by the query,
and is visible to the end user when calling e.g. Query<Self>::get.§fn shrink<'wlong, 'wshort, 's>(
item: <EntityRef<'a> as QueryData>::Item<'wlong, 's>,
) -> <EntityRef<'a> as QueryData>::Item<'wshort, 's>where
'wlong: 'wshort,
fn shrink<'wlong, 'wshort, 's>(
item: <EntityRef<'a> as QueryData>::Item<'wlong, 's>,
) -> <EntityRef<'a> as QueryData>::Item<'wshort, 's>where
'wlong: 'wshort,
§unsafe fn fetch<'w, 's>(
_state: &'s <EntityRef<'a> as WorldQuery>::State,
fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>,
entity: Entity,
_table_row: TableRow,
) -> Option<<EntityRef<'a> as QueryData>::Item<'w, 's>>
unsafe fn fetch<'w, 's>( _state: &'s <EntityRef<'a> as WorldQuery>::State, fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>, entity: Entity, _table_row: TableRow, ) -> Option<<EntityRef<'a> as QueryData>::Item<'w, 's>>
Self::Item for either the given entity in the current [Table],
or for the given entity in the current [Archetype]. This must always be called after
[WorldQuery::set_table] with a table_row in the range of the current [Table] or after
[WorldQuery::set_archetype] with an entity in the current archetype.
Accesses components registered in [WorldQuery::update_component_access]. Read more§fn iter_access(
_state: &<EntityRef<'a> as WorldQuery>::State,
) -> impl Iterator<Item = EcsAccessType<'_>>
fn iter_access( _state: &<EntityRef<'a> as WorldQuery>::State, ) -> impl Iterator<Item = EcsAccessType<'_>>
QueryData::fetch]. Access conflicts are usually
checked in [WorldQuery::update_component_access], but in certain cases this method can be useful to implement
a way of checking for access conflicts in a non-allocating way.§fn provide_extra_access(
_state: &mut Self::State,
_access: &mut Access,
_available_access: &Access,
)
fn provide_extra_access( _state: &mut Self::State, _access: &mut Access, _available_access: &Access, )
update_component_access.
Implementations may add additional access that is a subset of available_access
and does not conflict with anything in access,
and must update access to include that access. Read more§impl ReleaseStateQueryData for EntityRef<'_>
impl ReleaseStateQueryData for EntityRef<'_>
§fn release_state<'w>(
item: <EntityRef<'_> as QueryData>::Item<'w, '_>,
) -> <EntityRef<'_> as QueryData>::Item<'w, 'static>
fn release_state<'w>( item: <EntityRef<'_> as QueryData>::Item<'w, '_>, ) -> <EntityRef<'_> as QueryData>::Item<'w, 'static>
'static state lifetime.§impl<'a> WorldQuery for EntityRef<'a>
impl<'a> WorldQuery for EntityRef<'a>
§const IS_DENSE: bool = true
const IS_DENSE: bool = true
§type Fetch<'w> = EntityFetch<'w>
type Fetch<'w> = EntityFetch<'w>
WorldQuery] to compute Self::Item for each entity.§type State = ()
type State = ()
Self::Fetch. This will be cached inside QueryState,
so it is best to move as much data / computation here as possible to reduce the cost of
constructing Self::Fetch.§fn shrink_fetch<'wlong, 'wshort>(
fetch: <EntityRef<'a> as WorldQuery>::Fetch<'wlong>,
) -> <EntityRef<'a> as WorldQuery>::Fetch<'wshort>where
'wlong: 'wshort,
fn shrink_fetch<'wlong, 'wshort>(
fetch: <EntityRef<'a> as WorldQuery>::Fetch<'wlong>,
) -> <EntityRef<'a> as WorldQuery>::Fetch<'wshort>where
'wlong: 'wshort,
§unsafe fn init_fetch<'w, 's>(
world: UnsafeWorldCell<'w>,
_state: &'s <EntityRef<'a> as WorldQuery>::State,
last_run: Tick,
this_run: Tick,
) -> <EntityRef<'a> as WorldQuery>::Fetch<'w>
unsafe fn init_fetch<'w, 's>( world: UnsafeWorldCell<'w>, _state: &'s <EntityRef<'a> as WorldQuery>::State, last_run: Tick, this_run: Tick, ) -> <EntityRef<'a> as WorldQuery>::Fetch<'w>
Self::Fetch,
by combining data from the World with the cached Self::State.
Readonly accesses resources registered in [WorldQuery::update_component_access]. Read more§unsafe fn set_archetype<'w, 's>(
_fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>,
_state: &'s <EntityRef<'a> as WorldQuery>::State,
_archetype: &'w Archetype,
_table: &Table,
)
unsafe fn set_archetype<'w, 's>( _fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>, _state: &'s <EntityRef<'a> as WorldQuery>::State, _archetype: &'w Archetype, _table: &Table, )
Archetype]. This will always be called on
archetypes that match this [WorldQuery]. Read more§unsafe fn set_table<'w, 's>(
_fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>,
_state: &'s <EntityRef<'a> as WorldQuery>::State,
_table: &'w Table,
)
unsafe fn set_table<'w, 's>( _fetch: &mut <EntityRef<'a> as WorldQuery>::Fetch<'w>, _state: &'s <EntityRef<'a> as WorldQuery>::State, _table: &'w Table, )
Table]. This will always be called on tables
that match this [WorldQuery]. Read more§fn update_component_access(
_state: &<EntityRef<'a> as WorldQuery>::State,
access: &mut FilteredAccess,
)
fn update_component_access( _state: &<EntityRef<'a> as WorldQuery>::State, access: &mut FilteredAccess, )
§fn init_state(_world: &mut World)
fn init_state(_world: &mut World)
State for this [WorldQuery] type.§fn matches_component_set(
_state: &<EntityRef<'a> as WorldQuery>::State,
_set_contains_id: &impl Fn(ComponentId) -> bool,
) -> bool
fn matches_component_set( _state: &<EntityRef<'a> as WorldQuery>::State, _set_contains_id: &impl Fn(ComponentId) -> bool, ) -> bool
§fn init_nested_access(
_state: &Self::State,
_system_name: Option<&str>,
_component_access_set: &mut FilteredAccessSet,
_world: UnsafeWorldCell<'_>,
)
fn init_nested_access( _state: &Self::State, _system_name: Option<&str>, _component_access_set: &mut FilteredAccessSet, _world: UnsafeWorldCell<'_>, )
WorldQuery]. Read more§fn update_archetypes(_state: &mut Self::State, _world: UnsafeWorldCell<'_>)
fn update_archetypes(_state: &mut Self::State, _world: UnsafeWorldCell<'_>)
impl ArchetypeQueryData for EntityRef<'_>
impl<'w> Copy for EntityRef<'w>
impl EntityEquivalent for EntityRef<'_>
impl Eq for EntityRef<'_>
impl IterQueryData for EntityRef<'_>
impl ReadOnlyQueryData for EntityRef<'_>
impl SingleEntityQueryData for EntityRef<'_>
Auto Trait Implementations§
impl<'w> Freeze for EntityRef<'w>
impl<'w> !RefUnwindSafe for EntityRef<'w>
impl<'w> Send for EntityRef<'w>
impl<'w> Sync for EntityRef<'w>
impl<'w> Unpin for EntityRef<'w>
impl<'w> UnsafeUnpin for EntityRef<'w>
impl<'w> !UnwindSafe for EntityRef<'w>
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<T> DynEq for T
impl<T> DynEq for T
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.