bevy/crates/bevy_transform/src
SpecificProtagonist 21195a75e6
track_change_detection: Also track spawns/despawns (#16047)
# Objective

Expand `track_change_detection` feature to also track entity spawns and
despawns. Use this to create better error messages.

# Solution

Adds `Entities::entity_get_spawned_or_despawned_by` as well as `{all
entity reference types}::spawned_by`.

This also removes the deprecated `get_many_entities_mut` & co (and
therefore can't land in 0.15) because we don't yet have no Polonius.

## Testing

Added a test that checks that the locations get updated and these
updates are ordered correctly vs hooks & observers.

---

## Showcase

Access location:
```rust
let mut world = World::new();
let entity = world.spawn_empty().id();
println!("spawned by: {}", world.entity(entity).spawned_by());
```
```
spawned by: src/main.rs:5:24
```
Error message (with `track_change_detection`):
```rust
world.despawn(entity);
world.entity(entity);
```
```
thread 'main' panicked at src/main.rs:11:11:
Entity 0v1#4294967296 was despawned by src/main.rs:10:11
```
and without:
```
thread 'main' panicked at src/main.rs:11:11:
Entity 0v1#4294967296 does not exist (enable `track_change_detection` feature for more details)
```
Similar error messages now also exists for `Query::get`,
`World::entity_mut`, `EntityCommands` creation and everything that
causes `B0003`, e.g.
```
error[B0003]: Could not insert a bundle (of type `MaterialMeshBundle<StandardMaterial>`) for entity Entity { index: 7, generation: 1 }, which was despawned by src/main.rs:10:11. See: https://bevyengine.org/learn/errors/#b0003
```

---------

Co-authored-by: kurk070ff <108901106+kurk070ff@users.noreply.github.com>
Co-authored-by: Freya Pines <freya@MacBookAir.lan>
Co-authored-by: Freya Pines <freya@Freyas-MacBook-Air.local>
Co-authored-by: Matty Weatherley <weatherleymatthew@gmail.com>
2024-12-17 04:46:31 +00:00
..
components Move required components doc to type doc (#16575) 2024-12-03 19:45:20 +00:00
bundles.rs Migrate visibility to required components (#15474) 2024-09-27 19:06:16 +00:00
commands.rs Turn apply_deferred into a ZST System (#16642) 2024-12-05 18:14:05 +00:00
helper.rs track_change_detection: Also track spawns/despawns (#16047) 2024-12-17 04:46:31 +00:00
lib.rs Migrate bevy_transform to required components (#14964) 2024-09-27 17:06:48 +00:00
plugins.rs bevy_transform split up to allow feature gate modularity (#13599) 2024-05-31 16:40:36 +00:00
systems.rs Migrate bevy_transform to required components (#14964) 2024-09-27 17:06:48 +00:00
traits.rs Conversions for Isometry3d ⟷ Transform/GlobalTransform (#14478) 2024-07-25 20:23:32 +00:00