-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
Open
Labels
A-ECSEntities, components, systems, and eventsEntities, components, systems, and eventsC-Tracking-IssueAn issue that collects information about a broad development initiativeAn issue that collects information about a broad development initiativeX-ControversialThere is active debate or serious implications around merging this PRThere is active debate or serious implications around merging this PR
Description
Objective
I've been deep in Bevy's entity code for a few weeks now, working on remote entity reservation. Having become pretty familiar with it, there's a few areas I think we can significantly improve.
This is a tracking issues for my ideas here. Each one deserves discussion, but since they are separate issues, I figured a tracking issue would be better than a discussion post with disjoint comments.
Roadmap
- Remove old
alloc_atfunctionality. Removeinsert_or_spawnfunction family #18148 . This was a performance foot gun for users and it madeEntitiesoverly restrictive. - Properly handle
u32::MAXindex entity. Right now, this is a bug inEntities. One solution is out here: Makeentity::indexnon max #18704 . (But that's still up for debate). - Make generations
u32in a new type. Make entity generation a new type and remove identifier #19121 - Make
TableRow,ArchetypeRow, etc non-max. Nonmax all rows #19132 - Implement remote entity reservation. Remote entity reservation v9 #18670 is a clear winner for this IMO. It has better performance than main while offering a much more flexible interface.
- Allow bulk freeing.
- Try to remove atomics in remote reservation slots
- Explore adding back
insert_or_spawn_batch. See here Improved Entity Lifecycle: remove flushing, support manual spawning and despawning #19451. - Speed up Command entity spawning.
- Remove
reserve/pending paradigm. Improved Entity Lifecycle: remove flushing, support manual spawning and despawning #19451 - Remove internal use of untyped
u32s as entity generation and index. We have types for these now! - Support multiple allocator kinds, splitting remote and local allocators.
- Implement iterator for
EntityGeneration. Implement iterator for entity generation #19144 - Rename some functions in the
entitymodule. These have strayed a bit from their best meaning, but haven't been updated to prevent a migration guide. But I think it's worth it. - Remove the
Identifiersystem. This is an ecs utility that is only used byEntity. But these changes makeEntitypretty unique as far as identifiers go, and given that the identifier system is only used by entities, I think we can safely let this go to reduce complexity. - Remove/deprecate
Entity::PLACEHOLDER. The only possible reason to use this is as a replacement forMaybeUninit:: uninitthat trades UB fort a logic error. But who's doing that?Optionis better anyway for most things, and people can make their own placeholders if needed. That would make the risks more explicit. - After allowing archetypes and tables to be unregistered, make
TableIdandArchetypeIdnon max. If there can't beu32::MAXentities, there cant't be that many archetypes. Let's give it a niche for the places this is used in an option. - Make
ComponentIdwrap entity information. This is the first step in components as entities. - Create a custom
ComponentIdmap that is an optimizedHashMap<ComponentId, T>. This would be a vec index for the firstSOME_CONSTANTentities and then a hashmap after that. - Create a public interface for creating custom entity allocators. This should be easy to support and would let people make allocators for grouping dense entity ids, etc.
- Allow entity ids to be reserved by default for components as entities.
MiniaczQ, tychedelia, Jondolf, Bluefinger, dmyyy and 1 more
Metadata
Metadata
Assignees
Labels
A-ECSEntities, components, systems, and eventsEntities, components, systems, and eventsC-Tracking-IssueAn issue that collects information about a broad development initiativeAn issue that collects information about a broad development initiativeX-ControversialThere is active debate or serious implications around merging this PRThere is active debate or serious implications around merging this PR