W4 Component System

From Ciliz|W4

Scope

The W4 framework comes with a component system. A component in this case is the ability to extend the functionality of an object without inheritance.

System features:

  • All components inherit from the base IComponent class.
  • Each component has a unique identifier for its type, by which the component can always be obtained from the container.
  • The container for components is the Node class (see W4 Coordinate system and Node structure).
  • A global list of components is maintained, allowing access to all components of a certain type from anywhere in the application.

IComponent class

Let's consider the main methods of the IComponent public interface:

  • const Id& id() const; - this method allows you to get the id of the component;
  • void enable(bool isEnabled); - enable/disable component. Using this method, you can temporarily disable the functionality of the component and avoid construction and destruction (save the component internal state). A disabled component disappears from the global list of components and the update() method is no longer called for it;
  • bool isEnabled() const; - this method lets you know if the component is enabled;
  • template<typename T> T& as(); - this method casts the pointer/reference to the base component to the component of the desired type;
  • ::w4::core::Node & getOwner(); - this method allows you to get the owner of the given component (the container in which it is contained);
  • const core::TypeInfo& getTypeInfo() const; - this method allows you to get information about the type of the component by the pointer/reference to the base component;

This class has methods that are not recommended to be called directly (this can lead to incorrect application behavior).