Cogs.Core
|
The dynamic component system handles instances of components derived from DynamicComponent. More...
#include <DynamicComponentSystem.h>
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) |
![]() | |
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::ComponentPoolBase * | getPool (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< MessageInfo > | messages |
MessageId | initializeMessage |
MessageId | updateMessage |
MessageId | postUpdateMessage |
MessageId | cleanupMessage |
std::unordered_map< Reflection::TypeId, ComponentModel::ComponentPoolBase * > | pools |
std::vector< DynamicTypeInfo > | dynamicTypes |
Additional Inherited Members | |
![]() | |
Reflection::TypeId | componentType |
The type of components managed by this instance. | |
Context * | context = nullptr |
Pointer to the Context instance the system lives in. | |
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.
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.
|
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.
|
inlineprivatevirtual |
Create a new component instance.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 116 of file ComponentSystem.h.
|
private |
Definition at line 245 of file DynamicComponentSystem.cpp.
|
inlineprivate |
Destroy the component held by the given handle.
component | Handle to an allocated component. |
Definition at line 123 of file ComponentSystem.h.
|
private |
Definition at line 259 of file DynamicComponentSystem.cpp.
Cogs::Core::MessageId Cogs::Core::DynamicComponentSystem::getMessageId | ( | const StringView & | messageName | ) | const |
Definition at line 214 of file DynamicComponentSystem.cpp.
|
private |
Definition at line 291 of file DynamicComponentSystem.cpp.
|
overridevirtual |
Initialize the system.
Initialization is performed after all systems are created and a renderer initialized, but before the first time anything is rendered.
context | Pointer 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().
|
inlineoverridevirtual |
Provided for tagged engine instrumentation.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 102 of file DynamicComponentSystem.h.
|
inlineoverridevirtual |
Provided for tagged engine instrumentation.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 88 of file DynamicComponentSystem.h.
|
inlineoverridevirtual |
Provided for tagged engine instrumentation.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 95 of file DynamicComponentSystem.h.
|
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.
|
overridevirtual |
Performs pre-update, initializing all newly created component instances.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 105 of file DynamicComponentSystem.cpp.
Cogs::Core::MessageId Cogs::Core::DynamicComponentSystem::registerMessage | ( | const StringView & | messageName | ) |
Definition at line 203 of file DynamicComponentSystem.cpp.
void Cogs::Core::DynamicComponentSystem::registerType | ( | Context * | context, |
const Reflection::Type & | type | ||
) |
Definition at line 128 of file DynamicComponentSystem.cpp.
void Cogs::Core::DynamicComponentSystem::registerType | ( | Context * | context, |
const StringView & | name, | ||
size_t | dispatchMask | ||
) |
Definition at line 175 of file DynamicComponentSystem.cpp.
void Cogs::Core::DynamicComponentSystem::sendMessage | ( | Entity * | entity, |
MessageId | message | ||
) |
Definition at line 223 of file DynamicComponentSystem.cpp.
void Cogs::Core::DynamicComponentSystem::sendMessage | ( | Entity * | entity, |
MessageId | message, | ||
void * | arg | ||
) |
Definition at line 228 of file DynamicComponentSystem.cpp.
|
overridevirtual |
Performs update, calling update() on all dynamic components.
Reimplemented from Cogs::Core::ComponentSystemBase.
Definition at line 112 of file DynamicComponentSystem.cpp.
|
private |
Definition at line 133 of file DynamicComponentSystem.h.
|
private |
Definition at line 137 of file DynamicComponentSystem.h.
|
private |
Definition at line 130 of file DynamicComponentSystem.h.
|
private |
Definition at line 127 of file DynamicComponentSystem.h.
|
private |
Definition at line 128 of file DynamicComponentSystem.h.
|
private |
Definition at line 135 of file DynamicComponentSystem.h.
|
private |
Definition at line 132 of file DynamicComponentSystem.h.
|
private |
Definition at line 131 of file DynamicComponentSystem.h.