Cogs.Core
Classes | Public Member Functions | Private Member Functions | Private Attributes | List of all members
Cogs::Core::DynamicComponentSystem Class Reference

The dynamic component system handles instances of components derived from DynamicComponent. More...

#include <DynamicComponentSystem.h>

Inheritance diagram for Cogs::Core::DynamicComponentSystem:
Cogs::Core::ComponentSystemBase

Classes

struct  DispatchInfo
 Defines an update aware component and the method which to call during the update phase. More...
 
struct  DynamicTypeInfo
 
struct  MessageInfo
 

Public Member Functions

 DynamicComponentSystem ()
 
void initialize (Context *context) override
 Initialize the system.
 
void cleanup (Context *context) override
 Provided for custom cleanup logic in derived systems.
 
void preUpdate (Context *context) override
 Performs pre-update, initializing all newly created component instances.
 
void update (Context *context) override
 Performs update, calling update() on all dynamic components.
 
void postUpdate (Context *context) override
 Performs post-update, clearing Changed state from all dynamic components.
 
void instrumentedPreUpdate () override
 Provided for tagged engine instrumentation.
 
void instrumentedUpdate () override
 Provided for tagged engine instrumentation.
 
void instrumentedPostUpdate () override
 Provided for tagged engine instrumentation.
 
void registerType (Context *context, const Reflection::Type &type)
 
void registerType (Context *context, const StringView &name, size_t dispatchMask)
 
MessageId registerMessage (const StringView &messageName)
 
MessageId getMessageId (const StringView &messageName) const
 
void sendMessage (Entity *entity, MessageId message)
 
void sendMessage (Entity *entity, MessageId message, void *arg)
 
- Public Member Functions inherited from Cogs::Core::ComponentSystemBase
virtual ~ComponentSystemBase ()
 Provided for destruction via pointer to base.
 
 ComponentSystemBase (Reflection::TypeId componentType)
 Constructs a ComponentSystemBase to manage components of the given componentType.
 
virtual void initialize (Context *context)
 Initialize the system.
 
void preUpdate ()
 Run the pre-update method of the system.
 
void update ()
 Updates the system state to that of the current frame.
 
void postUpdate ()
 Perform post update logic in the system.
 
virtual void preUpdate (Context *)
 Provided for custom pre update logic in derived systems.
 
virtual void prepareUpdate (Context *)
 Provided for custom update preparation logic in derived systems.
 
virtual void update (Context *)
 Provided for custom update logic in derived systems.
 
virtual void postUpdate (Context *)
 Provided for custom post update logic in derived systems.
 
virtual void instrumentedPreUpdate ()
 Provided for tagged engine instrumentation.
 
virtual void instrumentedUpdate ()
 Provided for tagged engine instrumentation.
 
virtual void instrumentedPostUpdate ()
 Provided for tagged engine instrumentation.
 
virtual void addEntitiesWithComponent (std::vector< EntityId > &, Reflection::TypeId)
 Return all entities with a given.
 
virtual void cleanup (Context *)
 Provided for custom cleanup logic in derived systems.
 
virtual ComponentHandle createComponent ()
 Create a new component instance.
 
virtual void destroyComponent (ComponentHandle)
 Destroy the component held by the given handle.
 
Reflection::TypeId getComponentType () const
 Get the reflected type of the components managed by this system.
 

Private Member Functions

ComponentModel::ComponentHandle createComponent (DynamicTypeInfo *typeInfo)
 
void destroyComponent (DynamicTypeInfo *typeInfo, ComponentModel::ComponentHandle component)
 
ComponentModel::ComponentPoolBasegetPool (const Reflection::TypeId typeId)
 
virtual ComponentHandle createComponent ()
 Create a new component instance.
 
virtual void destroyComponent (ComponentHandle)
 Destroy the component held by the given handle.
 

Private Attributes

std::vector< std::vector< DispatchInfo > > messageHandlers
 
std::vector< MessageInfomessages
 
MessageId initializeMessage
 
MessageId updateMessage
 
MessageId postUpdateMessage
 
MessageId cleanupMessage
 
std::unordered_map< Reflection::TypeId, ComponentModel::ComponentPoolBase * > pools
 
std::vector< DynamicTypeInfodynamicTypes
 

Additional Inherited Members

- Public Attributes inherited from Cogs::Core::ComponentSystemBase
Reflection::TypeId componentType
 The type of components managed by this instance.
 
Contextcontext = nullptr
 Pointer to the Context instance the system lives in.
 

Detailed Description

The dynamic component system handles instances of components derived from DynamicComponent.

Creation, initialization, updating and destruction of dynamic components is performed on all registered components.

In opposition to regular ComponentSystemBase derived systems, the DynamicComponentSystem does not handle a single type of components. It instead maintains a pool of pools, one for each type of component derived from DynamicComponent, and is capable of creating instances of different component types through the calls to createComponent with the type parameter.

The behavior supported by individual components, such as being able to receive initialize() or update() calls, is automatically discovered during creation of components.

Definition at line 39 of file DynamicComponentSystem.h.

Constructor & Destructor Documentation

◆ DynamicComponentSystem()

Cogs::Core::DynamicComponentSystem::DynamicComponentSystem ( )

Constructs a dynamic component system. Since the dynamic component system has no inherent type, it constructs the base system without a type id..

Definition at line 82 of file DynamicComponentSystem.cpp.

Member Function Documentation

◆ cleanup()

void Cogs::Core::DynamicComponentSystem::cleanup ( Context )
overridevirtual

Provided for custom cleanup logic in derived systems.

Cleanup is performed during shutdown of the system, and all entities and related data should have been deleted.

All system services are available during the execution of cleanup().

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 98 of file DynamicComponentSystem.cpp.

References Cogs::Core::Context::memory.

◆ createComponent() [1/2]

virtual ComponentHandle Cogs::Core::ComponentSystemBase::createComponent ( )
inlineprivatevirtual

Create a new component instance.

Returns
A component handle referring to a component with the type given by ComponentSystemBase::componentType.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 116 of file ComponentSystem.h.

◆ createComponent() [2/2]

Cogs::ComponentModel::ComponentHandle Cogs::Core::DynamicComponentSystem::createComponent ( DynamicTypeInfo typeInfo)
private

Definition at line 245 of file DynamicComponentSystem.cpp.

◆ destroyComponent() [1/2]

virtual void Cogs::Core::ComponentSystemBase::destroyComponent ( ComponentHandle  )
inlineprivate

Destroy the component held by the given handle.

Parameters
componentHandle to an allocated component.

Definition at line 123 of file ComponentSystem.h.

◆ destroyComponent() [2/2]

void Cogs::Core::DynamicComponentSystem::destroyComponent ( DynamicTypeInfo typeInfo,
ComponentModel::ComponentHandle  component 
)
private

Definition at line 259 of file DynamicComponentSystem.cpp.

◆ getMessageId()

Cogs::Core::MessageId Cogs::Core::DynamicComponentSystem::getMessageId ( const StringView messageName) const

Definition at line 214 of file DynamicComponentSystem.cpp.

◆ getPool()

Cogs::ComponentModel::ComponentPoolBase * Cogs::Core::DynamicComponentSystem::getPool ( const Reflection::TypeId  typeId)
private

Definition at line 291 of file DynamicComponentSystem.cpp.

◆ initialize()

void Cogs::Core::DynamicComponentSystem::initialize ( Context context)
overridevirtual

Initialize the system.

Initialization is performed after all systems are created and a renderer initialized, but before the first time anything is rendered.

Parameters
contextPointer to the context the system lives in.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 93 of file DynamicComponentSystem.cpp.

References Cogs::Core::ComponentSystemBase::initialize().

◆ instrumentedPostUpdate()

void Cogs::Core::DynamicComponentSystem::instrumentedPostUpdate ( )
inlineoverridevirtual

Provided for tagged engine instrumentation.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 102 of file DynamicComponentSystem.h.

◆ instrumentedPreUpdate()

void Cogs::Core::DynamicComponentSystem::instrumentedPreUpdate ( )
inlineoverridevirtual

Provided for tagged engine instrumentation.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 88 of file DynamicComponentSystem.h.

◆ instrumentedUpdate()

void Cogs::Core::DynamicComponentSystem::instrumentedUpdate ( )
inlineoverridevirtual

Provided for tagged engine instrumentation.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 95 of file DynamicComponentSystem.h.

◆ postUpdate()

void Cogs::Core::DynamicComponentSystem::postUpdate ( Context context)
overridevirtual

Performs post-update, clearing Changed state from all dynamic components.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 117 of file DynamicComponentSystem.cpp.

References Cogs::ComponentModel::ComponentFlags::Changed.

◆ preUpdate()

void Cogs::Core::DynamicComponentSystem::preUpdate ( Context context)
overridevirtual

Performs pre-update, initializing all newly created component instances.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 105 of file DynamicComponentSystem.cpp.

◆ registerMessage()

Cogs::Core::MessageId Cogs::Core::DynamicComponentSystem::registerMessage ( const StringView messageName)

Definition at line 203 of file DynamicComponentSystem.cpp.

◆ registerType() [1/2]

void Cogs::Core::DynamicComponentSystem::registerType ( Context context,
const Reflection::Type type 
)

Definition at line 128 of file DynamicComponentSystem.cpp.

◆ registerType() [2/2]

void Cogs::Core::DynamicComponentSystem::registerType ( Context context,
const StringView name,
size_t  dispatchMask 
)

Definition at line 175 of file DynamicComponentSystem.cpp.

◆ sendMessage() [1/2]

void Cogs::Core::DynamicComponentSystem::sendMessage ( Entity entity,
MessageId  message 
)

Definition at line 223 of file DynamicComponentSystem.cpp.

◆ sendMessage() [2/2]

void Cogs::Core::DynamicComponentSystem::sendMessage ( Entity entity,
MessageId  message,
void *  arg 
)

Definition at line 228 of file DynamicComponentSystem.cpp.

◆ update()

void Cogs::Core::DynamicComponentSystem::update ( Context context)
overridevirtual

Performs update, calling update() on all dynamic components.

Reimplemented from Cogs::Core::ComponentSystemBase.

Definition at line 112 of file DynamicComponentSystem.cpp.

Member Data Documentation

◆ cleanupMessage

MessageId Cogs::Core::DynamicComponentSystem::cleanupMessage
private

Definition at line 133 of file DynamicComponentSystem.h.

◆ dynamicTypes

std::vector<DynamicTypeInfo> Cogs::Core::DynamicComponentSystem::dynamicTypes
private

Definition at line 137 of file DynamicComponentSystem.h.

◆ initializeMessage

MessageId Cogs::Core::DynamicComponentSystem::initializeMessage
private

Definition at line 130 of file DynamicComponentSystem.h.

◆ messageHandlers

std::vector<std::vector<DispatchInfo> > Cogs::Core::DynamicComponentSystem::messageHandlers
private

Definition at line 127 of file DynamicComponentSystem.h.

◆ messages

std::vector<MessageInfo> Cogs::Core::DynamicComponentSystem::messages
private

Definition at line 128 of file DynamicComponentSystem.h.

◆ pools

std::unordered_map<Reflection::TypeId, ComponentModel::ComponentPoolBase *> Cogs::Core::DynamicComponentSystem::pools
private

Definition at line 135 of file DynamicComponentSystem.h.

◆ postUpdateMessage

MessageId Cogs::Core::DynamicComponentSystem::postUpdateMessage
private

Definition at line 132 of file DynamicComponentSystem.h.

◆ updateMessage

MessageId Cogs::Core::DynamicComponentSystem::updateMessage
private

Definition at line 131 of file DynamicComponentSystem.h.


The documentation for this class was generated from the following files: