Why i decided to use ECS

Here i will not describe what it is a ECS because there is a lot of references for that. You can learn about a little reading the references i gave here in the reference section. This is a short description on some characteristics i considered to choose to use it.

It is common cense among programmers that a code must be clean, concise an if possible modular. In my case reuse it is a very important issue.

I decided to create a great game and therefore to create prototypes as a progression strategy, testing features. A strategy decision i made was to create minigames, using behaviors or features that will be part of the final one.

A main characteristic for that it is that i want to use the same code used in the prototype, in the main game.

Looking for the current effort that Unity it is adding to develop and change its engine core itself it is a good reason to decide using it

Performance

I confess that at the moment i am not so concerned about performance, because i still has no problems, and the main rule in the search of a performatic code it is do notĀ nitpicking. But on the other hand i want my game to be executed in a mobile and create a great experience to the user, so the smooth it runs the better.

While running the main loop of a game, the software fights a battle of time. Each piece of the main loop has it own frame time concurring in the CPU and GPU. You can reduce the complexity of a algorithm but a big CPU and GPU villain is the amount of memory in the data bus and therefore the size of buffers used to perform some computation.

Another issue, in the convencional architectures it is the miss use of the computational power of the CPUs and GPUs, and this is due to the bad use of multi cores. Almost all the time, we are using only one core

This two big issues, ECS can naturaly solved.

Another mindset

Creating a software nowaday starts by thinking about how to share functions and share data, so we donĀ“t need to duplicate code and then can create bug sources or make the maintenance of the code harder.

While thinking in ECS, we have to break the feature down in atomic characteristics, that will be the components, we should not create classes containing all the functions and data needed to describe an instance.

I think that this mindset change will require a different kind of documentation, because we programmers are used to read OOP classes and think about code, this way.

Combine Behaviors easily

The main idea of my game lies upon characters with different behaviors, in an environment with different behaviors also. So to me seams to be that this concepts are very tigh together and once more, it is a very good hint that i moght try it

Well, as i said at the beggining, this is a descriptions of my reasons, in the following posts i will describe my tragetory using UNITY PURE ECS.

References

Definitions

ECS Concepts

https://katatunix.wordpress.com/2016/01/26/oop-vs-ecs/

http://www.richardlord.net/blog/ecs/what-is-an-entity-framework.html

Unity ECS Concepts

https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/Documentation/index.md

https://github.com/Unity-Technologies/EntityComponentSystemSamples/blob/master/Documentation/content/ecs_concepts.md


Discussion about ECS over MVC
http://www.richardlord.net/presentations/game-architecture-is-different.html