8 releases (4 breaking)
0.6.0 | Jul 21, 2024 |
---|---|
0.6.0-rc.1 | Jun 20, 2024 |
0.5.1 | May 5, 2024 |
0.5.0 | Feb 17, 2024 |
0.1.0 | Apr 6, 2023 |
#251 in Game dev
22 downloads per month
31KB
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, then the GameButton
component will be added to buttons and it is possible to react to it like in button_system
function in example below. Auto adding GameButton
can be disabled by disabling default "auto_add" feature.
use bevy::prelude::*;
use bevy_button_released_plugin::{ButtonReleasedEvent, ButtonsReleasedPlugin};
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>,
mut q_text: Query<&mut Text>,
) {
let mut text = q_text.single_mut();
for event in reader.read() {
if let Ok(button_name) = q.get(**event) {
text.sections[0].value = format!("Last button released: {}", button_name);
}
}
}
fn setup(mut commands: Commands) {
// Camera
commands.spawn(Camera2dBundle::default());
// root node
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| {
let style: Style = Style {
margin: UiRect::all(Val::Px(18.0)),
padding: UiRect::all(Val::Px(30.0)),
..default()
};
parent.spawn(
TextBundle::from_section(
"Press any button below",
TextStyle {
font_size: 30.0,
..default()
},
)
.with_text_justify(JustifyText::Center)
.with_style(style.clone()),
);
for (text, color) in [
("Green", Color::GREEN),
("Red", Color::ORANGE_RED),
("Yellow", Color::YELLOW),
] {
parent.spawn((
ButtonBundle {
style: style.clone(),
background_color: BackgroundColor(color),
..default()
},
Name::new(text),
));
}
});
}
Bevy compatibility table
Bevy version | Crate version |
---|---|
0.14 | 0.6 |
0.13 | 0.5 |
0.12 | 0.3,0.4 |
0.11 | 0.2 |
0.10 | 0.1 |
Dependencies
~38–75MB
~1.5M SLoC