use rand::prelude::*;
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
pub enum Direction {
North,
East,
South,
West,
}
impl Direction {
pub fn opposite(&self) -> Direction {
match self {
Direction::North => Direction::South,
Direction::East => Direction::West,
Direction::South => Direction::North,
Direction::West => Direction::East,
}
}
pub fn gen_random_order(rng: &mut impl Rng) -> [Direction; 4] {
let mut directions = Self::all();
directions.shuffle(rng);
directions
}
pub fn all() -> [Direction; 4] {
[
Direction::North,
Direction::East,
Direction::South,
Direction::West,
]
}
}
impl std::fmt::Display for Direction {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str(match self {
Direction::North => "North",
Direction::East => "East",
Direction::South => "South",
Direction::West => "West",
})
}
}