use core::ops::{Add, Mul, Sub}; #[derive(Clone, Copy, Default)] pub struct Vec3 { pub x: f32, pub y: f32, pub z: f32, } impl Vec3 { pub const ZERO: Self = Self { x: 0.0, y: 0.0, z: 0.0 }; pub const Y: Self = Self { x: 0.0, y: 1.0, z: 0.0 }; pub const fn new(x: f32, y: f32, z: f32) -> Self { Self { x, y, z } } pub fn dot(self, rhs: Self) -> f32 { self.x * rhs.x + self.y * rhs.y + self.z * rhs.z } } impl Add for Vec3 { type Output = Self; fn add(self, rhs: Self) -> Self { Self::new(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z) } } impl Sub for Vec3 { type Output = Self; fn sub(self, rhs: Self) -> Self { Self::new(self.x - rhs.x, self.y - rhs.y, self.z - rhs.z) } } impl Mul for Vec3 { type Output = Self; fn mul(self, rhs: f32) -> Self { Self::new(self.x * rhs, self.y * rhs, self.z * rhs) } }