In our Thang Component System architecture, the Systems fulfill three roles.
- Systems are unto Levels as Components are unto Thangs. For example, if I want my Level to have gravity, I add the
MovementSystem and configure its gravity to 9.81 m/s^2.
- They also serve as namespaces for the Components. As an example, the
PhysicsSystem doesn't actually do anything on its own yet, but it was a good place to put
physics.PhysicalComponent, which controls the size, shape, rotation, and position of all physical Thangs.
- They can coordinate behavior across those Components. For example, the
CollisionSystem will look at all the Thangs which have the
collidesproperty set and update its Box2D-based collision simulation once per frame, instead of each Thang with a
CollidesComponent trying to figure out its own collision interactions.
You can also live-edit the code for any System directly within the Systems tab of the Level editor, just like in the Component example.
To see all the entity data for, say, the
Movement System, I can just go to http://localhost:3000/db/level_system/movement.