Skip to main content

Entity

Struct Entity 

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

A lightweight identifier for an entity in the ECS.

Entities are the “E” in ECS - they are identifiers that components attach to. An entity by itself has no data; it’s purely an ID used to look up components.

§Memory Layout

Entity (8 bytes total):
┌────────────────┬────────────────┐
│  index (u32)   │ generation(u32)│
└────────────────┴────────────────┘

§Thread Safety

Entity is Copy, Clone, Send, and Sync. Entity values can be freely shared across threads. However, operations on the ECS world that use entities require appropriate synchronization.

Implementations§

Source§

impl Entity

Source

pub const PLACEHOLDER: Entity

A placeholder entity that should never be returned by the allocator.

Use this as a sentinel value for “no entity” or uninitialized entity fields. The placeholder uses u32::MAX for the index, which the allocator will never return (it would require 4 billion+ entity allocations first).

§Example
use goud_engine::ecs::entity::Entity;

let mut maybe_entity = Entity::PLACEHOLDER;
assert!(maybe_entity.is_placeholder());

// Later, assign a real entity
maybe_entity = Entity::new(0, 1);
assert!(!maybe_entity.is_placeholder());
Source

pub const fn new(index: u32, generation: u32) -> Entity

Creates a new entity with the given index and generation.

This is primarily used by EntityAllocator. Direct construction is possible but not recommended for typical use.

§Arguments
  • index - The slot index for this entity
  • generation - The generation counter for this slot
§Example
use goud_engine::ecs::entity::Entity;

let entity = Entity::new(42, 1);
assert_eq!(entity.index(), 42);
assert_eq!(entity.generation(), 1);
Source

pub const fn index(&self) -> u32

Returns the index of this entity.

The index is the slot in the entity allocator’s internal array. Multiple entities may share the same index (at different times), distinguished by their generation.

Source

pub const fn generation(&self) -> u32

Returns the generation of this entity.

The generation increments each time a slot is reused. Comparing generations allows detecting stale entity references.

Source

pub const fn is_placeholder(&self) -> bool

Returns true if this is the placeholder entity.

The placeholder entity should never be used in actual ECS operations. It’s a sentinel value for “no entity” situations.

Source

pub const fn to_bits(&self) -> u64

Packs the entity into a single u64 value.

Format: upper 32 bits = generation, lower 32 bits = index.

This is useful for FFI or when a single integer representation is needed.

§Example
use goud_engine::ecs::entity::Entity;

let entity = Entity::new(42, 7);
let packed = entity.to_bits();

// Upper 32 bits: generation (7), Lower 32 bits: index (42)
assert_eq!(packed, (7_u64 << 32) | 42);

// Round-trip
let unpacked = Entity::from_bits(packed);
assert_eq!(entity, unpacked);
Source

pub const fn from_bits(bits: u64) -> Entity

Creates an entity from a packed u64 value.

Format: upper 32 bits = generation, lower 32 bits = index.

§Example
use goud_engine::ecs::entity::Entity;

let packed = (3_u64 << 32) | 100;
let entity = Entity::from_bits(packed);

assert_eq!(entity.index(), 100);
assert_eq!(entity.generation(), 3);

Trait Implementations§

Source§

impl Clone for Entity

Source§

fn clone(&self) -> Entity

Returns a duplicate of the value. Read more
1.0.0 · Source§

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<(), Error>

Formats the entity as Entity(index:generation).

§Example
use goud_engine::ecs::entity::Entity;

let entity = Entity::new(42, 3);
assert_eq!(format!("{:?}", entity), "Entity(42:3)");
Source§

impl Default for Entity

Source§

fn default() -> Entity

Returns the placeholder entity.

Using Default returns PLACEHOLDER, which should be treated as “no entity”.

Source§

impl<'de> Deserialize<'de> for Entity

Source§

fn deserialize<D>( deserializer: D, ) -> Result<Entity, <D as Deserializer<'de>>::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for Entity

Source§

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

Formats the entity in a user-friendly way.

Same format as Debug: Entity(index:generation).

Source§

impl From<Entity> for Parent

Source§

fn from(entity: Entity) -> Parent

Converts to this type from the input type.
Source§

impl From<Parent> for Entity

Source§

fn from(parent: Parent) -> Entity

Converts to this type from the input type.
Source§

impl From<u64> for Entity

Source§

fn from(bits: u64) -> Entity

Creates an entity from a packed u64 representation.

Source§

impl Hash for Entity

Source§

fn hash<H>(&self, state: &mut H)
where H: Hasher,

Hashes the entity by combining index and generation.

Two entities with the same index but different generations will hash differently, which is important for using entities as map keys.

1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Entity

Source§

fn eq(&self, other: &Entity) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for Entity

Source§

fn serialize<S>( &self, serializer: S, ) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl WorldQuery for Entity

Entity can be queried to get the entity ID itself.

This is useful when you need the entity ID along with component data, or when iterating over all entities in an archetype.

Source§

type Item<'w> = Entity

The type of data this query fetches. Read more
Source§

type State = ()

The cached state for this query. Read more
Source§

fn init_state(_world: &World) -> <Entity as WorldQuery>::State

Initializes the query state from the world. Read more
Source§

fn component_access( _state: &<Entity as WorldQuery>::State, ) -> BTreeSet<ComponentId>

Returns the set of component IDs this query reads. Read more
Source§

fn matches_archetype( _state: &<Entity as WorldQuery>::State, _archetype: &Archetype, ) -> bool

Checks whether this query matches the given archetype. Read more
Source§

fn fetch<'w>( _state: &<Entity as WorldQuery>::State, world: &'w World, entity: Entity, ) -> Option<<Entity as WorldQuery>::Item<'w>>

Fetches data for a specific entity from the world. Read more
Source§

fn fetch_mut<'w>( state: &Self::State, world: &'w mut World, entity: Entity, ) -> Option<Self::Item<'w>>

Fetches data for a specific entity from a mutable world reference. Read more
Source§

impl Copy for Entity

Source§

impl Eq for Entity

Source§

impl ReadOnlyWorldQuery for Entity

Source§

impl StructuralPartialEq for Entity

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> CloneToUninit for T
where T: Clone,

Source§

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
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

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<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

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<R, P> ReadPrimitive<R> for P
where R: Read + ReadEndian<P>, P: Default,

Source§

fn read_from_little_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_little_endian().
Source§

fn read_from_big_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_big_endian().
Source§

fn read_from_native_endian(read: &mut R) -> Result<Self, Error>

Read this value from the supplied reader. Same as ReadEndian::read_from_native_endian().
Source§

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

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

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

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

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

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> Event for T
where T: Send + Sync + 'static,

Source§

impl<T> QueryState for T
where T: Send + Sync + Clone + 'static,

Source§

impl<T> Resource for T
where T: Send + Sync + 'static,