#include "Area.h" Direction getOppositeDirection(Direction dir) { switch (dir) { case NORTH: return SOUTH; case EAST: return WEST; case SOUTH: return NORTH; case WEST: return EAST; case TOP: return BOTTOM; case BOTTOM: return TOP; default: return NO_DIRECTION; } } Directions getDirections( Framework::Vec3 currentPos, Framework::Vec3 otherPos) { Directions result = NO_DIRECTION; if (currentPos.x < otherPos.x) result |= EAST; if (currentPos.x > otherPos.x) result |= WEST; if (currentPos.y < otherPos.y) result |= SOUTH; if (currentPos.y > otherPos.y) result |= NORTH; if (currentPos.z < otherPos.z) result |= TOP; if (currentPos.z > otherPos.z) result |= BOTTOM; return result; } Framework::Vec3 getDirection(Directions dir) { Framework::Vec3 result(0, 0, 0); if ((dir | NORTH) == dir) --result.y; if ((dir | EAST) == dir) ++result.x; if ((dir | SOUTH) == dir) ++result.y; if ((dir | WEST) == dir) --result.x; if ((dir | TOP) == dir) ++result.z; if ((dir | BOTTOM) == dir) --result.z; return result; } int getDirectionIndex(Direction dir) { if (dir == NORTH) return 0; if (dir == EAST) return 1; if (dir == SOUTH) return 2; if (dir == WEST) return 3; if (dir == TOP) return 4; if (dir == BOTTOM) return 5; assert(false); return -1; } Direction getDirectionFromIndex(int index) { return (Direction)(1 << index); }