diff options
Diffstat (limited to 'engine/src/windowing/mouse.rs')
| -rw-r--r-- | engine/src/windowing/mouse.rs | 21 |
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(); |
