From 6ce8e5006867b5f11dd408eba66b221480e4b99b Mon Sep 17 00:00:00 2001 From: Emerson MX Date: Tue, 8 Mar 2022 17:14:08 +0000 Subject: [PATCH] Add mouse grab example (#4114) Fixes #4094 --- Cargo.toml | 4 ++++ examples/README.md | 1 + examples/input/mouse_grab.rs | 26 ++++++++++++++++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 examples/input/mouse_grab.rs diff --git a/Cargo.toml b/Cargo.toml index 30fcaa9de2..5efa161158 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -430,6 +430,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 bbf1278529..53d276d646 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 0000000000..7b125d205d --- /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); + } +}