Implementations
From Component Based Objects
Contents |
Summary of implementation descriptions
Hinge3d (Felix 'mirlix' Kerger)
The object-component design of Hinge3d is based on a flexible hierarchy where every object is also a component which can be added to other objects. It features messaging as well as a property map for communication between components. It's designed with extreme flexibility as main interest.
tp's design
tp's implementation is based heavily on scripting with Lua. Entities and components are created in separate script files and are derived from base c++ classes. Communication is mainly done with scripted events. The script based system allows very flexible component creation and communication, but also intuitive code.
OddEngine (Fredrik Johansson)
OddEngine's system is built around a GameObject class and a base Component class. The entire system is script accessible via Lua and LuaBind. Core components are defined in C++ but any type of ScriptComponent can be created in lua-script or even at runtime. Communication is done with messages and Boost signals. The aim is to have the ability to tune in flexibility and speed, by relying more or less on scripts.
OpenDarkEngine (Volca)
The object system copies already implemented system Looking Glass Studios used in the Dark Engine based games (Thief I/II and System Shock 2).
Open Game Engine (Steven 'lazalong' Gay)
The first version of OGE was designed with a simple Object/Component design:
However a refactoring was done recently which removed the Object class completely. Only Components exist who are identified by an ObjectId. The OGE team believe that this design is better suited for multi-threading and databases. It also makes the code simpler and less error prone (no pointers necessary in an Object class) this also permits an easier serialisation. The documentation on the OGE wiki was not yet updated.
ProjetUnivers (Mathieu 'Rogma' Roger)
This is basically a MVC architecture on a component object model. Objects form a hierarchy. Components are attached to objects. Views are used to "display" (3D, sound,...). Controlers are kind of views that modifies the model (Physics, AI). Communication is performed between model and views/controlers by an obsever pattern. Because controlers can modify the model (create new objects, adding/removing components) they trigger other views/controlers notification through observer. Components may be grouped together through usage of logical formulaes (e.g., Component PhysicalObject is equivalent to Positionned and Oriented and Massive and Mobile).
