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