EntityManager Class Template
Manages entities and their associated components. More...
Declaration
Public Member Typedefs Index
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| using | EntityRegistry_type = TEntityRegistry |
|
The EntityRegistry type used for handle allocation and versioning. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| using | Handle_type = THandle |
|
The entity handle type managed by this instance. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| using | StrongId_type = Handle_type::StrongId_type |
|
Strong identifier type derived from the handle. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| using | ComponentTypeId_type = ComponentTypeId< Handle_type > |
|
ComponentTypeId specialisation bound to THandle. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| using | ComponentOpsRegistry_type = ComponentOpsRegistry< Handle_type > |
|
ComponentOpsRegistry specialisation bound to THandle. More... | |
Public Constructors Index
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityManager (const EntityManager &)=delete | |
|
Non-copyable: copying an EntityManager is explicitly disabled. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityManager (EntityManager &&) noexcept=default | |
|
Move constructor. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityManager (const size_t capacity=TCapacity) | |
|
Constructs an EntityManager with the given capacity. More... | |
Public Operators Index
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityManager & | operator= (const EntityManager &)=delete |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityManager & | operator= (EntityManager &&) noexcept=default |
|
Move-assignment operator. More... | |
Public Member Functions Index
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| Handle_type | create (StrongId_type strongId=StrongId_type{}) |
|
Creates a new entity. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| bool | isValid (const Handle_type handle) const noexcept |
|
Checks if an entity handle is valid. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| bool | isValid (const EntityId entityId) const noexcept |
|
Checks if an entity ID is valid. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| bool | destroy (const Handle_type handle) |
|
Destroys an entity and invalidates its handle. More... | |
template <typename T> | |
| T * | get (const Handle_type handle) const |
|
Retrieves a component for the given entity. More... | |
template <typename T> | |
| auto | sparseSet () -> SparseSet< T > * |
template <typename T> | |
| auto | sparseSet () const -> const SparseSet< T > * |
template <typename T> | |
| bool | has (const Handle_type handle) const |
|
Checks whether an entity has a specific component. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| bool | has (const Handle_type handle, const ComponentTypeId_type typeId) const |
|
Checks whether an entity has a component by type ID. More... | |
template <typename TComponent> | |
| auto | ensureSparseSet () -> SparseSet< TComponent > * |
|
Ensures that a SparseSet for TComponent exists, creating it if necessary. More... | |
template <typename T, typename... Args> | |
| T * | emplace (const Handle_type handle, Args &&...args) |
|
Constructs and attaches a component to an entity. More... | |
template <typename T, typename... Args> | |
| T * | emplaceOrGet (const Handle_type handle, Args &&...args) |
|
Returns existing component or creates a new one. More... | |
template <typename T> | |
| bool | remove (const Handle_type &handle) |
|
Removes a specific component from an entity. More... | |
template <typename TComponent> | |
| bool | managesDirty () |
|
Returns true if the specified ComponentType is managed by this EntityManager. More... | |
template <typename TComponent> | |
| void | trackDirty () |
|
Tracks this ComponentType with DirtyComponentSpec. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| void | clearAllDirtySets () |
|
Clears all dirty sets that have been registered via trackDirty(). More... | |
template <typename... T> | |
| void | clearDirtySet () |
|
Checks if the SparseSet for DirtyComponentSpec<T> exists and clears it. More... | |
template <typename TFunc> | |
| void | forEachComponentTypeId (const Handle_type handle, TFunc &&func) const |
|
Invokes func for every component type ID attached to an entity. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| void | clone (const Handle_type source, const Handle_type target) |
|
Clones all components from source entity to target entity. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| void * | raw (const Handle_type handle, const ComponentTypeId_type typeId) const |
|
Returns raw void pointer to a component. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| Handle_type | handle (const EntityId entityId) const |
|
Reconstructs an EntityHandle from an EntityId. More... | |
Private Member Attributes Index
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| std::vector< size_t > | registeredDirtySets_ |
|
Type IDs of all dirty sets registered via trackDirty(), used by clearAllDirtySets(). More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| std::vector< std::unique_ptr< SparseSetBase > > | components_ |
|
Component storage indexed by type ID. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| EntityRegistry_type | registry_ |
|
Entity registry owned by this EntityManager. More... | |
template <typename THandle, typename TEntityRegistry, size_t TCapacity> | |
| const size_t | capacity_ |
|
Initial capacity for the underlying sparse sets. More... | |
Description
Manages entities and their associated components.
EntityManager provides a unified interface for creating entities and attaching/retrieving components. It delegates handle management to an EntityRegistry and stores component data in type-specific SparseSet containers.
Definition at line 78 of file EntityManager.ixx.
Public Member Typedefs
ComponentOpsRegistry_type
|
ComponentOpsRegistry specialisation bound to THandle.
Definition at line 92 of file EntityManager.ixx.
ComponentTypeId_type
|
ComponentTypeId specialisation bound to THandle.
Definition at line 90 of file EntityManager.ixx.
EntityRegistry_type
|
The EntityRegistry type used for handle allocation and versioning.
Definition at line 84 of file EntityManager.ixx.
Handle_type
|
The entity handle type managed by this instance.
Definition at line 86 of file EntityManager.ixx.
StrongId_type
|
Strong identifier type derived from the handle.
Definition at line 88 of file EntityManager.ixx.
Public Constructors
EntityManager()
| delete |
Non-copyable: copying an EntityManager is explicitly disabled.
Definition at line 97 of file EntityManager.ixx.
EntityManager()
| noexcept default |
Move constructor.
Definition at line 103 of file EntityManager.ixx.
EntityManager()
| inline explicit |
Constructs an EntityManager with the given capacity.
Creates an internally owned EntityRegistry initialized with the specified capacity.
- Parameters
-
capacity Initial capacity for the registry and sparse sets. Defaults to TCapacity.
Definition at line 120 of file EntityManager.ixx.
Public Operators
operator=()
| delete |
Definition at line 98 of file EntityManager.ixx.
operator=()
| noexcept default |
Move-assignment operator.
Definition at line 108 of file EntityManager.ixx.
Public Member Functions
clearAllDirtySets()
| inline |
Clears all dirty sets that have been registered via trackDirty().
Definition at line 496 of file EntityManager.ixx.
clearDirtySet()
| inline |
Checks if the SparseSet for DirtyComponentSpec<T> exists and clears it.
Accepts a variadic list of component types; all matching dirty sets are cleared.
- Template Parameters
-
T Component types whose dirty sets should be cleared.
Definition at line 513 of file EntityManager.ixx.
clone()
| inline |
Clones all components from source entity to target entity.
Iterates through all components on the source and copies them to the target using the registered clone function. Skips components that already exist on the target.
- Parameters
-
source The entity to clone from.
target The entity to clone to.
Definition at line 556 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::forEachComponentTypeId, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::has, helios::ecs::ComponentOpsRegistry< THandle >::ops and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw.
create()
| inline |
Creates a new entity.
Delegates to the underlying EntityRegistry to allocate a new handle.
- Returns
A valid EntityHandle for the newly created entity.
- See Also
Definition at line 134 of file EntityManager.ixx.
destroy()
| inline |
Destroys an entity and invalidates its handle.
Increments the entity's version in the registry, making all existing handles to this entity stale. Does automatically remove its components from storage.
- Parameters
-
handle The handle of the entity to destroy.
- Returns
true if the entity was destroyed, false if already invalid.
Definition at line 171 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle, helios::ecs::types::ComponentOps::onRemove, helios::ecs::ComponentOpsRegistry< THandle >::ops and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw.
emplace()
| inline |
Constructs and attaches a component to an entity.
If the component type has not been registered yet, a new SparseSet is created. The component is constructed in-place with the provided arguments. Returns nullptr if the component already exists or if the handle was invalid.
- Template Parameters
-
T The component type to emplace.
Args Constructor argument types.
- Parameters
-
handle The entity to attach the component to.
args Arguments forwarded to the component constructor.
- Returns
Pointer to the newly created component, or nullptr if the handle is invalid.
Definition at line 350 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::sparseSet.
emplaceOrGet()
| inline |
Returns existing component or creates a new one.
- Template Parameters
-
T The component type.
Args Constructor argument types.
- Parameters
-
handle The entity.
args Arguments forwarded to the constructor if creating.
- Returns
Pointer to the existing or newly created component, or nullptr if the handle is invalid.
Definition at line 382 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw.
ensureSparseSet()
| inline |
Ensures that a SparseSet for TComponent exists, creating it if necessary.
Resizes the component storage vector and allocates a new SparseSet when the type has not been seen before. Safe to call multiple times.
- Template Parameters
-
TComponent Component type whose storage should be guaranteed.
- Returns
Non-owning pointer to the (potentially newly created) SparseSet.
Definition at line 317 of file EntityManager.ixx.
forEachComponentTypeId()
| inline |
Invokes func for every component type ID attached to an entity.
Iterates over all allocated component slots and calls func(ComponentTypeId) for each type whose SparseSet contains the given entity. Does nothing if the handle is invalid.
- Template Parameters
-
TFunc Callable with signature void(ComponentTypeId_type).
- Parameters
-
handle The entity to query.
func Callback invoked for each attached component type.
Definition at line 534 of file EntityManager.ixx.
Reference helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle.
Referenced by helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::clone.
get()
| inline |
Retrieves a component for the given entity.
- Template Parameters
-
T The component type to retrieve.
- Parameters
-
handle The entity whose component to retrieve.
- Returns
Pointer to the component, or nullptr if the entity is invalid or does not have the requested component.
Definition at line 208 of file EntityManager.ixx.
References helios::ecs::SparseSet< T >::get, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::sparseSet.
handle()
| inline |
Reconstructs an EntityHandle from an EntityId.
- Parameters
-
entityId The entity ID.
- Returns
EntityHandle with current version from the registry.
Definition at line 601 of file EntityManager.ixx.
Referenced by helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::destroy, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::emplace, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::emplaceOrGet, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::forEachComponentTypeId, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::get, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::has, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::has, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::isValid, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::isValid, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::remove.
has()
| inline |
Checks whether an entity has a specific component.
- Template Parameters
-
T The component type to check for.
- Parameters
-
handle The entity to query.
- Returns
true if the entity has the component, false if the handle is invalid or the component is not attached.
Definition at line 270 of file EntityManager.ixx.
Reference helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle.
Referenced by helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::clone and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw.
has()
| inline |
Checks whether an entity has a component by type ID.
- Parameters
-
handle The entity to query.
typeId The component type identifier.
- Returns
true if the entity has the component, false otherwise.
Definition at line 292 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle and helios::ecs::types::ComponentTypeId< THandle >::value.
isValid()
| inline noexcept |
Checks if an entity handle is valid.
- Parameters
-
handle The handle to validate.
- Returns
true if the handle refers to a living entity.
Definition at line 145 of file EntityManager.ixx.
Reference helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle.
isValid()
| inline noexcept |
Checks if an entity ID is valid.
- Parameters
-
entityId The entity ID to validate.
- Returns
true if the entity ID refers to a living entity.
Definition at line 156 of file EntityManager.ixx.
Reference helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle.
managesDirty()
| inline |
Returns true if the specified ComponentType is managed by this EntityManager.
- Template Parameters
-
TComponent The component to check.
- Returns
true if this component is managed by this Entitymanager.
Definition at line 443 of file EntityManager.ixx.
raw()
| inline |
Returns raw void pointer to a component.
- Parameters
-
handle The entity.
typeId The component type identifier.
- Returns
Raw pointer to the component, or nullptr if not found.
Definition at line 586 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::has and helios::ecs::types::ComponentTypeId< THandle >::value.
Referenced by helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::clone, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::destroy, helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::emplaceOrGet and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::remove.
remove()
| inline |
Removes a specific component from an entity.
Unlike destroy(), this only removes a single component type while keeping the entity and other components intact.
- Template Parameters
-
T The component type to remove.
- Parameters
-
handle The entity whose component to remove.
- Returns
true if the component was removed, false if the handle was invalid, the component was not attached, or removal was blocked by onRemove.
- See Also
- See Also
Definition at line 415 of file EntityManager.ixx.
References helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::handle, helios::ecs::ComponentOpsRegistry< THandle >::ops and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::raw.
sparseSet()
| inline |
Returns the SparseSet for a component type.
- Template Parameters
-
T The component type.
- Returns
Pointer to the SparseSet, or nullptr if the type has no storage.
Definition at line 229 of file EntityManager.ixx.
Referenced by helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::emplace and helios::ecs::EntityManager< THandle, TEntityRegistry, TCapacity >::get.
sparseSet()
| inline |
Returns the SparseSet for a component type (const).
- Template Parameters
-
T The component type.
- Returns
Const pointer to the SparseSet, or nullptr if the type has no storage.
Definition at line 248 of file EntityManager.ixx.
trackDirty()
| inline |
Tracks this ComponentType with DirtyComponentSpec.
- Template Parameters
-
TComponent The Component-type to track.
- See Also
Definition at line 458 of file EntityManager.ixx.
Private Member Attributes
capacity_
|
Initial capacity for the underlying sparse sets.
Definition at line 626 of file EntityManager.ixx.
components_
|
Component storage indexed by type ID.
Definition at line 616 of file EntityManager.ixx.
registeredDirtySets_
|
Type IDs of all dirty sets registered via trackDirty(), used by clearAllDirtySets().
Definition at line 608 of file EntityManager.ixx.
registry_
|
Entity registry owned by this EntityManager.
Definition at line 621 of file EntityManager.ixx.
The documentation for this class was generated from the following file:
Generated via doxygen2docusaurus 2.0.0 by Doxygen 1.9.8.