Struct shipyard::Entities

source ·
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

source

pub fn is_alive(&self, entity: EntityId) -> bool

Returns true if entity matches a living entity.

source

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));
source

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)));
source

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.

source

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));
source

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 EntityIds.
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))));
source

pub fn iter(&self) -> EntitiesIter<'_>

Creates an iterator over all entities.

source

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.

source

pub fn on_deletion(&mut self, f: impl FnMut(EntityId) + Send + Sync + 'static)

Sets the on entity deletion callback.

source

pub fn take_on_deletion( &mut self, ) -> Option<Box<dyn FnMut(EntityId) + Send + Sync + 'static>>

Remove the on entity deletion callback.

Trait Implementations§

source§

impl<'a> IntoIterator for &'a Entities

source§

type Item = EntityId

The type of the elements being iterated over.
source§

type IntoIter = EntitiesIter<'a>

Which kind of iterator are we turning this into?
source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more
source§

impl Storage for Entities

source§

fn clear(&mut self, _current: TrackingTimestamp)

Deletes all components of this storage.
source§

fn memory_usage(&self) -> Option<StorageMemoryUsage>

Returns how much memory this storage uses.
source§

fn is_empty(&self) -> bool

Returns true if the storage is empty.
source§

fn move_component_from( &mut self, _other_all_storages: &mut AllStorages, _from: EntityId, _to: EntityId, _current: TrackingTimestamp, _other_current: TrackingTimestamp, )

Moves a component from a World to another.
source§

fn any(&self) -> &dyn Any

Casts to &dyn Any.
source§

fn any_mut(&mut self) -> &mut dyn Any

Casts to &mut dyn Any.
source§

fn delete(&mut self, entity: EntityId, current: TrackingTimestamp)

Deletes an entity from this storage.
source§

fn name(&self) -> Cow<'static, str>

Returns the storage’s name.
source§

fn sparse_array(&self) -> Option<&SparseArray<EntityId, 32>>

Returns a SparseSet’s internal SparseArray.
source§

fn clear_all_removed_and_deleted(&mut self)

Clear all deletion and removal tracking data.
source§

fn clear_all_removed_and_deleted_older_than_timestamp( &mut self, _timestamp: TrackingTimestamp, )

Clear all deletion and removal tracking data older than some timestamp.

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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 T
where U: From<T>,

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.

source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

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

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

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

source§

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

The type returned in the event of a conversion error.
source§

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

Performs the conversion.
source§

impl<S> TupleRetainStorage for S
where S: 'static + Storage,

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