you are viewing a single comment's thread.

view the rest of the comments →

[–]jamiltron@jamiltron 0 points1 point


You still haven't made a good case for WHY you need this level of flexibility.

This is getting into two separate arguments. The first being "defining entities as a class peppered with component-like traits is not an Entity Component System", the second is "Why use an entity component system?" I'd be willing to argue the later, but not wanting to get sidetracked I will just say that the original T-Machine articles pitch a better sale than I could.

Every real ECS you look at, in a shipped game, is less flexible than this.

You're going to need a citation for this. Maybe for AAA this may be the case (I really do not know), but I can think off the top of my head of small and mobile games that use ECS that provide this level of support. Take for example, Artemis, which provides this. I am also fairly certain (but not 100% confident) many of the popular Flash ECSs like Ash provide this flexibility.

It super easy to query on aspects in non brain damaged languages.... entity match { case c: Collidable => }

You're confusing components for aspects. Aspects aren't an individual column, an aspect is a query. How can you easily and efficiently extend this method of pattern matching to encompass the aspect of Foo and Bar but not Baz, associating all relevant entities with the system acting on this aspect?

You are over thinking things. A entity system for games does not need to be this dynamic or crazy flexible. Its too damn slow.

You're going to need to cite some data here. How is it too damn slow? Too damn slow for what?

Otherwise "Compile time ECS" would suffice in a very large number of cases.

I'm not saying your solution isn't a good one for game development. What I am saying is that it is not an ECS, because and ECS defines entities as being an identifier, not a class with traits sprinkled in. My argument is that once you begin to do this, you are pretty much resigned to having your systems operate via static associations, rather than a relational query.