use geom::Vector;
use input::ButtonState;
use std::ops::Index;
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
pub enum MouseButton {
Left = 0,
Right = 1,
Middle = 2
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Mouse {
pub(crate) pos: Vector,
pub(crate) buttons: [ButtonState; 3],
pub(crate) wheel: Vector
}
impl Mouse {
pub(crate) fn process_button(&mut self, button: MouseButton, state: ButtonState) {
self.buttons[button as usize] = self.buttons[button as usize].update(state);
}
pub(crate) fn clear_temporary_states(&mut self) {
self.wheel = Vector::ZERO;
for button in self.buttons.iter_mut() {
*button = button.clear_temporary();
}
}
pub fn pos(&self) -> Vector {
self.pos
}
pub fn wheel(&self) -> Vector {
self.wheel
}
}
impl Index<MouseButton> for Mouse {
type Output = ButtonState;
fn index(&self, index: MouseButton) -> &ButtonState {
&self.buttons[index as usize]
}
}