I seem to pick the end of semesters to be the most productive on my personal projects; it must be something to do about avoiding actual studying. The exciting news is that Entreri, my entity-component framework, has had some significant improvements and revisions. Much of its codebase has been simplified and better segregated. The primary classes: Entity, Component, and EntitySystem are now interfaces. And maybe this wasn’t a big deal to the few people who use it, but it always bothered me, but now IndexedDataStore is gone and Property implementations are more consolidated.
However, the biggest change of all is how component types are defined. In previous versions, there were two classes that represented components: Component, which was final and encoded only the identity and type; and then ComponentData, which defined the properties within a component type and was used to create flyweight instances. This separation has been done away with. By using annotation processors, all you need to do is create a sub-interface declaring the getter and setter methods for a property and everything else is done for you.
That’s it. It’s basically as easy as defining your data model for the component type and you barely have to worry about the implementation details. Of course, I tried to put in customization options so it’s still possible to write your own property implementations and configure a mapping so they’re picked up by the annotation processor. Attribute annotations are still fully supported, and now because the type definitions are even simpler they stand out as a useful documentation element as well.
It will be hitting Maven Central shortly, and it the Bitbucket codebase is all up-to-date so check it out.