pub fn input_toggle_active<T>(
default: bool,
input: T,
) -> impl FnMut(Res<'_, ButtonInput<T>>) -> bool + Clone
Expand description
Stateful run condition that can be toggled via a input press using ButtonInput::just_pressed
.
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Update, pause_menu.run_if(input_toggle_active(false, KeyCode::Escape)))
.run();
}
fn pause_menu() {
println!("in pause menu");
}
If you want other systems to be able to access whether the toggled state is active, you should use a custom resource or a state for that:
#[derive(Resource, Default)]
struct Paused(bool);
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.init_resource::<Paused>()
.add_systems(Update, toggle_pause_state.run_if(input_just_pressed(KeyCode::Escape)))
.add_systems(Update, pause_menu.run_if(|paused: Res<Paused>| paused.0))
.run();
}
fn toggle_pause_state(mut paused: ResMut<Paused>) {
paused.0 = !paused.0;
}
fn pause_menu() {
println!("in pause menu");
}