about summary refs log tree commit diff stats
path: root/data/maps/the_bearer/README
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-09-11 16:48:35 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-09-11 16:48:35 -0400
commit464caff6810f385a5dd08b098cb1ae6eb1595597 (patch)
tree46991bab331f293330cc3052c3231bf2e0c4052b /data/maps/the_bearer/README
parent1565d6226adf72fd5879a286a8835b29ed340bd1 (diff)
downloadlingo2-archipelago-464caff6810f385a5dd08b098cb1ae6eb1595597.tar.gz
lingo2-archipelago-464caff6810f385a5dd08b098cb1ae6eb1595597.tar.bz2
lingo2-archipelago-464caff6810f385a5dd08b098cb1ae6eb1595597.zip
Bump versions
Diffstat (limited to 'data/maps/the_bearer/README')
0 files changed, 0 insertions, 0 deletions
ef='#n52'>52 53
54




                            
                   























                                                                        












                                                









                                                                                                                              
                                                       
#ifndef DIRECTION_H_AB66A90E
#define DIRECTION_H_AB66A90E

#include <string>
#include <stdexcept>
#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 };
  }
}

inline bool dirHasDir(Direction value, Direction inner) {
  switch (inner) {
    case Direction::up: return value == Direction::up_left || value == Direction::up || value == Direction::up_right;
    case Direction::down: return value == Direction::down_left || value == Direction::down || value == Direction::down_right;
    case Direction::left: return value == Direction::up_left || value == Direction::left || value == Direction::down_left;
    case Direction::right: return value == Direction::up_right || value == Direction::right || value == Direction::down_right;
    default: return value == inner;
  }
}

#endif /* end of include guard: DIRECTION_H_AB66A90E */