use std::ops::*; #[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)] pub struct Vec2d { pub x: i8, pub y: i8, } impl Vec2d { pub const fn new(x: i8, y: i8) -> Vec2d { Vec2d { x, y } } pub fn magnitude_squared(&self) -> i8 { self.x .saturating_pow(2) .saturating_add(self.y.saturating_pow(2)) } } impl Add for Vec2d { type Output = Self; fn add(self, other: Self) -> Self { Vec2d { x: self.x.saturating_add(other.x), y: self.y.saturating_add(other.y), } } } impl Sub for Vec2d { type Output = Self; fn sub(self, other: Self) -> Self { Vec2d { x: self.x.saturating_sub(other.x), y: self.y.saturating_sub(other.y), } } } impl Mul for Vec2d { type Output = Self; fn mul(self, other: i8) -> Self { Vec2d { x: self.x.saturating_mul(other), y: self.y.saturating_mul(other), } } } impl Neg for Vec2d { type Output = Self; fn neg(self) -> Self { Vec2d { x: -self.x, y: -self.y, } } }