|
|
@@ -0,0 +1,69 @@ |
|
|
|
use std::convert::From; |
|
|
|
|
|
|
|
pub struct CartesianVector(usize, usize); |
|
|
|
pub struct IsometricVector(usize, usize); |
|
|
|
pub struct Vector3d(usize, usize, usize); |
|
|
|
|
|
|
|
impl Vector3d { |
|
|
|
pub fn x(&self) -> usize { |
|
|
|
self.0 |
|
|
|
} |
|
|
|
|
|
|
|
pub fn y(&self) -> usize { |
|
|
|
self.1 |
|
|
|
} |
|
|
|
|
|
|
|
pub fn z(&self) -> usize { |
|
|
|
self.2 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<(usize, usize, usize)> for Vector3d { |
|
|
|
fn from(tuple: (usize, usize, usize)) -> Vector3d { |
|
|
|
Vector3d(tuple.0, tuple.1, tuple.2) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl CartesianVector { |
|
|
|
pub fn x(&self) -> usize { |
|
|
|
self.0 |
|
|
|
} |
|
|
|
|
|
|
|
pub fn y(&self) -> usize { |
|
|
|
self.1 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl IsometricVector { |
|
|
|
pub fn x(&self) -> usize { |
|
|
|
self.0 |
|
|
|
} |
|
|
|
|
|
|
|
pub fn y(&self) -> usize { |
|
|
|
self.1 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<(usize, usize)> for CartesianVector { |
|
|
|
fn from(tuple: (usize, usize)) -> CartesianVector { |
|
|
|
CartesianVector(tuple.0, tuple.1) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<IsometricVector> for CartesianVector { |
|
|
|
fn from(iso: IsometricVector) -> CartesianVector { |
|
|
|
CartesianVector((2 * iso.y() + iso.x()) / 2, (2 * iso.y() - iso.x()) / 2) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<CartesianVector> for IsometricVector { |
|
|
|
fn from(cart: CartesianVector) -> IsometricVector { |
|
|
|
IsometricVector(cart.x() - cart.y(), (cart.x() + cart.y()) / 2) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
impl From<(usize, usize)> for IsometricVector { |
|
|
|
fn from(tuple: (usize, usize)) -> IsometricVector { |
|
|
|
IsometricVector(tuple.0, tuple.1) |
|
|
|
} |
|
|
|
} |