diff --git a/Cargo.toml b/Cargo.toml index b14b51b22ef91..783e061c2eaaf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -428,6 +428,10 @@ path = "examples/input/mouse_input.rs" name = "mouse_input_events" path = "examples/input/mouse_input_events.rs" +[[example]] +name = "mouse_grab" +path = "examples/input/mouse_grab.rs" + [[example]] name = "touch_input" path = "examples/input/touch_input.rs" diff --git a/examples/README.md b/examples/README.md index 340918cd1e443..390d1e43f6f74 100644 --- a/examples/README.md +++ b/examples/README.md @@ -203,6 +203,7 @@ Example | File | Description `keyboard_modifiers` | [`input/keyboard_modifiers.rs`](./input/keyboard_modifiers.rs) | Demonstrates using key modifiers (ctrl, shift) `mouse_input` | [`input/mouse_input.rs`](./input/mouse_input.rs) | Demonstrates handling a mouse button press/release `mouse_input_events` | [`input/mouse_input_events.rs`](./input/mouse_input_events.rs) | Prints out all mouse events (buttons, movement, etc.) +`mouse_grab` | [`input/mouse_grab.rs`](./input/mouse_grab.rs) | Demonstrates how to grab the mouse, locking the cursor to the app's screen `touch_input` | [`input/touch_input.rs`](./input/touch_input.rs) | Displays touch presses, releases, and cancels `touch_input_events` | [`input/touch_input_events.rs`](./input/touch_input_events.rs) | Prints out all touch inputs diff --git a/examples/input/mouse_grab.rs b/examples/input/mouse_grab.rs new file mode 100644 index 0000000000000..7b125d205db48 --- /dev/null +++ b/examples/input/mouse_grab.rs @@ -0,0 +1,26 @@ +use bevy::prelude::*; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_system(grab_mouse) + .run(); +} + +// This system grabs the mouse when the left mouse button is pressed +// and releases it when the escape key is pressed +fn grab_mouse( + mut windows: ResMut, + mouse: Res>, + key: Res>, +) { + let window = windows.get_primary_mut().unwrap(); + if mouse.just_pressed(MouseButton::Left) { + window.set_cursor_visibility(false); + window.set_cursor_lock_mode(true); + } + if key.just_pressed(KeyCode::Escape) { + window.set_cursor_visibility(true); + window.set_cursor_lock_mode(false); + } +}