summaryrefslogtreecommitdiff
path: root/engine/src/windowing/mouse.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/windowing/mouse.rs')
-rw-r--r--engine/src/windowing/mouse.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/engine/src/windowing/mouse.rs b/engine/src/windowing/mouse.rs
index 1afe594..0ea04e2 100644
--- a/engine/src/windowing/mouse.rs
+++ b/engine/src/windowing/mouse.rs
@@ -6,9 +6,17 @@ use crate::vector::Vec2;
#[derive(Debug, Default, Clone, Sole)]
#[non_exhaustive]
-pub struct Motion
+pub struct Mouse
{
- pub position_delta: Vec2<f64>,
+ /// Change in coordinates this tick. Unit is unspecified and platforms may use
+ /// different units. Updated automatically by the [`windowing extension`].
+ ///
+ /// [`windowing extension`]: crate::windowing
+ pub curr_tick_position_delta: Vec2<f64>,
+
+ /// Coordinates in pixels relative to the top-left corner of the window. May have
+ /// been affected by cursor acceleration
+ pub position: Vec2<f64>,
}
/// Mouse buttons.
@@ -38,6 +46,15 @@ impl Buttons
button_data.previous_state
}
+ /// Returns a iterator that yields buttons and their current states. Only buttons with
+ /// states is included.
+ pub fn all_current(&self) -> impl Iterator<Item = (Button, ButtonState)>
+ {
+ self.map
+ .iter()
+ .map(|(button, button_data)| (button.clone(), button_data.current_state))
+ }
+
pub fn set(&mut self, button: Button, button_state: ButtonState)
{
let button_data = self.map.entry(button).or_default();