The ginormous engine rewrite has been underway from the LD31 experience. Currently, my ECS is going by the name “Flux,” a name that is meant to reference the transformative nature of game objects and ECS in general.
As part of getting things in order, I’ve added two of my own object types into my engine. Beyond the traditional entities, systems, components, and (for some implementations) nodes, I’ve got these two:
- Hub: Hubs are for managing game flow, namely ordering system execution. You could call them system-management systems, perhaps. Basically, I group systems together based on function and order of execution and the hub is responsible for running updates on all the systems under its responsibility. Hubs can also contain logic to dictate which systems run and which don’t on a particular pass.
- Role: Roles are for expanding entities. When you make a new role object and give it an entity (id,) the role will initialize (empty) components and assign them to the entity’s component map. The role itself is an object, so after automating standard component dirty work, they retain local references to the components they just initialized so the calling code can actually assign data. They can also switch targets and consequently initialize and assign fresh sets of components to multiple entities. Finally, they provide a great way to group components that are associated by a common functionality.
I went through an iteration or two of “new types”, but these are what have emerged. So far, I think they help out general structure without convoluting the paradigm too hard.
Things are still early though. My plan is to do something simple like a checkers game to test things out and see how it goes. It shouldn’t be too involved and it’ll give me a good opportunity to keep refining the engine design as it needs it. I’ve started logging my programming time too, so I can get a grip on a more disciplined programming schedule. So things are moving!
Thanks for reading!