bevyengine / bevyengine/bevy

`World::register_required_components` can make bundles outdated

Open
#18,212 5 comments 0 reactions 0 assignees View on GitHub
A-ECS C-Bug S-Needs-Design
Dominant language
Rust
Stars
48.2k
Forks
4.8k
Avg merge
3d 22h
Merged PRs (30d)
161

Description

## Bevy version

main

## What you did

Adding required components manually can make a `Bundle` outdated. This can cause diverging behavior depending on if you use bundles registered before or after manually requiring components in these bundles.

```rs
#[derive(Component)]
struct C1;
#[derive(Component, Default)]
struct C2;

let mut world = World::new();
world.register_bundle::();
world.register_required_components::(); // succeeds, no C1 anywhere yet
assert!(world.spawn((C1,)).contains::()); // succeeds, registers new bundle after requiring C2
assert!(world.spawn(C1).contains::()); // fails, uses outdated bundle
```

Worth noting you can register bundles in many ways so a solution that minds only bundles registered by type is not enough.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.