use std::collections::HashSet;
use sdl3::{mouse::MouseButton, render::FPoint};
fn pressed_mouse_button_set(e: &sdl3::EventPump) -> HashSet<MouseButton> {
e.mouse_state().pressed_mouse_buttons().collect()
}
fn newly_pressed(old: &HashSet<MouseButton>, new: &HashSet<MouseButton>) -> HashSet<MouseButton> {
new - old
}
pub struct MouseHelper {
old: HashSet<MouseButton>,
pressed: bool,
pos: FPoint,
}
impl MouseHelper {
pub fn new(e: &sdl3::EventPump) -> Self {
let old = pressed_mouse_button_set(e);
Self {
old,
pressed: false,
pos: FPoint::new(-1.0, -1.0),
}
}
pub fn process(&mut self, e: &sdl3::EventPump) {
let current_mouse_pressed = pressed_mouse_button_set(e);
let newly_pressed = newly_pressed(&self.old, ¤t_mouse_pressed);
self.pressed = newly_pressed.contains(&MouseButton::Left);
let x = e.mouse_state().x();
let y = e.mouse_state().y();
self.pos.x = x;
self.pos.y = y;
self.old = current_mouse_pressed;
}
pub fn is_left_button_pressed(&self) -> bool {
self.pressed
}
pub fn get_mouse_pos(&self) -> &FPoint {
&self.pos
}
}