#[cfg(target_arch = "wasm32")]
use serde::{Deserialize, Serialize};
#[cfg(target_arch = "wasm32")]
use std::mem;
#[repr(u8)]
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)]
pub enum KeyCode {
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Num0,
Num1,
Num2,
Num3,
Num4,
Num5,
Num6,
Num7,
Num8,
Num9,
Right,
Left,
Down,
Up,
Escape,
Return,
Space,
Backspace,
Delete,
MouseLeft,
MouseRight,
MouseMiddle,
Touch,
}
#[cfg(not(target_arch = "wasm32"))]
#[derive(Copy, Clone)]
pub struct TouchPoint {
pub(crate) id: u32,
pub(crate) x: f64,
pub(crate) y: f64,
}
#[cfg(target_arch = "wasm32")]
#[derive(Copy, Clone, Deserialize, Serialize)]
pub struct TouchPoint {
pub(crate) id: u32,
pub(crate) x: f64,
pub(crate) y: f64,
}
impl TouchPoint {
pub fn id(&self) -> u32 {
self.id
}
pub fn pos(&self) -> (f64, f64) {
(self.x, self.y)
}
}
impl std::fmt::Debug for TouchPoint {
fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
if fmt.alternate() {
write!(
fmt,
"TouchPoint {{\n\tid: {},\n\tpos: {:?}\n}}",
self.id(),
self.pos()
)
} else {
write!(
fmt,
"TouchPoint {{ id: {}, pos: {:?} }}",
self.id(),
self.pos()
)
}
}
}
#[cfg(target_arch = "wasm32")]
impl KeyCode {
fn count() -> u8 {
KeyCode::Touch as u8 + 1
}
pub(crate) fn from_u8(id: u8) -> Option<KeyCode> {
if id < Self::count() {
Some(unsafe { mem::transmute(id) })
} else {
None
}
}
}