PERRY v1.0.0
P-E-R-R-Y/PERRY helps creating games with a bunch of tools.
Loading...
Searching...
No Matches
Ecs

Namespaces

namespace  ecs
 Entity Component System.
 

Classes

class  ecs::Entity
 Entity class from ECS. More...
 
class  ecs::Registry
 define the Registry class More...
 
struct  ecs::Registry::is_tuple< T >
 
struct  ecs::Registry::is_tuple< std::tuple< Args... > >
 
class  ecs::SparseArray< Component >
 SparseArray class. More...
 
class  ecs::System
 System class. More...
 
class  Component
 Component is a template define in Registry. (not a class) More...
 

Typedefs

using ecs::RegistryRef = Registry &
 
using ecs::SparseArray< Component >::value_type = std::optional<Component>
 
using ecs::SparseArray< Component >::reference_type = value_type &
 
using ecs::SparseArray< Component >::const_reference_type = value_type const &
 
using ecs::SparseArray< Component >::container_t = std::vector<value_type>
 
using ecs::SparseArray< Component >::size_type = typename container_t::size_type
 
using ecs::SparseArray< Component >::iterator = typename container_t::iterator
 
using ecs::SparseArray< Component >::const_iterator = typename container_t::const_iterator
 

Functions

 ecs::Entity::Entity ()=delete
 Deleted default constructor, use Registry::createEntity() instead.
 
 ecs::Entity::~Entity ()=default
 Destroy the Entity object.
 
template<class Component>
void ecs::Entity::addComponent (Component &&c)
 add a component to the entity using the registryRef method addComponent
 
template<class Component>
void ecs::Entity::removeComponent ()
 remove a component from the entity using the registryRef method removeComponent
 
 ecs::Entity::Entity (size_t idx, RegistryRef ecs)
 Construct a new Entity object with the given index and registry reference.
 
Entity ecs::Registry::createEntity ()
 handling entities (define in Registry.cpp)
 
Entity ecs::Registry::entityFromIndex (std::size_t idx)
 Create a Entity object from an index.
 
void ecs::Registry::killEntity (Entity const &e)
 Kill the given entity.
 
template<class Component>
SparseArray< Component > & ecs::Registry::registerComponent ()
 handling components (define in Registry_impl.hpp)
 
template<class ... Components>
void ecs::Registry::registerComponents ()
 register a list of components
 
template<class Tuple>
void ecs::Registry::registerComponentsByExtraction ()
 register every components by extraction from a tuple
 
template<class Component>
SparseArray< Component > & ecs::Registry::getComponents ()
 get components of a given type
 
template<class Component>
const SparseArray< Component > & ecs::Registry::getComponents () const
 get immutable components of a given type
 
template<typename Component>
SparseArray< Component >::reference_type ecs::Registry::addComponent (Entity const &to, Component &&c)
 
template<typename Component, typename ... Params>
SparseArray< Component >::reference_type ecs::Registry::emplaceComponent (Entity const &to, Params &&... p)
 emplace a component to the given entity
 
template<typename Component>
void ecs::Registry::removeComponent (Entity const &from)
 remove a component from the given entity
 
template<typename T, typename... Args>
size_t ecs::Registry::addSystem (Args &&... args)
 handling systems
 
template<typename T>
size_t ecs::Registry::addSystem (std::unique_ptr< T > existingSystem)
 add a system to the registry
 
template<typename T>
void ecs::Registry::removeSystem ()
 remove a system from the registry
 
template<typename T>
void ecs::Registry::callSystem ()
 call a system
 
void ecs::Registry::callSystems ()
 call all systems
 
template<typename Component>
std::ostream & ecs::operator<< (std::ostream &os, std::optional< Component > const &c)
 help to print the optional value
 
 ecs::SparseArray< Component >::SparseArray ()=default
 construct a new SparseArray object
 
 ecs::SparseArray< Component >::SparseArray (SparseArray const &)=default
 copy constructor
 
 ecs::SparseArray< Component >::SparseArray (SparseArray &&) noexcept=default
 move constructor
 
 ecs::SparseArray< Component >::~SparseArray ()=default
 Destroy the Sparse Array object.
 
SparseArrayecs::SparseArray< Component >::operator= (SparseArray const &)=default
 copy operator=
 
SparseArrayecs::SparseArray< Component >::operator= (SparseArray &&) noexcept=default
 move operator=
 
reference_type ecs::SparseArray< Component >::operator[] (size_t idx)
 give the value at the index idx of the SparseArray
 
const_reference_type ecs::SparseArray< Component >::operator[] (size_t idx) const
 give the value at the index idx of the SparseArray (const)
 
iterator ecs::SparseArray< Component >::begin ()
 give a iterator at the begining of the SparseArray
 
const_iterator ecs::SparseArray< Component >::begin () const
 give a const_iterator at the begining of the SparseArray
 
const_iterator ecs::SparseArray< Component >::cbegin () const
 give a const_iterator at the begining of the SparseArray
 
iterator ecs::SparseArray< Component >::end ()
 give a iterator at the end of the SparseArray
 
const_iterator ecs::SparseArray< Component >::end () const
 give a const_iterator at the end of the SparseArray
 
const_iterator ecs::SparseArray< Component >::cend () const
 give a const_iterator at the end of the SparseArray
 
size_type ecs::SparseArray< Component >::size () const
 give the size of the SparseArray
 
reference_type ecs::SparseArray< Component >::insertAt (size_type pos, Component const &c)
 insert a component at the given position & return a reference to it
 
reference_type ecs::SparseArray< Component >::insertAt (size_type pos, Component &&c)
 insert a component at the given position & return a reference to it
 
template<class ... Params>
reference_type ecs::SparseArray< Component >::emplaceAt (size_type pos, Params &&...args)
 emplace a component at the given position & return a reference to it
 
void ecs::SparseArray< Component >::erase (size_type pos)
 erase the component at the given position
 
size_type ecs::SparseArray< Component >::getIndex (const value_type &v) const
 get the index of the given value
 
void ecs::SparseArray< Component >::print () const
 print the SparseArray
 
virtual void ecs::System::lambda (Registry &)=0
 

Variables

friend ecs::Entity::Registry
 
size_t ecs::Entity::_idx
 
RegistryRef ecs::Entity::_ecs
 
size_t ecs::Registry::_entitiesCount = 0
 
std::vector< Entityecs::Registry::killedEntities
 
std::unordered_map< std::type_index, std::any > ecs::Registry::componentsArrays
 
std::unordered_map< std::type_index, std::any > ecs::Registry::systemsArrays
 
std::vector< std::function< void(Registry &, Entity const &)> > ecs::Registry::componentsRemoves
 
std::unordered_map< std::type_index, std::unique_ptr< System > > ecs::Registry::systems
 
container_t ecs::SparseArray< Component >::_data
 

Detailed Description

Function Documentation

◆ addComponent() [1/2]

template<class Component>
void ecs::Entity::addComponent ( Component && c)

add a component to the entity using the registryRef method addComponent

Template Parameters
Component
Parameters
c

◆ addComponent() [2/2]

template<typename Component>
SparseArray< Component >::reference_type ecs::Registry::addComponent ( Entity const & to,
Component && c )
Template Parameters
adda component to the given entity
Parameters
to
c
Returns
SparseArray<Component>::reference_type

◆ addSystem() [1/2]

template<typename T, typename... Args>
size_t ecs::Registry::addSystem ( Args &&... args)

handling systems

add a system to the registry

Template Parameters
T
Args
Parameters
args
Returns
size_t

◆ addSystem() [2/2]

template<typename T>
size_t ecs::Registry::addSystem ( std::unique_ptr< T > existingSystem)

add a system to the registry

Template Parameters
T
Parameters
existingSystem
Returns
size_t

◆ begin() [1/2]

template<typename Component>
iterator ecs::SparseArray< Component >::begin ( )
inline

give a iterator at the begining of the SparseArray

Returns
iterator

◆ begin() [2/2]

template<typename Component>
const_iterator ecs::SparseArray< Component >::begin ( ) const
inline

give a const_iterator at the begining of the SparseArray

Returns
const_iterator

◆ callSystem()

template<typename T>
void ecs::Registry::callSystem ( )

call a system

Template Parameters
T

◆ cbegin()

template<typename Component>
const_iterator ecs::SparseArray< Component >::cbegin ( ) const
inline

give a const_iterator at the begining of the SparseArray

Returns
const_iterator

◆ cend()

template<typename Component>
const_iterator ecs::SparseArray< Component >::cend ( ) const
inline

give a const_iterator at the end of the SparseArray

Returns
const_iterator

◆ createEntity()

Entity Registry::createEntity ( )

handling entities (define in Registry.cpp)

handling entities

Create a Entity object

Returns
Entity

◆ emplaceAt()

template<typename Component>
template<class ... Params>
reference_type ecs::SparseArray< Component >::emplaceAt ( size_type pos,
Params &&... args )
inline

emplace a component at the given position & return a reference to it

Template Parameters
Params
Parameters
pos
args
Returns
reference_type

◆ emplaceComponent()

template<typename Component, typename ... Params>
SparseArray< Component >::reference_type ecs::Registry::emplaceComponent ( Entity const & to,
Params &&... p )

emplace a component to the given entity

Template Parameters
Component
Params
Parameters
to
p
Returns
SparseArray <Component>::reference_type

◆ end() [1/2]

template<typename Component>
iterator ecs::SparseArray< Component >::end ( )
inline

give a iterator at the end of the SparseArray

Returns
iterator

◆ end() [2/2]

template<typename Component>
const_iterator ecs::SparseArray< Component >::end ( ) const
inline

give a const_iterator at the end of the SparseArray

Returns
const_iterator

◆ Entity()

ecs::Entity::Entity ( size_t idx,
RegistryRef ecs )
explicitprivate

Construct a new Entity object with the given index and registry reference.

Parameters
idx
ecs

◆ entityFromIndex()

Entity Registry::entityFromIndex ( std::size_t idx)

Create a Entity object from an index.

Parameters
idx
Returns
Entity

◆ erase()

template<typename Component>
void ecs::SparseArray< Component >::erase ( size_type pos)
inline

erase the component at the given position

Parameters
pos

◆ getComponents() [1/2]

template<class Component>
SparseArray< Component > & ecs::Registry::getComponents ( )

get components of a given type

Template Parameters
Component
Returns
SparseArray<Component>&

◆ getComponents() [2/2]

template<class Component>
const SparseArray< Component > & ecs::Registry::getComponents ( ) const

get immutable components of a given type

Template Parameters
Component
Returns
const SparseArray<Component>&

◆ getIndex()

template<typename Component>
size_type ecs::SparseArray< Component >::getIndex ( const value_type & v) const
inline

get the index of the given value

Parameters
v
Returns
size_type

◆ insertAt() [1/2]

template<typename Component>
reference_type ecs::SparseArray< Component >::insertAt ( size_type pos,
Component && c )
inline

insert a component at the given position & return a reference to it

Parameters
pos
c
Returns
reference_type

◆ insertAt() [2/2]

template<typename Component>
reference_type ecs::SparseArray< Component >::insertAt ( size_type pos,
Component const & c )
inline

insert a component at the given position & return a reference to it

Parameters
pos
c
Returns
reference_type

◆ killEntity()

void Registry::killEntity ( Entity const & e)

Kill the given entity.

Parameters
e

◆ operator<<()

template<typename Component>
std::ostream & ecs::operator<< ( std::ostream & os,
std::optional< Component > const & c )

help to print the optional value

Template Parameters
Component
Parameters
os
c
Returns
std::ostream&

◆ operator=() [1/2]

template<typename Component>
SparseArray & ecs::SparseArray< Component >::operator= ( SparseArray< Component > && )
defaultnoexcept

move operator=

Parameters
other
Returns
SparseArray&

◆ operator=() [2/2]

template<typename Component>
SparseArray & ecs::SparseArray< Component >::operator= ( SparseArray< Component > const & )
default

copy operator=

Parameters
other
Returns
SparseArray&

◆ operator[]() [1/2]

template<typename Component>
reference_type ecs::SparseArray< Component >::operator[] ( size_t idx)
inline

give the value at the index idx of the SparseArray

Parameters
idx
Returns
reference_type

◆ operator[]() [2/2]

template<typename Component>
const_reference_type ecs::SparseArray< Component >::operator[] ( size_t idx) const
inline

give the value at the index idx of the SparseArray (const)

Parameters
idx
Returns
const_reference_type

◆ registerComponent()

template<class Component>
SparseArray< Component > & ecs::Registry::registerComponent ( )

handling components (define in Registry_impl.hpp)

register a component

Template Parameters
Component
Returns
SparseArray<Component>&

◆ registerComponents()

template<class ... Components>
void ecs::Registry::registerComponents ( )

register a list of components

Template Parameters
Components

◆ registerComponentsByExtraction()

template<class Tuple>
void ecs::Registry::registerComponentsByExtraction ( )

register every components by extraction from a tuple

Template Parameters
Tuple

◆ removeComponent() [1/2]

template<class Component>
void ecs::Entity::removeComponent ( )

remove a component from the entity using the registryRef method removeComponent

Template Parameters
Component

◆ removeComponent() [2/2]

template<typename Component>
void ecs::Registry::removeComponent ( Entity const & from)

remove a component from the given entity

Template Parameters
Component
Parameters
from

◆ removeSystem()

template<typename T>
void ecs::Registry::removeSystem ( )

remove a system from the registry

Template Parameters
T

◆ size()

template<typename Component>
size_type ecs::SparseArray< Component >::size ( ) const
inline

give the size of the SparseArray

Returns
size_type

◆ SparseArray() [1/2]

template<typename Component>
ecs::SparseArray< Component >::SparseArray ( SparseArray< Component > && )
defaultnoexcept

move constructor

Parameters
size

◆ SparseArray() [2/2]

template<typename Component>
ecs::SparseArray< Component >::SparseArray ( SparseArray< Component > const & )
default

copy constructor

Parameters
size