Instead, I took cue from Juliean and took a look at Alec Thomas's EntityX system, and then at Richard Lord's Ash. After pondering these over a bit, I threw out what I had and started again.
I now have:
- Components: Purely data
- GameObjects: A simple entity which "holds" components
- Systems: Things which manage collections of Components or game objects
- Messages: The way systems communicate
I'm looking at adding in a "View" or "Node" system to let systems manage "Nodes", or groups of components. Ash has this concept, and it's quite interesting. It allows your system to say "subscribe me to objects with component A, B and D" without having to look them up.
Anyway, now I picked up an old project idea and started to run with the new system to see how it worked, any I'm quite happy.
I like using code names for projects. Mostly because I don't have to think of a game name on the spot - my latest project is called Ocyphaps. It's based on an old Amiga classic with trappings and inspirations from Terraria.