[][src]Enum gridly::prelude::Direction

pub enum Direction {
    Up,
    Right,
    Down,
    Left,
}

The four cardinal directions: Up, Down, Left, and Right. Direction implements a number of simple helper methods. It also implements VectorLike, which allows it to be used in contexts where a Vector can be used as a unit vector in the given direction (for example, with Vector arithmetic).

Variants

Up

The negative row direction

Right

The positive column direction

Down

The positive row direction

Left

The negative column direction

Implementations

impl Direction[src]

#[must_use]pub fn from_name(name: &str) -> Option<Self>[src]

Parse a direction name into a direction. Currently supported names are (case insensitive):

  • Up: Up, North, U, N
  • Down: Down, South, D, S
  • Left: Left, West, L, W
  • Right: Right, East, R, E

Example

use gridly::prelude::*;

assert_eq!(Direction::from_name("up"), Some(Up));
assert_eq!(Direction::from_name("West"), Some(Left));
assert_eq!(Direction::from_name("Foo"), None);

#[must_use]pub fn sized_vec(self, length: isize) -> Vector[src]

Return a vector with the given length in this direction

Example:

use gridly::prelude::*;

assert_eq!(Up.sized_vec(2), Vector::new(-2, 0));
assert_eq!(Down.sized_vec(3), Vector::new(3, 0));
assert_eq!(Left.sized_vec(1), Vector::new(0, -1));
assert_eq!(Right.sized_vec(5), Vector::new(0, 5));

#[must_use]pub fn unit_vec(self) -> Vector[src]

Return the unit vector in the given direction.

Example:

use gridly::prelude::*;

assert_eq!(Up.unit_vec(), Vector::new(-1, 0));
assert_eq!(Down.unit_vec(), Vector::new(1, 0));
assert_eq!(Left.unit_vec(), Vector::new(0, -1));
assert_eq!(Right.unit_vec(), Vector::new(0, 1));

#[must_use]pub fn is_vertical(self) -> bool[src]

True if this is Up or Down

Example:

use gridly::direction::*;

assert!(Up.is_vertical());
assert!(Down.is_vertical());
assert!(!Left.is_vertical());
assert!(!Right.is_vertical());

#[must_use]pub fn is_horizontal(self) -> bool[src]

True if this is Left or Right

Example:

use gridly::direction::*;

assert!(!Up.is_horizontal());
assert!(!Down.is_horizontal());
assert!(Left.is_horizontal());
assert!(Right.is_horizontal());

#[must_use]pub fn reverse(self) -> Direction[src]

Reverse this direction (UpDown, etc)

use gridly::direction::*;

assert_eq!(Up.reverse(), Down);
assert_eq!(Down.reverse(), Up);
assert_eq!(Left.reverse(), Right);
assert_eq!(Right.reverse(), Left);

#[must_use]pub fn clockwise(self) -> Direction[src]

Rotate this direction clockwise

Example:

use gridly::direction::*;

assert_eq!(Up.clockwise(), Right);
assert_eq!(Down.clockwise(), Left);
assert_eq!(Left.clockwise(), Up);
assert_eq!(Right.clockwise(), Down);

#[must_use]pub fn anticlockwise(self) -> Direction[src]

Rotate this direction counterclockwise

Example:

use gridly::direction::*;

assert_eq!(Up.anticlockwise(), Left);
assert_eq!(Down.anticlockwise(), Right);
assert_eq!(Left.anticlockwise(), Down);
assert_eq!(Right.anticlockwise(), Up);

#[must_use]pub fn rotate(self, rotation: Rotation) -> Direction[src]

Rotate this direction by the given rotation.

Example

use gridly::rotation::*;
use gridly::direction::*;

assert_eq!(Up.rotate(Clockwise), Right);
assert_eq!(Down.rotate(Rotation::None), Down);
assert_eq!(Left.rotate(Anticlockwise), Down);
assert_eq!(Right.rotate(Rotation::Flip), Left);

#[must_use]pub fn rotation_to(self, target: Direction) -> Rotation[src]

Given a target direction, get the rotation that rotates this direction to that one.

Example

use gridly::direction::*;
use gridly::rotation::*;

assert_eq!(Up.rotation_to(Right), Clockwise);
assert_eq!(Down.rotation_to(Up), Rotation::Flip);
assert_eq!(Left.rotation_to(Down), Anticlockwise);
assert_eq!(Up.rotation_to(Up), Rotation::None);

Trait Implementations

impl<T: VectorLike> Add<T> for Direction[src]

Adding a Vector to a Direction is equivelent to adding it to a unit vector in the given direction. Note that, because Direction itself implements VectorLike, this means you can add together a sequence of directions to get a Vector.

Example:

use gridly::vector::Vector;
use gridly::direction::*;

let base = Vector::new(3, 4);

assert_eq!(Up + base, Vector::new(2, 4));
assert_eq!(Down + base, Vector::new(4, 4));
assert_eq!(Right + base, Vector::new(3, 5));
assert_eq!(Left + base, Vector::new(3, 3));

assert_eq!(Up + Right + Up + Up, Vector::new(-3, 1));

type Output = Vector

The resulting type after applying the + operator.

impl Clone for Direction[src]

impl Copy for Direction[src]

impl Debug for Direction[src]

impl Eq for Direction[src]

impl Hash for Direction[src]

impl Mul<isize> for Direction[src]

Multiplying a Direction by an isize produces a Vector of the given length in the given direction

Example:

use gridly::direction::*;
use gridly::vector::Vector;

assert_eq!(Up * 5, Vector::new(-5, 0));
assert_eq!(Down * 3, Vector::new(3, 0));
assert_eq!(Left * 2, Vector::new(0, -2));
assert_eq!(Right * 4, Vector::new(0, 4));

type Output = Vector

The resulting type after applying the * operator.

impl Neg for Direction[src]

Negating a Direction reverses it

Example:

use gridly::direction::*;

assert_eq!(-Up, Down);
assert_eq!(-Down, Up);
assert_eq!(-Left, Right);
assert_eq!(-Right, Left);

type Output = Direction

The resulting type after applying the - operator.

impl PartialEq<Direction> for Direction[src]

impl StructuralEq for Direction[src]

impl StructuralPartialEq for Direction[src]

impl<T: VectorLike> Sub<T> for Direction[src]

Subtracting a Vector from a Direction is equivelent to subtracing it from a unit vector in the given direction

Example:

use gridly::vector::Vector;
use gridly::direction::*;

let base = Vector::new(3, 3);

assert_eq!(Up - base, Vector::new(-4, -3));
assert_eq!(Down - base, Vector::new(-2, -3));
assert_eq!(Right - base, Vector::new(-3, -2));
assert_eq!(Left - base, Vector::new(-3, -4));

type Output = Vector

The resulting type after applying the - operator.

impl VectorLike for Direction[src]

A Direction acts like a unit vector in the given direction. This allows it to be used in things like Vector arithmetic.

Example:

use gridly::prelude::*;

assert_eq!(Vector::new(1, 1) + Up, Vector::new(0, 1));
assert_eq!(Location::new(3, 4) - Left, Location::new(3, 5));

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.