#ifndef DIRECTION_H_AB66A90E #define DIRECTION_H_AB66A90E #include #include #include "vector.h" enum class Direction { up, up_right, right, down_right, down, down_left, left, up_left }; inline Direction directionFromString(std::string_view str) { if (str == "up") return Direction::up; if (str == "up_right") return Direction::up_right; if (str == "right") return Direction::right; if (str == "down_right") return Direction::down_right; if (str == "down") return Direction::down; if (str == "down_left") return Direction::down_left; if (str == "left") return Direction::left; if (str == "up_left") return Direction::up_left; throw std::invalid_argument("Invalid direction: " + std::string(str)); } inline vec2i unitVecInDirection(Direction dir) { switch (dir) { case Direction::up: return { 0, -1 }; case Direction::up_right: return { 1, -1 }; case Direction::right: return { 1, 0 }; case Direction::down_right: return { 1, 1 }; case Direction::down: return { 0, 1 }; case Direction::down_left: return { -1, 1 }; case Direction::left: return { -1, 0 }; case Direction::up_left: return { -1, -1 }; } } #endif /* end of include guard: DIRECTION_H_AB66A90E */