bevy/crates
Kristoffer Søholm 2119838e27
Add support for ButtonInput<Key> (#19684)
# Objective

While `KeyCode` is very often the correct way to interact with keyboard
input there are a bunch of cases where it isn't, notably most of the
symbols (e.g. plus, minus, different parentheses). Currently the only
way to get these is to read from `EventReader<KeyboardInput>`, but then
you'd have to redo the `ButtonInput` logic for pressed/released to e.g.
make zoom functionality that depends on plus/minus keys.

This has led to confusion previously, like
https://github.com/bevyengine/bevy/issues/3278

## Solution

Add a `ButtonInput<Key>` resource.

## Testing

Modified the `keyboard_input` example to test it.

## Open questions

I'm not 100% sure this is the right way forward, since it duplicates the
key processing logic and might make people use the shorter
`ButtonInput<Key>` even when it's not appropriate.

Another option is to add a new struct with both `Key` and `KeyCode`, and
use `ButtonInput` with that instead. That would make it more
explanatory, but that is a lot of churn.

The third alternative is to not do this because it's too niche.

I'll add more documentation and take it out of draft if we want to move
forward with it.
2025-06-18 20:15:03 +00:00
..
bevy_a11y Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_animation Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_anti_aliasing Let query items borrow from query state to avoid needing to clone (#15396) 2025-06-16 21:05:41 +00:00
bevy_app Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_asset allow access to the source error of AssetLoaderError and downcasting (#19471) 2025-06-16 21:24:01 +00:00
bevy_audio Fix iOS simulator build (#19498) 2025-06-10 17:01:37 +00:00
bevy_color Make sequential_dispersed fn constant (#19659) 2025-06-15 16:56:07 +00:00
bevy_core_pipeline rename Transform::compute_matrix to to_matrix (#19646) 2025-06-18 05:37:25 +00:00
bevy_core_widgets Added clone bounds to EntityEvents that were missing them. (#19708) 2025-06-17 21:22:32 +00:00
bevy_derive bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_dev_tools Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_diagnostic bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_dylib bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_ecs Exposes Observer's system's name (#19611) 2025-06-17 22:38:31 +00:00
bevy_encase_derive bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_gilrs Make GILRS and WINIT_WINDOWS public (#19575) 2025-06-12 20:05:00 +00:00
bevy_gizmos Let query items borrow from query state to avoid needing to clone (#15396) 2025-06-16 21:05:41 +00:00
bevy_gltf Allow users to fix glTF coordinate system imports (#19633) 2025-06-16 21:47:34 +00:00
bevy_image Add missing docs for ImageLoader (#19499) 2025-06-09 19:46:33 +00:00
bevy_input Add support for ButtonInput<Key> (#19684) 2025-06-18 20:15:03 +00:00
bevy_input_focus Let query items borrow from query state to avoid needing to clone (#15396) 2025-06-16 21:05:41 +00:00
bevy_internal Initial raytraced lighting progress (bevy_solari) (#19058) 2025-06-12 21:26:10 +00:00
bevy_log Revert "bevy_log: refactor how log layers are wired together (#19248)" (#19705) 2025-06-17 20:41:30 +00:00
bevy_macro_utils bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_math Improve Bevy's double-precision story for third-party crates (#19194) 2025-06-08 02:02:47 +00:00
bevy_mesh Initial raytraced lighting progress (bevy_solari) (#19058) 2025-06-12 21:26:10 +00:00
bevy_mikktspace deny(missing_docs) for bevy_mikktspace (#19654) 2025-06-15 16:50:23 +00:00
bevy_pbr rename Transform::compute_matrix to to_matrix (#19646) 2025-06-18 05:37:25 +00:00
bevy_picking rename GlobalTransform::compute_matrix to to_matrix (#19643) 2025-06-17 18:37:26 +00:00
bevy_platform bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_ptr bevyengine.org -> bevy.org (#19503) 2025-06-05 23:09:28 +00:00
bevy_reflect Register ReflectSerialize for &'static str (#19680) 2025-06-16 22:09:15 +00:00
bevy_remote Component lifecycle reorganization and documentation (#19543) 2025-06-10 00:59:16 +00:00
bevy_render rename GlobalTransform::compute_matrix to to_matrix (#19643) 2025-06-17 18:37:26 +00:00
bevy_scene Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_solari rename GlobalTransform::compute_matrix to to_matrix (#19643) 2025-06-17 18:37:26 +00:00
bevy_sprite Let query items borrow from query state to avoid needing to clone (#15396) 2025-06-16 21:05:41 +00:00
bevy_state Fix SubStates with multiple source states not reacting to all source changes (#19595) 2025-06-16 21:34:22 +00:00
bevy_tasks Added async_executor to the array of features enabled by multi_threaded within bevy_tasks crate to prevent compile-time error when default-features are disabled. (#19334) 2025-06-10 00:54:46 +00:00
bevy_text Adding PartialEq to some UI and Text types (#19552) 2025-06-09 20:08:17 +00:00
bevy_time Event Split: Event, EntityEvent, and BufferedEvent (#19647) 2025-06-15 16:46:34 +00:00
bevy_transform rename Transform::compute_matrix to to_matrix (#19646) 2025-06-18 05:37:25 +00:00
bevy_ui Document TextShadow not supported by Text2d (#19533) 2025-06-16 21:55:32 +00:00
bevy_utils Add TypeIdMapExt trait to make TypeIdMap operations more ergonomic (#19683) 2025-06-17 21:06:27 +00:00
bevy_window Split CursorOptions off of Window (#19668) 2025-06-17 20:20:13 +00:00
bevy_winit Split CursorOptions off of Window (#19668) 2025-06-17 20:20:13 +00:00