On Friday, 11 October 2013 at 19:50:42 UTC, Kiith-Sa wrote:
A component-entity architecture has two main advantages;
one of them is efficiency/cache locality (which this project
doesn't have at all). Another is the ability to quickly define
new types without the clusterfuck that happens if you try to
use OOP to design game entities (and also to define them in
plain data types).
This thing is ported from Java where performance didn't seem to
be a concern (even though they're calling it 'lightweight' for
some reason). There are even component-entity frameworks for
Ruby, Actionscript, etc, where there is no way at all to
utilize cache locality.
I think this might be useful if you're creating a game that
doesn't need the best graphics and when a little latency isn't
a problem (e.g. turn-based strategy, adventure, etc.).
(I'm not the developer of artemisd, but I'm working on a
similar design, although with a bit more compile time,
cache-aware and hopefully auto-threadable; but also much less
flexible, more 'purist' (not likely to be released as a
separate library, either))
The second advantage is far more important IMO, I've been using
Unity3D for my work for several years and I think its component
based design play a significant role to its success
technically,(refer to its assets store, so many third party
components developed and can be easily reused).
OTOH, given its C#/Mono nature, performance is not that important
in reality in an app layer which an entity system is supposed to
reside in. However, as a C programmer I also cann't ignore it if
there be any performance loss by design.