xyginext  0.2.0
Second generation of xygine game creation framework
Public Types | Public Member Functions | Protected Member Functions | Friends | List of all members
xy::System Class Reference

Base class for systems. Systems should all derive from this base class, and instanciated before any entities are created. Concrete system types should declare a list component types via requireComponent() on construction, so that only entities with the relevant components are added to the system. More...

#include <System.hpp>

Inheritance diagram for xy::System:
xy::AudioSystem xy::BitmapTextSystem xy::CallbackSystem xy::CameraSystem xy::CommandSystem xy::DynamicTreeSystem xy::ParticleSystem xy::QuadTree xy::RenderSystem xy::SpriteAnimator xy::SpriteSystem xy::TextRenderer xy::TextSystem xy::UISystem

Public Types

using Ptr = std::unique_ptr< System >
 

Public Member Functions

 System (MessageBus &mb, UniqueType t)
 Constructor. Pass in a reference to the concrete implementation to generate a unique type ID for this system.
 
UniqueType getType () const
 Returns the unique type ID of the system.
 
const std::vector< Entity > & getEntities () const
 Returns a list of entities that this system is currently interested in.
 
void addEntity (Entity)
 Adds an entity to the list to process.
 
void removeEntity (Entity)
 Removes an entity from the list to process.
 
const ComponentMask & getComponentMask () const
 Returns the component mask used to mask entities with corresponding components for this system to process.
 
virtual void handleMessage (const Message &)
 Used to process any incoming system messages.
 
virtual void process (float)
 Implement this for system specific processing to entities.
 
bool isActive () const
 Returns true if the system is currently active. Systems can be activeated and deactivated with Scene::setSystemActive()
 
template<typename T >
void requireComponent ()
 
template<typename T >
T * postMessage (Message::ID id)
 

Protected Member Functions

template<typename T >
void requireComponent ()
 Adds a component type to the list of components required by the system for it to be interested in a particular entity. This should only be used in the constructor of the System else types will not be registered.
 
std::vector< Entity > & getEntities ()
 
virtual void onEntityAdded (Entity)
 Optional callback performed when an entity is added.
 
virtual void onEntityRemoved (Entity)
 Optional callback performed when an entity is removed.
 
template<typename T >
T * postMessage (Message::ID id)
 Posts a message on the system wide message bus.
 
MessageBusgetMessageBus ()
 Returns a reference to the MessageBus.
 
void setScene (Scene &)
 
ScenegetScene ()
 Returns a pointer to the scene to which this system belongs.
 

Friends

class SystemManager
 

Detailed Description

Base class for systems. Systems should all derive from this base class, and instanciated before any entities are created. Concrete system types should declare a list component types via requireComponent() on construction, so that only entities with the relevant components are added to the system.