Component-based entities in ICE


During the development of ICE, I made a component-based entity system similar to the design described on Adam Martin's blog. This was a massive improvement over my previous projects which used OOP-style entities. The complex inheritance-based hierarchies disappeared, and all entities were defined in data (YAML files), which made ICE very moddable.

That said, this entity system had its own issues, mostly because it was written in hurry without thinking through its high-level design.

The main problems were:

After the first (and probably last) release of ICE I started an overhaul of the entity system. Around that time, Elvis Zhou made a post

at the D forums about a D port of Artemis, an entity system framework. That made me notice existing entity systems similar to the one I used in ICE, and many of the same flaws. For example, Artemis has the same problem with dependencies of systems on the order they run, and its design does not help threading. Also, unlike ICE, its components are quite heavyweight and cache unfriendly.

None of the component based entity frameworks I've seen seems to fit my requirements (especially with regard to threading and efficiency). That's why I decided to start Tharsis, an entity framework that should hopefully address these issues.