bevy/crates
Chris Russell 2486343e87
Include AnimationTarget directly in the animation query rather than reading it through the EntityMut (#15413)
# Objective

Improve the performance of animation.  

`animate_targets` only does work for entities with a `AnimationTarget`
component, but the query it uses has no filters and matches all
archetypes, resulting in extra work checking and ignoring every other
entity in the world.

In addition, it uses `EntityMutExcept::get`, which has to look up the
`ComponentId` for `AnimationTarget` each time it's used.

Fixes #15412

## Solution

Instead of `entity_mut.get::<AnimationTarget>()`, add `&AnimationTarget`
to the query and read it directly. This requires adding
`AnimationTarget` to the list of exceptions in the `EntityMutExcept`.
Since the resulting type is getting long, add an alias for it.

This does mean that `AnimationTarget` is no longer available through
`entity`, which means it's not possible to animate the `AnimationTarget`
component itself.

## Testing

I ran performance traces of many_foxes comparing this branch to main.
Red is main, yellow is these changes:


![image](https://github.com/user-attachments/assets/93ef7d70-5103-4952-86b9-312aafc53e5f)
2024-09-27 18:18:03 +00:00
..
bevy_a11y Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_animation Include AnimationTarget directly in the animation query rather than reading it through the EntityMut (#15413) 2024-09-27 18:18:03 +00:00
bevy_app Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_asset Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_audio Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_color Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_core Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_core_pipeline Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_derive Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_dev_tools Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_diagnostic Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_dylib Generate links to definition in source code pages on docs.rs and dev-docs.bevyengine.org (#12965) 2024-07-29 23:10:16 +00:00
bevy_ecs Reduce memory usage in component fetches and change detection filters (#15283) 2024-09-27 14:06:40 +00:00
bevy_encase_derive Update `glam to 0.29, encase` to 0.10. (#15249) 2024-09-23 19:44:02 +00:00
bevy_gilrs Simpler lint fixes: makes ci lints work but disables a lint for now (#15376) 2024-09-24 11:42:59 +00:00
bevy_gizmos Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_gltf Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_hierarchy Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_input Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_internal Initial implementation of the Bevy Remote Protocol (Adopted) (#14880) 2024-09-23 18:36:16 +00:00
bevy_log Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_macro_utils Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_math Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_mikktspace Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_pbr Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_picking Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_ptr Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_reflect Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_remote Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_render Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_scene Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_sprite Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_state Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_tasks Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_text Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_time Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_transform Migrate bevy_transform to required components (#14964) 2024-09-27 17:06:48 +00:00
bevy_ui Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_utils Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_window Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00
bevy_winit Add core and alloc over std Lints (#15281) 2024-09-27 00:59:59 +00:00