use super::input::Input;
use lotus_proc_macros::Resource;
use std::collections::HashSet;
use winit::event::MouseButton;
#[derive(Clone, Debug, Resource)]
pub struct MouseInput {
pub pressed: HashSet<MouseButton>,
pub previously_pressed: HashSet<MouseButton>,
pub mouse_position: MousePosition,
}
impl Input for MouseInput {
fn update_hashes(&mut self) {
self.previously_pressed = self.pressed.clone();
}
fn is_some_pressed(&self) -> bool {
return self.pressed.len() > 0;
}
fn is_some_released(&self) -> bool {
return self.previously_pressed.len() > 0;
}
}
impl Default for MouseInput {
fn default() -> Self {
return Self {
pressed: HashSet::new(),
previously_pressed: HashSet::new(),
mouse_position: MousePosition::default(),
};
}
}
impl MouseInput {
pub fn is_mouse_button_pressed(&self, mouse_button: MouseButton) -> bool {
return self.pressed.contains(&mouse_button);
}
pub fn is_mouse_button_released(&self, mouse_button: MouseButton) -> bool {
return self.previously_pressed.contains(&mouse_button)
&& !self.pressed.contains(&mouse_button);
}
}
#[derive(Clone, Debug)]
pub struct MousePosition {
pub x: f32,
pub y: f32,
}
impl Default for MousePosition {
fn default() -> Self {
return Self { x: 0.0, y: 0.0 };
}
}