#pragma once #include #include namespace devilution { enum class Direction : std::uint8_t { South, SouthWest, West, NorthWest, North, NorthEast, East, SouthEast, }; /** Maps from direction to a left turn from the direction. */ constexpr Direction Left(Direction facing) { //Direction left[8] = { Direction::SouthEast, Direction::South, Direction::SouthWest, Direction::West, Direction::NorthWest, Direction::North, Direction::NorthEast, Direction::East }; return static_cast((static_cast>(facing) + 7) % 8); } /** Maps from direction to a right turn from the direction. */ constexpr Direction Right(Direction facing) { //Direction right[8] = { Direction::SouthWest, Direction::West, Direction::NorthWest, Direction::North, Direction::NorthEast, Direction::East, Direction::SouthEast, Direction::South }; return static_cast((static_cast>(facing) + 1) % 8); } /** Maps from direction to the opposite direction. */ constexpr Direction Opposite(Direction facing) { //Direction opposite[8] = { Direction::North, Direction::NorthEast, Direction::East, Direction::SouthEast, Direction::South, Direction::SouthWest, Direction::West, Direction::NorthWest }; return static_cast((static_cast>(facing) + 4) % 8); } } // namespace devilution