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).