use core::ops::{Add, Mul, Sub}; use crate::pxl8::pxl8_vec3; pub type Vec3 = pxl8_vec3; pub const VEC3_ZERO: Vec3 = Vec3 { x: 0.0, y: 0.0, z: 0.0 }; pub const VEC3_Y: Vec3 = Vec3 { x: 0.0, y: 1.0, z: 0.0 }; pub trait Vec3Ext { fn new(x: f32, y: f32, z: f32) -> Self; fn dot(self, rhs: Self) -> f32; } impl Vec3Ext for pxl8_vec3 { fn new(x: f32, y: f32, z: f32) -> Self { Self { x, y, z } } fn dot(self, rhs: Self) -> f32 { self.x * rhs.x + self.y * rhs.y + self.z * rhs.z } } impl Default for pxl8_vec3 { fn default() -> Self { VEC3_ZERO } } impl Add for pxl8_vec3 { type Output = Self; fn add(self, rhs: Self) -> Self { Self { x: self.x + rhs.x, y: self.y + rhs.y, z: self.z + rhs.z, } } } impl Sub for pxl8_vec3 { type Output = Self; fn sub(self, rhs: Self) -> Self { Self { x: self.x - rhs.x, y: self.y - rhs.y, z: self.z - rhs.z, } } } impl Mul for pxl8_vec3 { type Output = Self; fn mul(self, rhs: f32) -> Self { Self { x: self.x * rhs, y: self.y * rhs, z: self.z * rhs, } } }