diff options
Diffstat (limited to 'src/geometry')
-rw-r--r-- | src/geometry/direction.rs | 67 | ||||
-rw-r--r-- | src/geometry/point.rs | 37 | ||||
-rw-r--r-- | src/geometry/vec.rs | 62 |
3 files changed, 0 insertions, 166 deletions
diff --git a/src/geometry/direction.rs b/src/geometry/direction.rs deleted file mode 100644 index e37f750..0000000 --- a/src/geometry/direction.rs +++ /dev/null @@ -1,67 +0,0 @@ -use crate::geometry::vec::Vec2d; -use std::fmt; - -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub enum Direction { - North, - NorthEast, - East, - SouthEast, - South, - SouthWest, - West, - NorthWest, -} - -impl fmt::Display for Direction { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use Direction::*; - let s = match self { - North => "N", - NorthEast => "NE", - East => "E", - SouthEast => "SE", - South => "S", - SouthWest => "SW", - West => "W", - NorthWest => "NW", - }; - f.write_str(s) - } -} - -impl Direction { - pub fn is_diagonal(&self) -> bool { - use Direction::*; - - match self { - NorthEast | SouthEast | SouthWest | NorthWest => true, - _ => false, - } - } - - pub fn as_vec(&self) -> Vec2d { - use Direction::*; - match self { - North => Vec2d::new(0, -1), - NorthEast => Vec2d::new(1, -1), - East => Vec2d::new(1, 0), - SouthEast => Vec2d::new(1, 1), - South => Vec2d::new(0, 1), - SouthWest => Vec2d::new(-1, 1), - West => Vec2d::new(-1, 0), - NorthWest => Vec2d::new(-1, -1), - } - } - - pub const ALL: [Direction; 8] = [ - Direction::North, - Direction::NorthEast, - Direction::East, - Direction::SouthEast, - Direction::South, - Direction::SouthWest, - Direction::West, - Direction::NorthWest, - ]; -} diff --git a/src/geometry/point.rs b/src/geometry/point.rs deleted file mode 100644 index 1ab9b36..0000000 --- a/src/geometry/point.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::geometry::vec::*; - -use std::ops::*; - -#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)] -pub struct Point2d { - pub x: i8, - pub y: i8, -} - -impl Point2d { - pub fn new(x: i8, y: i8) -> Point2d { - Point2d { x, y } - } -} - -impl Add<Vec2d> for Point2d { - type Output = Self; - - fn add(self, other: Vec2d) -> Self { - Point2d { - x: self.x.saturating_add(other.x), - y: self.y.saturating_add(other.y), - } - } -} - -impl Sub for Point2d { - type Output = Vec2d; - - fn sub(self, other: Self) -> Vec2d { - Vec2d { - x: self.x.saturating_sub(other.x), - y: self.y.saturating_sub(other.y), - } - } -} diff --git a/src/geometry/vec.rs b/src/geometry/vec.rs deleted file mode 100644 index 375a0f9..0000000 --- a/src/geometry/vec.rs +++ /dev/null @@ -1,62 +0,0 @@ -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, - } - } -} |