use ecs::Component; use crate::builder; use crate::vector::Vec3; builder!( #[builder(name = Builder, derives=(Debug))] #[derive(Debug)] #[non_exhaustive] pub struct Transform { pub position: Vec3, pub scale: Vec3, } ); impl Transform { pub fn builder() -> Builder { Builder::default() } } impl Default for Transform { fn default() -> Self { Self::builder().build() } } impl Default for Builder { fn default() -> Self { Self { position: Vec3::from(0.0), scale: Vec3::from(1.0), } } } /// A position in world space. #[derive(Debug, Default, Clone, Copy, Component)] pub struct WorldPosition { pub position: Vec3, } impl From> for WorldPosition { fn from(position: Vec3) -> Self { Self { position } } } /// Scaling of a 3D object. #[derive(Debug, Clone, Copy, Component)] pub struct Scale { pub scale: Vec3, } impl From> for Scale { fn from(scale: Vec3) -> Self { Self { scale } } } impl Default for Scale { fn default() -> Self { Self { scale: Vec3 { x: 1.0, y: 1.0, z: 1.0 }, } } }