bevy/crates
James Liu e954b8573c Lock down access to Entities (#6740)
# Objective
The soundness of the ECS `World` partially relies on the correctness of the state of `Entities` stored within it. We're currently allowing users to (unsafely) mutate it, as well as readily construct it without using a `World`. While this is not strictly unsound so long as users (including `bevy_render`) safely use the APIs, it's a fairly easy path to unsoundness without much of a guard rail.

Addresses #3362 for `bevy_ecs::entity`. Incorporates the changes from #3985.

## Solution
Remove `Entities`'s  `Default` implementation and force access to the type to only be through a properly constructed `World`.

Additional cleanup for other parts of `bevy_ecs::entity`:

 - `Entity::index` and `Entity::generation` are no longer `pub(crate)`, opting to force the rest of bevy_ecs to use the public interface to access these values.
 - `EntityMeta` is no longer `pub` and also not `pub(crate)` to attempt to cut down on updating `generation` without going through an `Entities` API. It's currently inaccessible except via the `pub(crate)` Vec on `Entities`, there was no way for an outside user to use it.
 - Added `Entities::set`, an unsafe `pub(crate)` API for setting the location of an Entity (parallel to `Entities::get`) that replaces the internal case where we need to set the location of an entity when it's been spawned, moved, or despawned.
 - `Entities::alloc_at_without_replacement` is only used in `World::get_or_spawn` within the first party crates, and I cannot find a public use of this API in any ecosystem crate that I've checked (via GitHub search).
 - Attempted to document the few remaining undocumented public APIs in the module.

---

## Changelog
Removed: `Entities`'s `Default` implementation.
Removed: `EntityMeta`
Removed: `Entities::alloc_at_without_replacement` and `AllocAtWithoutReplacement`.

Co-authored-by: james7132 <contact@jamessliu.com>
Co-authored-by: James Liu <contact@jamessliu.com>
2022-11-28 20:39:02 +00:00
..
bevy_animation Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_app Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_asset Derive clone and debug for AssetPlugin (#6583) 2022-11-14 23:08:26 +00:00
bevy_audio Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_core Fix reflection for PathBuf and OsString (#6776) 2022-11-27 17:28:06 +00:00
bevy_core_pipeline Fix missing sRGB conversion for dithering non-HDR pipelines (#6707) 2022-11-22 15:55:50 +00:00
bevy_derive Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_diagnostic Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_dylib Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_dynamic_plugin Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_ecs Lock down access to Entities (#6740) 2022-11-28 20:39:02 +00:00
bevy_ecs_compile_fail_tests Fix trybuild tests broken by rust 1.65 (#6457) 2022-11-03 15:09:27 +00:00
bevy_encase_derive Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_gilrs Bump gilrs version to 0.10 (#6558) 2022-11-15 20:31:17 +00:00
bevy_gltf Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_hierarchy Make adding children idempotent (#6763) 2022-11-28 13:40:14 +00:00
bevy_input Correct docs for ButtonSettingsError to read 0.0..=1.0 (#6570) 2022-11-12 22:59:49 +00:00
bevy_internal Update dead links in DefaultPlugins docs (#6695) 2022-11-21 20:12:31 +00:00
bevy_log Clarify duplicate logger error (#6757) 2022-11-28 13:39:47 +00:00
bevy_macro_utils Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_math Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_mikktspace Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_pbr Add DrawFunctionsInternals::id() (#6745) 2022-11-28 13:54:13 +00:00
bevy_ptr Add safe constructors for untyped pointers Ptr and PtrMut (#6539) 2022-11-14 22:53:50 +00:00
bevy_reflect Register Hash for glam types (#6786) 2022-11-28 14:55:26 +00:00
bevy_render Lock down access to Entities (#6740) 2022-11-28 20:39:02 +00:00
bevy_scene Make spawn_dynamic return InstanceId (#6663) 2022-11-18 21:16:31 +00:00
bevy_sprite Add DrawFunctionsInternals::id() (#6745) 2022-11-28 13:54:13 +00:00
bevy_tasks await tasks to cancel (#6696) 2022-11-23 00:41:19 +00:00
bevy_text Warn instead of erroring when max_font_atlases is exceeded (#6673) 2022-11-25 23:49:25 +00:00
bevy_time Update old docs from Timer (#6646) 2022-11-18 20:42:33 +00:00
bevy_transform Parallelized transform propagation (#4775) 2022-11-21 18:18:38 +00:00
bevy_ui Add DrawFunctionsInternals::id() (#6745) 2022-11-28 13:54:13 +00:00
bevy_utils Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_window Fix set_cursor_grab_mode to try an alternative mode before giving an error (#6599) 2022-11-26 13:10:11 +00:00
bevy_winit Fix set_cursor_grab_mode to try an alternative mode before giving an error (#6599) 2022-11-26 13:10:11 +00:00