#[derive(Clone, Copy, Debug, PartialEq)]
pub struct TyQuaternion<T> {
pub x: T,
pub y: T,
pub z: T,
pub w: T,
}
impl<T> TyQuaternion<T> {
pub fn new(x: T, y: T, z: T, w: T) -> Self {
Self { x, y, z, w }
}
}
macro_rules! impl_ty_quaternion_float {
($t:ty) => {
impl TyQuaternion<$t> {
pub fn identity() -> Self {
Self {
x: 0.0,
y: 0.0,
z: 0.0,
w: 1.0,
}
}
}
impl Default for TyQuaternion<$t> {
fn default() -> Self {
Self::identity()
}
}
};
}
impl_ty_quaternion_float!(f32);
impl_ty_quaternion_float!(f64);