pub struct Entities { /* private fields */ }
Expand description
A World
’s internal metadata store on all of its entities.
Contains metadata on:
- The generation of every entity.
- The alive/dead status of a particular entity. (i.e. “has entity 3 been despawned?”)
- The location of the entity’s components in memory (via
EntityLocation
)
Implementations§
Source§impl Entities
impl Entities
Sourcepub fn reserve_entities(&self, count: u32) -> ReserveEntitiesIterator<'_> ⓘ
pub fn reserve_entities(&self, count: u32) -> ReserveEntitiesIterator<'_> ⓘ
Reserve entity IDs concurrently.
Storage for entity generation and location is lazily allocated by calling flush
.
Sourcepub fn reserve_entity(&self) -> Entity
pub fn reserve_entity(&self) -> Entity
Reserve one entity ID concurrently.
Equivalent to self.reserve_entities(1).next().unwrap()
, but more efficient.
Sourcepub fn free(&mut self, entity: Entity) -> Option<EntityIdLocation>
pub fn free(&mut self, entity: Entity) -> Option<EntityIdLocation>
Destroy an entity, allowing it to be reused.
Returns the Option<EntityLocation>
of the entity or None
if the entity
was not present.
Must not be called while reserved entities are awaiting flush()
.
Sourcepub fn reserve(&mut self, additional: u32)
pub fn reserve(&mut self, additional: u32)
Ensure at least n
allocations can succeed without reallocating.
Sourcepub fn get(&self, entity: Entity) -> Option<EntityLocation>
pub fn get(&self, entity: Entity) -> Option<EntityLocation>
Returns the EntityLocation
of an Entity
.
Note: for pending entities and entities not participating in the ECS (entities with a EntityIdLocation
of None
), returns None
.
Sourcepub fn get_id_location(&self, entity: Entity) -> Option<EntityIdLocation>
pub fn get_id_location(&self, entity: Entity) -> Option<EntityIdLocation>
Returns the EntityIdLocation
of an Entity
.
Note: for pending entities, returns None
.
Sourcepub fn resolve_from_id(&self, row: EntityRow) -> Option<Entity>
pub fn resolve_from_id(&self, row: EntityRow) -> Option<Entity>
Get the Entity
with a given id, if it exists in this Entities
collection
Returns None
if this Entity
is outside of the range of currently reserved Entities
Note: This method may return Entities
which are currently free
Note that contains
will correctly return false for freed
entities, since it checks the generation
Sourcepub unsafe fn flush(
&mut self,
init: impl FnMut(Entity, &mut EntityIdLocation),
by: MaybeLocation,
tick: Tick,
)
pub unsafe fn flush( &mut self, init: impl FnMut(Entity, &mut EntityIdLocation), by: MaybeLocation, tick: Tick, )
Allocates space for entities previously reserved with reserve_entity
or
reserve_entities
, then initializes each one using the supplied function.
See EntityLocation
for details on its meaning and how to set it.
§Safety
Flush must set the entity location to the correct ArchetypeId
for the given Entity
each time init is called. This can be ArchetypeId::INVALID
, provided the Entity
has not been assigned to an Archetype
.
Note: freshly-allocated entities (ones which don’t come from the pending list) are guaranteed to be initialized with the invalid archetype.
Sourcepub fn flush_as_invalid(&mut self, by: MaybeLocation, tick: Tick)
pub fn flush_as_invalid(&mut self, by: MaybeLocation, tick: Tick)
Flushes all reserved entities to an “invalid” state. Attempting to retrieve them will return None
unless they are later populated with a valid archetype.
Sourcepub fn total_count(&self) -> usize
pub fn total_count(&self) -> usize
The count of all entities in the World
that have ever been allocated
including the entities that are currently freed.
This does not include entities that have been reserved but have never been allocated yet.
Sourcepub fn used_count(&self) -> usize
pub fn used_count(&self) -> usize
The count of all entities in the World
that are used,
including both those allocated and those reserved, but not those freed.
Sourcepub fn total_prospective_count(&self) -> usize
pub fn total_prospective_count(&self) -> usize
The count of all entities in the World
that have ever been allocated or reserved, including those that are freed.
This is the value that Self::total_count()
would return if Self::flush()
were called right now.
Sourcepub fn entity_get_spawned_or_despawned_by(
&self,
entity: Entity,
) -> MaybeLocation<Option<&'static Location<'static>>>
pub fn entity_get_spawned_or_despawned_by( &self, entity: Entity, ) -> MaybeLocation<Option<&'static Location<'static>>>
Try to get the source code location from which this entity has last been spawned, despawned or flushed.
Returns None
if its index has been reused by another entity
or if this entity has never existed.
Trait Implementations§
Source§impl<'a> SystemParam for &'a Entities
impl<'a> SystemParam for &'a Entities
Source§type Item<'w, 's> = &'w Entities
type Item<'w, 's> = &'w Entities
Self
, instantiated with new lifetimes. Read moreSource§fn init_state(_world: &mut World) -> Self::State
fn init_state(_world: &mut World) -> Self::State
State
.Source§fn init_access(
_state: &Self::State,
_system_meta: &mut SystemMeta,
_component_access_set: &mut FilteredAccessSet,
_world: &mut World,
)
fn init_access( _state: &Self::State, _system_meta: &mut SystemMeta, _component_access_set: &mut FilteredAccessSet, _world: &mut World, )
World
access used by this SystemParam
Source§unsafe fn get_param<'w, 's>(
_state: &'s mut Self::State,
_system_meta: &SystemMeta,
world: UnsafeWorldCell<'w>,
_change_tick: Tick,
) -> Self::Item<'w, 's>
unsafe fn get_param<'w, 's>( _state: &'s mut Self::State, _system_meta: &SystemMeta, world: UnsafeWorldCell<'w>, _change_tick: Tick, ) -> Self::Item<'w, 's>
SystemParamFunction
. Read moreSource§fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
fn apply(state: &mut Self::State, system_meta: &SystemMeta, world: &mut World)
SystemParam
’s state.
This is used to apply Commands
during ApplyDeferred
.Source§fn queue(
state: &mut Self::State,
system_meta: &SystemMeta,
world: DeferredWorld<'_>,
)
fn queue( state: &mut Self::State, system_meta: &SystemMeta, world: DeferredWorld<'_>, )
ApplyDeferred
.Source§unsafe fn validate_param(
state: &mut Self::State,
system_meta: &SystemMeta,
world: UnsafeWorldCell<'_>,
) -> Result<(), SystemParamValidationError>
unsafe fn validate_param( state: &mut Self::State, system_meta: &SystemMeta, world: UnsafeWorldCell<'_>, ) -> Result<(), SystemParamValidationError>
impl<'a> ReadOnlySystemParam for &'a Entities
Auto Trait Implementations§
impl !Freeze for Entities
impl RefUnwindSafe for Entities
impl Send for Entities
impl Sync for Entities
impl Unpin for Entities
impl UnwindSafe for Entities
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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>
, which can then be
downcast
into Box<dyn ConcreteType>
where ConcreteType
implements Trait
.Source§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>
, which can then be further
downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§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.Source§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.