bevy/crates
Martín Maita 84be2b3f1e
Ensure that events are updated even when using a bare-bones Bevy App (#13808) (#13842)
# Objective

- Related to https://github.com/bevyengine/bevy/issues/13825

## Solution

- Cherry picked the merged PR and performed the necessary changes to
adapt it to the 0.14 release branch.

---------

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.

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!

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.

- [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: Alice Cecile <alice.i.cecile@gmail.com>
Co-authored-by: Mike <mike.hsu@gmail.com>
2024-06-14 20:53:37 +02:00
..
bevy_a11y Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_animation Make the component types of the new animation players clonable. (#13736) 2024-06-09 01:18:07 +02:00
bevy_app Ensure that events are updated even when using a bare-bones Bevy App (#13808) (#13842) 2024-06-14 20:53:37 +02:00
bevy_asset Improve error handling for AssetServer::add_async (#13745) 2024-06-10 19:31:41 +02:00
bevy_audio Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02: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 19:31:41 +02:00
bevy_core Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_core_pipeline Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_derive Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_dev_tools Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_diagnostic Poll system information in separate tasks (#13693) 2024-06-10 22:30:56 +02:00
bevy_dylib Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_dynamic_plugin Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_ecs Ensure that events are updated even when using a bare-bones Bevy App (#13808) (#13842) 2024-06-14 20:53:37 +02:00
bevy_encase_derive Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_gilrs Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_gizmos view.inverse_clip_from_world should be world_from_clip (#13756) 2024-06-09 16:55:22 +02:00
bevy_gltf Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_hierarchy Fix EntityCommands::despawn docs (#13774) 2024-06-09 20:52:52 +02:00
bevy_input Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_internal Update serialize flag for bevy_ecs (#13740) 2024-06-10 19:31:41 +02:00
bevy_log Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_macro_utils Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_math Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_mikktspace Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_pbr Revert "Make FOG_ENABLED a shader_def instead of material flag (#13783)" (#13803) 2024-06-11 02:01:14 +02:00
bevy_ptr Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_reflect Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_render Clarify error message due to missing shader file (#13766) 2024-06-10 19:31:41 +02:00
bevy_scene Update serialize flag for bevy_ecs (#13740) 2024-06-10 19:31:41 +02:00
bevy_sprite Add from_color to StandardMaterial and ColorMaterial (#13791) 2024-06-11 02:01:14 +02:00
bevy_state fix docs around StateTransition and remove references to `apply_sta… (#13772) 2024-06-10 19:31:41 +02:00
bevy_tasks Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_text Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_time Ensure that events are updated even when using a bare-bones Bevy App (#13808) (#13842) 2024-06-14 20:53:37 +02:00
bevy_transform Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02: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 19:31:41 +02:00
bevy_utils Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_window Release Candidate 0.14.0-rc.2 2024-06-06 23:56:56 +02:00
bevy_winit 13743 app exit hang (#13744) 2024-06-09 01:18:07 +02:00