bevy/crates
Alice Cecile 2cffd14923
Ensure that events are updated even when using a bare-bones Bevy App (#13808)
# Objective

As discovered in
https://github.com/Leafwing-Studios/leafwing-input-manager/issues/538,
there appears to be some real weirdness going on in how event updates
are processed between Bevy 0.13 and Bevy 0.14.

To identify the cause and prevent regression, I've added tests to
validate the intended behavior.
My initial suspicion was that this would be fixed by
https://github.com/bevyengine/bevy/pull/13762, but that doesn't seem to
be the case.

Instead, events appear to never be updated at all when using `bevy_app`
by itself. This is part of the problem resolved by
https://github.com/bevyengine/bevy/pull/11528, and introduced by
https://github.com/bevyengine/bevy/pull/10077.

After some investigation, it appears that `signal_event_update_system`
is never added using a bare-bones `App`, and so event updates are always
skipped.

This can be worked around by adding your own copy to a
later-in-the-frame schedule, but that's not a very good fix.

## Solution

Ensure that if we're not using a `FixedUpdate` schedule, events are
always updated every frame.

To do this, I've modified the logic of `event_update_condition` and
`event_update_system` to clearly and correctly differentiate between the
two cases: where we're waiting for a "you should update now" signal and
where we simply don't care.

To encode this, I've added the `ShouldUpdateEvents` enum, replacing a
simple `bool` in `EventRegistry`'s `needs_update` field.

Now, both tests pass as expected, without having to manually add a
system!

## Testing

I've written two parallel unit tests to cover the intended behavior:

1. Test that `iter_current_update_events` works as expected in
`bevy_ecs`.
2. Test that `iter_current_update_events` works as expected in
`bevy_app`

I've also added a test to verify that event updating works correctly in
the presence of a fixed main schedule, and a second test to verify that
fixed updating works at all to help future authors narrow down failures.

## Outstanding

- [x] figure out why the `bevy_app` version of this test fails but the
`bevy_ecs` version does not
- [x] figure out why `EventRegistry::run_updates` isn't working properly
- [x] figure out why `EventRegistry::run_updates` is never getting
called
- [x] figure out why `event_update_condition` is always returning false
- [x] figure out why `EventRegistry::needs_update` is always false
- [x] verify that the problem is a missing `signal_events_update_system`

---------

Co-authored-by: Mike <mike.hsu@gmail.com>
2024-06-12 14:28:51 +00:00
..
bevy_a11y fix: upgrade to winit v0.30 (#13366) 2024-06-03 13:06:48 +00:00
bevy_animation Make the component types of the new animation players clonable. (#13736) 2024-06-07 21:51:24 +00:00
bevy_app Ensure that events are updated even when using a bare-bones Bevy App (#13808) 2024-06-12 14:28:51 +00:00
bevy_asset Improve error handling for AssetServer::add_async (#13745) 2024-06-10 12:56:21 +00:00
bevy_audio Update to rodio 0.18 (#13612) 2024-06-02 14:25:51 +00:00
bevy_color Adds back in way to convert color to u8 array, implemented for the two RGB color types, also renames Color::linear to Color::to_linear. (#13759) 2024-06-10 13:03:46 +00:00
bevy_core Determine msrv for every standalone bevy_* crate. (#13211) 2024-05-13 18:26:41 +00:00
bevy_core_pipeline Allow mix of hdr and non-hdr cameras to same render target (#13419) 2024-06-06 20:55:05 +00:00
bevy_derive Deprecate dynamic plugins (#13080) 2024-05-20 20:01:28 +00:00
bevy_dev_tools Move utilities from examples to bevy_state and add concept of state-scoped entities (#13649) 2024-06-04 11:44:34 +00:00
bevy_diagnostic Poll system information in separate tasks (#13693) 2024-06-10 19:06:22 +00:00
bevy_dylib Add README.md to all crates (#13184) 2024-05-02 18:56:00 +00:00
bevy_dynamic_plugin Deprecate dynamic plugins (#13080) 2024-05-20 20:01:28 +00:00
bevy_ecs Ensure that events are updated even when using a bare-bones Bevy App (#13808) 2024-06-12 14:28:51 +00:00
bevy_encase_derive Add README.md to all crates (#13184) 2024-05-02 18:56:00 +00:00
bevy_gilrs Add README.md to all crates (#13184) 2024-05-02 18:56:00 +00:00
bevy_gizmos view.inverse_clip_from_world should be world_from_clip (#13756) 2024-06-09 14:40:14 +00:00
bevy_gltf Add labels to Gltf Node and Mesh assets (#13558) 2024-06-05 23:10:33 +00:00
bevy_hierarchy Fix EntityCommands::despawn docs (#13774) 2024-06-09 17:59:19 +00:00
bevy_input flush key_input cache when Bevy loses focus (Adopted) (#13678) 2024-06-05 02:06:47 +00:00
bevy_internal Update serialize flag for bevy_ecs (#13740) 2024-06-10 16:37:59 +00:00
bevy_log Improve tracing layer customization (#13159) 2024-05-12 21:16:56 +00:00
bevy_macro_utils Add README.md to all crates (#13184) 2024-05-02 18:56:00 +00:00
bevy_math Added an illustration to the compass direction docs (issue 13664) (#13788) 2024-06-10 17:31:11 +00:00
bevy_mikktspace Determine msrv for every standalone bevy_* crate. (#13211) 2024-05-13 18:26:41 +00:00
bevy_pbr Revert "Make FOG_ENABLED a shader_def instead of material flag (#13783)" (#13803) 2024-06-10 23:25:16 +00:00
bevy_ptr add Debug for ptr types (#13498) 2024-05-24 21:25:11 +00:00
bevy_reflect improved the error message by insert_boxed (issue #13646) (again) (#13706) 2024-06-07 20:56:16 +00:00
bevy_render Clarify error message due to missing shader file (#13766) 2024-06-10 13:15:54 +00:00
bevy_scene Revert Align Scene::write_to_world_with to match DynamicScene::write_to_world_with (#13800) 2024-06-10 21:14:11 +00:00
bevy_sprite Add from_color to StandardMaterial and ColorMaterial (#13791) 2024-06-10 21:25:31 +00:00
bevy_state Re-name and Extend Run Conditions API (#13784) 2024-06-10 13:41:56 +00:00
bevy_tasks fix: upgrade to winit v0.30 (#13366) 2024-06-03 13:06:48 +00:00
bevy_text Uncouple DynamicTextureAtlasBuilder from assets (#13717) 2024-06-08 12:38:03 +00:00
bevy_time Ensure that events are updated even when using a bare-bones Bevy App (#13808) 2024-06-12 14:28:51 +00:00
bevy_transform Fix links to Transform in Transform and GlobalTransform docs (#13704) 2024-06-06 20:06:54 +00:00
bevy_ui Adds back in way to convert color to u8 array, implemented for the two RGB color types, also renames Color::linear to Color::to_linear. (#13759) 2024-06-10 13:03:46 +00:00
bevy_utils Add mappings to EntityMapper (#13727) 2024-06-08 12:52:23 +00:00
bevy_window rename touchpad to gesture, and add new gestures (#13660) 2024-06-04 12:44:25 +00:00
bevy_winit 13743 app exit hang (#13744) 2024-06-08 21:42:01 +00:00