diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 21:27:56 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 21:27:56 +0200 |
commit | 3f5492b2bb67326be43cd7c5ba02ccf0ba1ae0e3 (patch) | |
tree | 96963ba885a9393106b4a88ffc4266203e87582e /2019-worms/src/geometry/vec.rs | |
parent | 4ceec65b088f05d4ad03f9ac70b1d63452fd8197 (diff) |
Refile for merging repos
Diffstat (limited to '2019-worms/src/geometry/vec.rs')
-rw-r--r-- | 2019-worms/src/geometry/vec.rs | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/2019-worms/src/geometry/vec.rs b/2019-worms/src/geometry/vec.rs new file mode 100644 index 0000000..375a0f9 --- /dev/null +++ b/2019-worms/src/geometry/vec.rs @@ -0,0 +1,62 @@ +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<i8> 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, + } + } +} |