Entity

Struct Entity 

Source
pub struct Entity { /* private fields */ }
Expand description

Components associated by a common identifier.

Entities are mostly just usize identifiers that help locate components, but Entity comes with some extra conveniences.

After an entity is created you can attach and remove bundles of components asynchronously (or “lazily” if not in an async context).

use std::sync::Arc;
use apecs::*;

let mut world = World::default();
let mut facade = world.facade();

// here we use `smol` but `apecs` works with any async runtime
// asynchronously create new entities from within a future
let task = smol::spawn(async move {
    let mut b = facade
        .visit(|mut ents: ViewMut<Entities>| {
            ents.create().with_bundle((123, "entity B", true))
        })
        .await
        .unwrap();
    // after this await, `b` has its bundle
    b.updates().await;
    // visit a component or bundle
    let did_visit = b
        .visit::<&&str, ()>(|name| assert_eq!("entity B", *name.value()))
        .await
        .is_some();
    assert!(did_visit);
});

while !task.is_finished() {
    // tick the world
    world.tick().unwrap();
    // send resources to the facade
    world.get_facade_schedule().unwrap().run().unwrap();
}

Alternatively, if you have access to the Components resource you can attach components directly and immediately.

Implementations§

Source§

impl Entity

Source

pub fn id(&self) -> usize

Source

pub fn with_bundle<B: IsBundle + Send + Sync + 'static>(self, bundle: B) -> Self

Lazily add a component bundle to archetype storage.

This entity will have the associated components after the next tick.

Source

pub fn insert_bundle<B: IsBundle + Send + Sync + 'static>(&mut self, bundle: B)

Lazily add a component bundle to archetype storage.

This entity will have the associated components after the next tick.

Source

pub fn insert_component<T: Send + Sync + 'static>(&mut self, component: T)

Lazily add a component bundle to archetype storage.

This entity will have the associated component after the next tick.

Source

pub fn remove_component<T: Send + Sync + 'static>(&mut self)

Lazily remove a component bundle from archetype storage.

This entity will have lost the associated component after the next tick.

Source

pub async fn updates(&mut self)

Await a future that completes after all lazy updates have been performed.

Source

pub async fn visit<Q: IsQuery + 'static, T: Send + Sync + 'static>( &self, f: impl FnOnce(Q::QueryRow<'_>) -> T + Send + Sync + 'static, ) -> Option<T>

Visit this entity’s query row in storage, if it exists.

§Panics

Panics if the query is malformed (the bundle is not unique).

Methods from Deref<Target = usize>§

1.43.0

pub const MIN: usize = 0usize

1.43.0

pub const MAX: usize = 18_446_744_073_709_551_615usize

1.53.0

pub const BITS: u32 = 64u32

Trait Implementations§

Source§

impl AsRef<usize> for Entity

Source§

fn as_ref(&self) -> &usize

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for Entity

You may clone entities, but each one does its own lazy updates, separate from all other clones.

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Entity

Source§

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

Formats the value using the given formatter. Read more
Source§

impl Deref for Entity

Source§

type Target = usize

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.

Auto Trait Implementations§

§

impl Freeze for Entity

§

impl RefUnwindSafe for Entity

§

impl Send for Entity

§

impl Sync for Entity

§

impl Unpin for Entity

§

impl UnwindSafe for Entity

Blanket Implementations§

§

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

§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
§

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

§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more
§

impl<T> CloneToUninit for T
where T: Clone,

§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> From<T> for T

§

fn from(t: T) -> T

Returns the argument unchanged.

§

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

§

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
§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
§

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

§

type Error = Infallible

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

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

Performs the conversion.
§

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

§

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

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

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

Performs the conversion.
Source§

impl<T> SatisfyTraits<dyn Cloneable> for T
where T: Clone,

Source§

impl<T> SatisfyTraits<dyn Cloneable + Send> for T
where T: Clone + Send,

Source§

impl<T> SatisfyTraits<dyn Cloneable + Send + Sync> for T
where T: Clone + Send + Sync,

Source§

impl<T> SatisfyTraits<dyn Cloneable + Sync> for T
where T: Clone + Sync,

Source§

impl<T> SatisfyTraits<dyn None> for T

Source§

impl<T> SatisfyTraits<dyn Send> for T
where T: Send,

Source§

impl<T> SatisfyTraits<dyn Send + Sync> for T
where T: Send + Sync,

Source§

impl<T> SatisfyTraits<dyn Sync> for T
where T: Sync,