{"id":112,"date":"2013-05-19T14:13:43","date_gmt":"2013-05-19T07:13:43","guid":{"rendered":"http:\/\/lhkbob.com\/blog\/?p=112"},"modified":"2013-05-19T14:13:43","modified_gmt":"2013-05-19T07:13:43","slug":"entreri-1-7-released","status":"publish","type":"post","link":"https:\/\/lhkbob.com\/blog\/entreri-1-7-released\/","title":{"rendered":"Entreri 1.7 Released"},"content":{"rendered":"<p>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. \u00a0Much of its codebase has been simplified and better segregated. \u00a0The primary classes: Entity, Component, and EntitySystem are now interfaces. \u00a0And maybe this wasn&#8217;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.<\/p>\n<p>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. \u00a0This separation has been done away with. \u00a0By 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.<\/p>\n<p>That&#8217;s it. \u00a0It&#8217;s basically as easy as defining your data model for the component type and you barely have to worry about the implementation details. \u00a0Of course, I tried to put in customization options so it&#8217;s still possible to write your own property implementations and configure a mapping so they&#8217;re picked up by the annotation processor. \u00a0Attribute annotations are still fully supported, and now because the type definitions are even simpler they stand out as a useful documentation element as well.<\/p>\n<p>It will be hitting Maven Central shortly, and it the <a href=\"https:\/\/bitbucket.org\/mludwig\/entreri\">Bitbucket<\/a> codebase is all up-to-date so check it out.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[5],"tags":[10],"_links":{"self":[{"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/posts\/112"}],"collection":[{"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/comments?post=112"}],"version-history":[{"count":1,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions"}],"predecessor-version":[{"id":113,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/posts\/112\/revisions\/113"}],"wp:attachment":[{"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/media?parent=112"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/categories?post=112"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lhkbob.com\/blog\/wp-json\/wp\/v2\/tags?post=112"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}