diff --git a/common/rust/src/vec2.rs b/common/rust/src/vec2.rs index d05e710..57fa4db 100644 --- a/common/rust/src/vec2.rs +++ b/common/rust/src/vec2.rs @@ -1,5 +1,6 @@ use std::{ - ops::{Add, AddAssign, Sub, SubAssign}, + fmt, + ops::{Add, AddAssign, Mul, Sub, SubAssign}, str::FromStr, }; @@ -22,6 +23,17 @@ impl Vec2 { y: f(self.y), } } + + #[must_use] + pub fn len(self) -> f64 { + (f64::from(self.x).powi(2) + f64::from(self.y).powi(2)).sqrt() + } +} + +impl fmt::Display for Vec2 { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{:?}", (self.x, self.y)) + } } impl Add for Vec2 { @@ -60,6 +72,28 @@ impl SubAssign for Vec2 { } } +impl Mul for Vec2 { + type Output = Self; + + fn mul(self, n: i32) -> Self::Output { + Vec2 { + x: self.x * n, + y: self.y * n, + } + } +} + +impl Mul for i32 { + type Output = Vec2; + + fn mul(self, Vec2 { x, y }: Vec2) -> Self::Output { + Vec2 { + x: x * self, + y: y * self, + } + } +} + impl From<(i32, i32)> for Vec2 { fn from((x, y): (i32, i32)) -> Self { Self { x, y }