Converts the ECS from a data-oriented archtype-based system to a much simpler storage-per-component model using hash table lookups by EntityId. There's still room to make this faster and more efficient (e.g. sparse sets, hybrid storage, meta-only archetypes, query/select-query optimization, etc.).
Changes:
Remove Archetypes and Chunks and Queries
Merge World and Universe into EntityManager
Component types are registered on EntityManager
Entity select happens via EntityManager::select
Components are no longer specified in sap/schema, since they live entirely in the C++ runtime
Components are stored in per-component-type data structures
Various minor fixes and improvements to support the above
Reasons:
The original ECS was missing various features and those were increasingly hard to add. Given this is a hobby project with limited time, the benefit/cost ratio was waaay too low.
Unity recently supposedly patented some elements of their archetype model. I have no idea what the specifics are, since I will not read or support software patents, but this just seems the safer bet.
Even at its best, the data-oriented archetype pattern has severe limitations, and that is in part why Unity itself still hasn't been able to make its DOTS an easy-to-use default for most developers. The inability to add/remove components cheaply, the requirement to use completely different APIs for delayed creation of entities, etc. The speed benefits are potentially very much outweighed by the difficulty of use.
Again, even at its best, the data-oriented archetype pattern performs poorly for some use cases. It's built on the assumption of having large numbers of identically-configured entities. The Mega City demo is a great use case for Unity DOTS-like ECS, but a great many actual games are far more likely to have very different entities (with different archetypes) defeating the benefits of DOTS. Further, there are hybrid approaches possible which can provide all the data-oriented benefits for some groups of entities while not imposing the burden on others.
Converts the ECS from a data-oriented archtype-based system to a much simpler storage-per-component model using hash table lookups by EntityId. There's still room to make this faster and more efficient (e.g. sparse sets, hybrid storage, meta-only archetypes, query/select-query optimization, etc.).
Changes:
EntityManager::select
Reasons: