Bevy Button Released plugin
This crate makes Bevy application aware of the release of the button instead of reacting right after clicking. I think it will be addressed in next release but until then it could be helpful for some people.
Install
cargo add bevy_button_released_plugin
Usage
Add ButtonsReleasedPlugin during app creation process, GameButton component to buttons that you want to react to it like in button_system function in example below.
use bevy::prelude::*;
use bevy_button_released_plugin::{ButtonReleasedEvent, ButtonsReleasedPlugin, GameButton};
pub fn main() {
let mut app = App::new();
app.add_plugins(DefaultPlugins)
.add_plugins(ButtonsReleasedPlugin)
.add_systems(Startup, setup)
.add_systems(Update, button_system);
app.run();
}
fn button_system(mut reader: EventReader<ButtonReleasedEvent>, q: Query<&Name>) {
for event in reader.iter() {
if let Ok(button_name) = q.get(**event) {
info!("Button released: {}", button_name);
}
}
}
fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
commands
.spawn(NodeBundle {
style: Style {
width: Val::Percent(100.0),
height: Val::Percent(100.0),
justify_content: JustifyContent::SpaceEvenly,
flex_direction: FlexDirection::Column,
..default()
},
..default()
})
.with_children(|parent| {
for (text, color) in [
("GreenButton", Color::GREEN),
("RedButton", Color::ORANGE_RED),
("YellowButton", Color::YELLOW),
] {
parent.spawn((
ButtonBundle {
style: Style {
margin: UiRect::all(Val::Px(18.0)),
padding: UiRect::all(Val::Px(30.0)),
..default()
},
background_color: BackgroundColor(color),
..default()
},
GameButton::default(),
Name::new(text),
));
}
});
}
Bevy compatibility table
| Bevy version |
Crate version |
| 0.11 |
0.2.0 |
| 0.10 |
0.1.0 |