-
-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add common run conditions to bevy_input
- Loading branch information
1 parent
e27e04a
commit 42e1a3d
Showing
3 changed files
with
102 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
use crate::Input; | ||
use bevy_ecs::system::Res; | ||
use std::hash::Hash; | ||
|
||
/// Stateful run condition that can be toggled via a input press using [`Input::just_pressed`]. | ||
/// | ||
/// ```rust,no_run | ||
/// use bevy::prelude::*; | ||
/// use bevy::input::common_conditions::input_toggle_active; | ||
/// | ||
/// fn main() { | ||
/// App::new() | ||
/// .add_plugins(DefaultPlugins) | ||
/// .add_system(pause_menu.run_if(input_toggle_active(false, KeyCode::Escape))) | ||
/// .run(); | ||
/// } | ||
/// | ||
/// fn pause_menu() { | ||
/// println!("in pause menu"); | ||
/// } | ||
/// ``` | ||
/// | ||
/// If you want other system to be able to access whether the toggled state is active, | ||
/// you should use a custom resource or a state for that: | ||
/// ```rust,no_run | ||
/// use bevy::prelude::*; | ||
/// use bevy::input::common_conditions::input_toggle_active; | ||
/// | ||
/// #[derive(Resource, Default)] | ||
/// struct Paused(bool); | ||
/// | ||
/// fn main() { | ||
/// App::new() | ||
/// .add_plugins(DefaultPlugins) | ||
/// .init_resource::<Paused>() | ||
/// .add_system(pause_menu.run_if(|paused: Res<Paused>| paused.0)) | ||
/// .run(); | ||
/// } | ||
/// | ||
/// fn update_pause_state(mut paused: ResMut<Paused>, input: Input<KeyCode>) { | ||
/// if input.just_pressed(KeyCode::Escape) { | ||
/// paused.0 = !paused.0; | ||
/// } | ||
/// } | ||
/// | ||
/// fn pause_menu() { | ||
/// println!("in pause menu"); | ||
/// } | ||
/// | ||
/// ``` | ||
pub fn input_toggle_active<T>(default: bool, input: T) -> impl FnMut(Res<Input<T>>) -> bool | ||
where | ||
T: Copy + Eq + Hash + Send + Sync + 'static, | ||
{ | ||
let mut active = default; | ||
move |inputs: Res<Input<T>>| { | ||
active ^= inputs.just_pressed(input); | ||
active | ||
} | ||
} | ||
|
||
/// Run condition that is active if [`Input::pressed`] is true for the given input. | ||
pub fn input_pressed<T>(input: T) -> impl FnMut(Res<Input<T>>) -> bool | ||
where | ||
T: Copy + Eq + Hash + Send + Sync + 'static, | ||
{ | ||
move |inputs: Res<Input<T>>| inputs.pressed(input) | ||
} | ||
|
||
/// Run condition that is active if [`Input::just_pressed`] is true for the given input. | ||
/// | ||
/// ```rust,no_run | ||
/// use bevy::prelude::*; | ||
/// use bevy::input::common_conditions::input_just_pressed; | ||
/// fn main() { | ||
/// App::new() | ||
/// .add_plugins(DefaultPlugins) | ||
/// .add_system(jump.run_if(input_just_pressed(KeyCode::Space))) | ||
/// .run(); | ||
/// } | ||
/// | ||
/// # fn jump() {} | ||
/// ``` | ||
pub fn input_just_pressed<T>(input: T) -> impl FnMut(Res<Input<T>>) -> bool | ||
where | ||
T: Copy + Eq + Hash + Send + Sync + 'static, | ||
{ | ||
move |inputs: Res<Input<T>>| inputs.just_pressed(input) | ||
} | ||
|
||
/// Run condition that is active if [`Input::just_released`] is true for the given input. | ||
pub fn input_just_released<T>(input: T) -> impl FnMut(Res<Input<T>>) -> bool | ||
where | ||
T: Copy + Eq + Hash + Send + Sync + 'static, | ||
{ | ||
move |inputs: Res<Input<T>>| inputs.just_released(input) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,6 @@ | ||
mod axis; | ||
/// Common run conditions | ||
pub mod common_conditions; | ||
pub mod gamepad; | ||
mod input; | ||
pub mod keyboard; | ||
|