Entity Component System
Summary
An archetype based ECS that was used in the last three group projects during my time at the Game Assembly. The entities are just a 64-bit ID and there is very little difference between them and components aside from some component ID:s being linked to data. ID:s are recycled on removal and are made up of multiple parts bit-shifted together. Tags, and even other entities, can be added as components and queried for akin to how you would query a database.
Heavily inspired by blog posts made by Sander Mertens, creator of Flecs.
The reasons why I chose to create an ECS:
It's cache efficient - You can iterate over the exact data that you require (or close to) for all entities with that data.
Easier to multi thread - All you need to do is check what systems don't share components; these can be run in parallel.
I had read that once the components and systems were in place, then, in theory, you could more easily create different types of entities by mixing and matching what components were attached to them, which sounded intriguing.
Component Storage
The storage is composed of a vector of columns, where each column is a type eased vector of a unique component type. The vector of columns are stored in an archetype.