use wasm4fun_core::{MOUSE_BUTTONS, MOUSE_X, MOUSE_Y};
#[derive(Clone, Copy)]
pub struct Mouse;
static mut PREVIOUS_BUTTONS: u8 = 0;
impl Mouse {
pub fn update(&self) {
unsafe { PREVIOUS_BUTTONS = *MOUSE_BUTTONS }
}
pub fn coordinates(&self) -> (i16, i16) {
unsafe { (*MOUSE_X, *MOUSE_Y) }
}
pub fn x(&self) -> i16 {
unsafe { *MOUSE_X }
}
pub fn y(&self) -> i16 {
unsafe { *MOUSE_Y }
}
pub fn left_pressed(&self) -> bool {
left_pressed(unsafe { *MOUSE_BUTTONS })
}
pub fn right_pressed(&self) -> bool {
right_pressed(unsafe { *MOUSE_BUTTONS })
}
pub fn middle_pressed(&self) -> bool {
middle_pressed(unsafe { *MOUSE_BUTTONS })
}
pub fn left_clicked(&self) -> bool {
let current_unpressed = !left_pressed(unsafe { *MOUSE_BUTTONS });
let previously_pressed = left_pressed(unsafe { PREVIOUS_BUTTONS });
current_unpressed && previously_pressed
}
pub fn right_clicked(&self) -> bool {
let current_unpressed = !right_pressed(unsafe { *MOUSE_BUTTONS });
let previously_pressed = right_pressed(unsafe { PREVIOUS_BUTTONS });
current_unpressed && previously_pressed
}
pub fn middle_clicked(&self) -> bool {
let current_unpressed = !middle_pressed(unsafe { *MOUSE_BUTTONS });
let previously_pressed = middle_pressed(unsafe { PREVIOUS_BUTTONS });
current_unpressed && previously_pressed
}
}
fn left_pressed(value: u8) -> bool {
(value & 0b001) != 0
}
fn right_pressed(value: u8) -> bool {
(value & 0b010) != 0
}
fn middle_pressed(value: u8) -> bool {
(value & 0b100) != 0
}