pub struct Entities { /* private fields */ }
Expand description
Entities holds the EntityIds to all entities: living, removed and dead.
A living entity is an entity currently present, with or without component.
Removed and dead entities don’t have any component.
The big difference is that removed ones can become alive again.
The life cycle of an entity looks like this:
Generation -> Deletion -> Dead
⬑–––––↵
Implementations§
source§impl Entities
impl Entities
sourcepub fn is_alive(&self, entity: EntityId) -> bool
pub fn is_alive(&self, entity: EntityId) -> bool
Returns true
if entity
matches a living entity.
sourcepub fn add_component<C, S: AddComponent<C>>(
&self,
entity: EntityId,
storages: S,
component: C,
)
pub fn add_component<C, S: AddComponent<C>>( &self, entity: EntityId, storages: S, component: C, )
Adds component
to entity
, multiple components can be added at the same time using a tuple.
Entities
is only borrowed immutably.
§Panics
entity
is not alive.
§Example
use shipyard::{Component, EntitiesView, ViewMut, World};
#[derive(Component)]
struct U32(u32);
let mut world = World::new();
let entity = world.add_entity(());
let (entities, mut u32s) = world.borrow::<(EntitiesView, ViewMut<U32>)>().unwrap();
entities.add_component(entity, &mut u32s, U32(0));
sourcepub fn add_distinct_component<S: AddDistinctComponent>(
&self,
entity: EntityId,
storages: S,
component: S::Component,
) -> bool
pub fn add_distinct_component<S: AddDistinctComponent>( &self, entity: EntityId, storages: S, component: S::Component, ) -> bool
Adds component
to entity
, multiple components can be added at the same time using a tuple.
If the entity already has this component, it won’t be replaced. Very useful if you want accurate modification tracking.
Entities
is only borrowed immutably.
Returns true
if the component was added.
§Panics
entity
is not alive.
§Example
use shipyard::{Component, EntitiesView, ViewMut, World};
#[derive(Component, PartialEq)]
struct U32(u32);
let mut world = World::new();
let entity = world.add_entity(());
let (entities, mut u32s) = world.borrow::<(EntitiesView, ViewMut<U32>)>().unwrap();
assert!(entities.add_distinct_component(entity, &mut u32s, U32(0)));
assert!(!entities.add_distinct_component(entity, &mut u32s, U32(0)));
sourcepub fn delete_unchecked(&mut self, entity_id: EntityId) -> bool
pub fn delete_unchecked(&mut self, entity_id: EntityId) -> bool
Deletes an entity, returns true if the entity was alive.
If the entity has components, they will not be deleted and still be accessible using this id.
sourcepub fn add_entity<T: AddEntity>(
&mut self,
storages: T,
component: T::Component,
) -> EntityId
pub fn add_entity<T: AddEntity>( &mut self, storages: T, component: T::Component, ) -> EntityId
Stores component
in a new entity and returns its EntityId
.
Multiple components can be added at the same time using a tuple.
§Example:
use shipyard::{Component, EntitiesViewMut, ViewMut, World};
#[derive(Component, Debug, PartialEq, Eq)]
struct U32(u32);
#[derive(Component, Debug, PartialEq, Eq)]
struct USIZE(usize);
let world = World::new();
let (mut entities, mut usizes, mut u32s) = world
.borrow::<(EntitiesViewMut, ViewMut<USIZE>, ViewMut<U32>)>()
.unwrap();
let entity = entities.add_entity((&mut usizes, &mut u32s), (USIZE(0), U32(1)));
assert_eq!(usizes[entity], USIZE(0));
assert_eq!(u32s[entity], U32(1));
sourcepub fn bulk_add_entity<T: AddEntity + BulkReserve, I: IntoIterator<Item = T::Component>>(
&mut self,
storages: T,
component: I,
) -> BulkEntityIter<'_> ⓘ
pub fn bulk_add_entity<T: AddEntity + BulkReserve, I: IntoIterator<Item = T::Component>>( &mut self, storages: T, component: I, ) -> BulkEntityIter<'_> ⓘ
Creates multiple new entities and returns an iterator yielding the new EntityId
s.
Multiple components can be added at the same time using a tuple.
§Example
use shipyard::{Component, EntitiesViewMut, ViewMut, World};
#[derive(Component)]
struct U32(u32);
#[derive(Component)]
struct USIZE(usize);
let world = World::new();
let (mut entities, mut usizes, mut u32s) = world
.borrow::<(EntitiesViewMut, ViewMut<USIZE>, ViewMut<U32>)>()
.unwrap();
let new_entities =
entities.bulk_add_entity((&mut u32s, &mut usizes), (10..20).map(|i| (U32(i as u32), USIZE(i))));
sourcepub fn spawn(&mut self, entity: EntityId) -> bool
pub fn spawn(&mut self, entity: EntityId) -> bool
Make the given entity alive.
Does nothing if an entity with a greater generation is already at this index.
Returns true
if the entity is successfully spawned.
Trait Implementations§
source§impl<'a> IntoIterator for &'a Entities
impl<'a> IntoIterator for &'a Entities
source§impl Storage for Entities
impl Storage for Entities
source§fn clear(&mut self, _current: TrackingTimestamp)
fn clear(&mut self, _current: TrackingTimestamp)
source§fn memory_usage(&self) -> Option<StorageMemoryUsage>
fn memory_usage(&self) -> Option<StorageMemoryUsage>
source§fn move_component_from(
&mut self,
_other_all_storages: &mut AllStorages,
_from: EntityId,
_to: EntityId,
_current: TrackingTimestamp,
_other_current: TrackingTimestamp,
)
fn move_component_from( &mut self, _other_all_storages: &mut AllStorages, _from: EntityId, _to: EntityId, _current: TrackingTimestamp, _other_current: TrackingTimestamp, )
World
to another.source§fn delete(&mut self, entity: EntityId, current: TrackingTimestamp)
fn delete(&mut self, entity: EntityId, current: TrackingTimestamp)
source§fn sparse_array(&self) -> Option<&SparseArray<EntityId, 32>>
fn sparse_array(&self) -> Option<&SparseArray<EntityId, 32>>
SparseSet
’s internal SparseArray
.source§fn clear_all_removed_and_deleted(&mut self)
fn clear_all_removed_and_deleted(&mut self)
source§fn clear_all_removed_and_deleted_older_than_timestamp(
&mut self,
_timestamp: TrackingTimestamp,
)
fn clear_all_removed_and_deleted_older_than_timestamp( &mut self, _timestamp: TrackingTimestamp, )
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> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more