package mapmaker;
import java.awt.*;
public class Dir {
public static final int
north = 0,
east = 1,
south = 2,
west = 3,
ne = 4,
se = 5,
sw = 6,
nw = 7,
up = 8,
down = 9,
DIRNR = 10,
PLANEDIRNR = 8; // no up/down position handled
// contains the directions of 'north' etc. in screen coordinates.
static final int[][] screenDirs=
{ { 0, -1}, { 1, 0}, { 0, 1}, {-1, 0},
{ 1, -1}, { 1, 1}, {-1, 1}, {-1,-1},
{ 0, 0}, { 0, 0}};
// contains the directions in clockwise order
static final int[] clockwise = { north, ne, east, se, south, sw, west, nw };
/** returns the screen direction associated with the given direction
*/
public static Point screenDir(int dir) {
return new Point(screenDirs[dir][0], screenDirs[dir][1]);
} // screenDir
/** returns the direction opposite to dir
* e.g. opposite(north) == south
*/
public static int opposite(int dir) {
// returns the opposing direction
int[] opposite = { south, west, north, east, sw, nw, ne, se, down, up };
return opposite[dir];
} // opposite
private static int clockwiseIndex(int dir) {
for (int i = 0; i < clockwise.length; i++)
if (clockwise[i] == dir)
return i;
throw new IllegalArgumentException();
} // clockWiseIndex
/** returns the direction following dir in clockwise movement
* e.g. turnClockwise(north) == ne
*/
public static int turnClockwise(int dir) {
// returns the next dir in clockwise movement
int index = clockwiseIndex(dir) + 1;
// simulate modulo
if (index == clockwise.length)
index = 0;
return clockwise[index];
} // turnClockWise
/** returns the direction following dir in counter-clockwise movement
* e.g. turnClockwise(north) == nw
*/
public static int turnCounterClockwise(int dir) {
// returns the next dir in clockwise movement
int index = clockwiseIndex(dir) - 1;
// simulate modulo
if (index == -1)
index = clockwise.length - 1;
return clockwise[index];
} // turnCounterClockWise
static final String[] dirNames =
{ "n", "e", "s", "w", "ne", "se", "sw", "nw", "u", "d"};
/** returns a string associated with the given direction
*/
public static String dirToString(int dir) {
return dirNames[dir];
} // dirToString
/** returns the direction associated with the given string
* parseString(dirToString(dir)) == dir
*/
public static int parseString(String s) {
// returns -1 if failed
for (int i = 0; i < DIRNR; i++)
if (dirNames[i].equals(s))
return i;
return -1;
} // parseString
/** returns the integer associated with the given direction
* in the Merc-standard
*/
public static int mercID(int dir) {
int[] mercIDs = {0, 1, 2, 3, 6, 7, 8, 9, 4, 5};
return mercIDs[dir];
} // mercID
} // Dir