I originally created Artemis Entity Component System Framework for java many years ago. It's been ported to dozens of languages.
Your basic work and code seems all too familiar, with same concepts as I specified, same architecture, but with different naming, but identical structure and convention.
I released it so anyone could use it and evolve, but under the condition that the original author and license be included, but I see no such reference here.
Even Adam Martin (considered the author of ECS paradigm) ported my original framework into Objective-C:
https://github.com/adamgit/ArtemisObjC
Most of my work was done in 2011-2012, as seen in Google's archive hg:
https://code.google.com/archive/p/artemis-framework/source/default/commits
I'm getting older, so I have less time for software stuff, but I think if you're basing your project on my work then you should give credit, especially if the original source code requires it.
Hi,
great to meet you! I heard of Artemis.
I can understand that you have the feeling that Entitas might be based on artemis or any other ECS implementation. The reason probably being that every ECS implementation shares more or less exactly the same ideas, same as e.g. DI frameworks or any other architecture frameworks more or less do the same thing. I felt the same way when I heard about Unity ECS, especially when I heard about reactive systems, which afaik Entitas pioneered.
Work on Entitas Obj-C began in 2012, inspired by actionscript versions of ash and xember, as mentioned in the readme of the original Entitas repo. Since then there was a natural evolution of this project. I started Entitas-CSharp in 2013 which was inspired by Entitas Obj-C but quickly diverged heavily, e.g. component arrays instead of dictionaries, code generation, etc. The api, class names and implementation details completely changed. Entitas-CSharp started as a personal project to help me to build games quicker and with tdd in mind. I've put a lot of work into it, especially after going open source and when Entitas began to have some traction. The Entitas core was build with TDD and a custom performance test suite that helped me to design the api and the internal data structures. Those were the main drivers that shaped Entitas.
I cannot tell you if Entitas has the same implementation details as artemis, because I never look at it. I cannot tell you if your entities are containers or ids or if you store components in dictionaries or arrays, if they are structs or classes. Do you use a node based approach like Ash? I don't know.
My point is, I developed Entitas to learn, grow and have a great ECS framework. Main inspiration was the idea of ECS. I have not been influenced by any other implementation, that's why I think Entitas is so different compared to other solutions (I might be wrong, because I don't know other implementations)
If some solutions happen to be similar or the same as yours, great, I like the way you think ;)
If I would have taken inspiration from artemis I would have definitely give you or the repo the credit it deserves!
I hope this clarifies the situation. If not, please feel free to ask.
Btw, I will checkout artemis now ;)
Thanks for the reply. It's not a big deal really. As you said you would have acknowledged Artemis from start if you knew about it.
I stumbled upon some old video of someone talking about Entitas during a Unity conference. It struck me how eerily similar Artemis and Entitas were.
https://www.youtube.com/watch?v=Re5kGtxTW6E
Especially the approach of the Matcher, which I call Aspect.
It's intriguing that you stumbled on the same approach. Because when I designed Artemis this was not a given method of doing entity selection like this.
Entitas: Matcher.allOf(A.class, B.class, C.class)
Artemis: Aspect.getAspectForAll(A.class, B.class, C.class)
But Artemis is no longer maintained, I gave up the domain (which has been hijacked now), but the design lives on in countless of frameworks based on the original Artemis that are still actively maintained.
But take a look at Artemis, and keep in mind the code is as it was those 8 years ago and not evolved since then.
Obviously many ECS architectures are going to share a very common and familiar base as the foundation was laid out back in 1998 with Thief I think. I also remember reading about matching and caching of entities as far as 2008 and I find the suggestion that you somehow fathered those concepts or are somehow deserving of credit in every ECS from here thereon because you implemented matching in a way that I feel every single developer would choose pretty laughable, sorry, but that is the truth.
(BTW in unity they introduce the idea of archetypes, perhaps you should ask them to credit you as well!)
@beck-daniel Try to be a little less hostile. OP was polite and accepted Simon's response without pushing back on it. There's no need to attack them.
Obviously many ECS architectures are going to share a very common and familiar base as the foundation was laid out back in 1998 with Thief I think. I also remember reading about matching and caching of entities as far as 2008 and I find the suggestion that you somehow fathered those concepts or are somehow deserving of credit in every ECS from here thereon because you implemented matching in a way that I feel every single developer would choose pretty laughable, sorry, but that is the truth.
(BTW in unity they introduce the idea of archetypes, perhaps you should ask them to credit you as well!)
I imagine you had to be there. It was not "obviously".
There were no game esc systems at the time, it was a totally new invention at the time. The focus was on OOP.
I introduced my framework on java-gaming.org forum at the time in 2011:
http://www.java-gaming.org/index.php/topic,23871
Judging from first impression it was quite new. Nobody heard of this.
And further:
http://www.java-gaming.org/topics/component-systems-artemis-style-systems-vs-traditional-fat-entities/33652/view.html
From my point of view, Artemis has grown a lot, it's grown understanding of these things a lot.
Yea, I think I deserve some credit for changing minds of thousands of programmers out there, mostly indirectly through ports of my original work.
The best inventions are obvious.
I think I first read about ECS in "Game engine architecture", a book by Jason Gregory, first released in 2009. I got the impression that they (Naughty Dog) used it in all their PS3 games due to issues in accessing memory (they used the arrays of structs approach which is cache friendly).
Most helpful comment
@beck-daniel Try to be a little less hostile. OP was polite and accepted Simon's response without pushing back on it. There's no need to attack them.