1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
//! Transform component.
use crate::prelude::*;
/// The main transform component.
///
/// Currently we don't have a hierarchy, and this is therefore a global transform.
#[derive(Clone, Copy, Debug, HasSchema)]
#[repr(C)]
pub struct Transform {
/// The position of the entity in the world.
pub translation: Vec3,
/// The rotation of the entity.
pub rotation: Quat,
/// The scale of the entity.
pub scale: Vec3,
}
impl Default for Transform {
fn default() -> Self {
Self {
translation: Default::default(),
rotation: Default::default(),
scale: Vec3::ONE,
}
}
}
impl Transform {
/// Create a transform from a translation.
pub fn from_translation(translation: Vec3) -> Self {
Self {
translation,
..default()
}
}
/// Create a transform from a rotation.
pub fn from_rotation(rotation: Quat) -> Self {
Self {
rotation,
..default()
}
}
/// Create a transform from a scale.
pub fn from_scale(scale: Vec3) -> Self {
Self { scale, ..default() }
}
}