use he3d_math::{Mat4, Quat, Vec3};
#[derive(Clone, Copy, PartialEq, Debug)]
pub struct Transform {
pub position: Vec3,
pub orientation: Quat,
pub scale: Vec3,
}
impl Transform {
#[must_use]
pub const fn from_position(position: Vec3) -> Self {
Self {
position,
orientation: Quat::IDENTITY,
scale: Vec3::ONE,
}
}
#[must_use]
pub const fn from_position_orientation(position: Vec3, orientation: Quat) -> Self {
Self {
position,
orientation,
scale: Vec3::ONE,
}
}
#[inline]
#[must_use]
pub fn to_matrix(self) -> Mat4 {
Mat4::from_scale_rotation_translation(self.scale, self.orientation, self.position)
}
#[inline]
#[must_use]
pub fn forward(self) -> Vec3 {
self.orientation * Vec3::Z
}
#[inline]
#[must_use]
pub fn up(self) -> Vec3 {
self.orientation * Vec3::Y
}
#[inline]
#[must_use]
pub fn right(self) -> Vec3 {
self.orientation * Vec3::X
}
}
impl Default for Transform {
fn default() -> Self {
Self {
position: Vec3::ZERO,
orientation: Quat::IDENTITY,
scale: Vec3::ONE,
}
}
}