pub struct MouseState {
pub position: Vec2,
pub drag_start: Option<Vec2>,
pub delta: Vec2,
pub scroll: Vec2,
pub held: HashSet<MouseButton>,
pub pressed_this_frame: Vec<MouseButton>,
pub released_this_frame: Vec<MouseButton>,
pub cursor_visible: bool,
pub cursor_grabbed: bool,
}Expand description
Mouse state for the current frame.
Fields§
§position: Vec2Current pixel position.
drag_start: Option<Vec2>Position at the start of the current drag (if any).
delta: Vec2Delta movement this frame.
scroll: Vec2Scroll wheel delta this frame.
held: HashSet<MouseButton>Which buttons are currently held down.
pressed_this_frame: Vec<MouseButton>Buttons that were pressed this frame (down edge).
released_this_frame: Vec<MouseButton>Buttons that were released this frame (up edge).
cursor_visible: boolWhether the cursor is visible.
cursor_grabbed: boolWhether the cursor is locked (grabbed).
Implementations§
Source§impl MouseState
impl MouseState
Sourcepub fn is_down(&self, button: MouseButton) -> bool
pub fn is_down(&self, button: MouseButton) -> bool
Is the given button currently held?
Sourcepub fn is_pressed(&self, button: MouseButton) -> bool
pub fn is_pressed(&self, button: MouseButton) -> bool
Was the button pressed this frame?
Examples found in repository?
examples/particles.rs (line 57)
49 fn update(&mut self, ctx: &mut Context) {
50 let dt = ctx.time.delta() as f32;
51
52 // Move fire emitter to mouse X
53 self.emitters[0].position.x = ctx.input.mouse.position.x;
54 self.emitters[0].position.y = ctx.screen_height() - 50.0;
55
56 // Burst on click
57 if ctx.input.mouse.is_pressed(MouseButton::Left) {
58 self.emitters[1].position = ctx.input.mouse.position;
59 self.emitters[1].burst_now(50);
60 }
61
62 // Update all emitters
63 for emitter in &mut self.emitters {
64 emitter.update(dt);
65 }
66
67 if ctx.input.keyboard.is_pressed(KeyCode::Escape) {
68 ctx.quit();
69 }
70 }More examples
examples/basics.rs (line 87)
44 fn update(&mut self, ctx: &mut Context) {
45 let dt = ctx.time.delta() as f32;
46
47 // --- Ball physics ---
48 self.ball.velocity.y += 600.0 * dt; // Gravity
49 self.ball.position += self.ball.velocity * dt;
50
51 // Bounce off walls
52 let w = ctx.screen_width();
53 let h = ctx.screen_height();
54
55 if self.ball.position.x - self.ball.radius < 0.0 {
56 self.ball.position.x = self.ball.radius;
57 self.ball.velocity.x = self.ball.velocity.x.abs();
58 }
59 if self.ball.position.x + self.ball.radius > w {
60 self.ball.position.x = w - self.ball.radius;
61 self.ball.velocity.x = -self.ball.velocity.x.abs();
62 }
63 if self.ball.position.y - self.ball.radius < 0.0 {
64 self.ball.position.y = self.ball.radius;
65 self.ball.velocity.y = self.ball.velocity.y.abs();
66 }
67 if self.ball.position.y + self.ball.radius > h {
68 self.ball.position.y = h - self.ball.radius;
69 self.ball.velocity.y = -self.ball.velocity.y.abs() * 0.95; // Damping
70 }
71
72 // Update trail
73 self.ball.trail.push((self.ball.position, 1.0));
74 if self.ball.trail.len() > 60 {
75 self.ball.trail.remove(0);
76 }
77 for (_, alpha) in &mut self.ball.trail {
78 *alpha -= dt * 2.0;
79 }
80 self.ball.trail.retain(|(_, a)| *a > 0.0);
81
82 // --- Input ---
83 if ctx.input.is_action_pressed("shake") {
84 ctx.graphics.camera.shake(10.0, 0.3);
85 }
86
87 if ctx.input.mouse.is_pressed(MouseButton::Left) {
88 self.click_count += 1;
89 // Change ball color
90 self.hue = (self.hue + 30.0) % 360.0;
91 self.ball.color = Color::from_hsla(self.hue, 0.8, 0.6, 1.0);
92 // Boost ball toward click
93 let dir = ctx.input.mouse.position - self.ball.position;
94 self.ball.velocity += dir.normalize_or_zero() * 200.0;
95 }
96
97 // Zoom with scroll
98 let zoom = ctx.graphics.camera.zoom + ctx.input.mouse.scroll.y * 0.1;
99 ctx.graphics.camera.set_zoom(zoom);
100
101 // Escape to quit
102 if ctx.input.keyboard.is_pressed(KeyCode::Escape) {
103 ctx.quit();
104 }
105
106 // Update camera follow target
107 ctx.graphics.camera.follow(self.ball.position, 0.05);
108 }Sourcepub fn is_released(&self, button: MouseButton) -> bool
pub fn is_released(&self, button: MouseButton) -> bool
Was the button released this frame?
Sourcepub fn is_any_down(&self) -> bool
pub fn is_any_down(&self) -> bool
Is any mouse button held?
Sourcepub fn is_dragging(&self) -> bool
pub fn is_dragging(&self) -> bool
Check if the user is dragging with the left button.
Sourcepub fn drag_vector(&self) -> Option<Vec2>
pub fn drag_vector(&self) -> Option<Vec2>
Get the drag vector (from start to current position), or None if not dragging.
Sourcepub fn set_cursor_visible(&mut self, visible: bool)
pub fn set_cursor_visible(&mut self, visible: bool)
Set cursor visibility.
Sourcepub fn set_cursor_grabbed(&mut self, grabbed: bool)
pub fn set_cursor_grabbed(&mut self, grabbed: bool)
Set cursor grab (locks cursor to window).
Trait Implementations§
Source§impl Clone for MouseState
impl Clone for MouseState
Source§fn clone(&self) -> MouseState
fn clone(&self) -> MouseState
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for MouseState
impl Debug for MouseState
Auto Trait Implementations§
impl Freeze for MouseState
impl RefUnwindSafe for MouseState
impl Send for MouseState
impl Sync for MouseState
impl Unpin for MouseState
impl UnsafeUnpin for MouseState
impl UnwindSafe for MouseState
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more