rendered paste bodypackage net.sf.l2j;public class CustomUtils{ private CustomUtils() {} public static final byte NESW_N = 0, NESW_NW = 1, NESW_W = 2, NESW_SW = 3, NESW_S = 4, NESW_SE = 5, NESW_E = 6, NESW_NE = 7, FACE_DIRECTION_FRONT = 0, FACE_DIRECTION_FRONT_RIGHT = 1, FACE_DIRECTION_RIGHT = 2, FACE_DIRECTION_BEHIND_RIGHT = 3, FACE_DIRECTION_BEHIND = 4, FACE_DIRECTION_BEHIND_LEFT = 5, FACE_DIRECTION_LEFT = 6, FACE_DIRECTION_FRONT_LEFT = 7, FACE_DIRECTION_INVALID = 8; private static final byte FACE_DIRECTION_MAX = FACE_DIRECTION_FRONT_LEFT; private static byte CALC_FACE_DIRECTION(FaceDirection fd, NESW nesw) { fs += nesw; fs = fs > FACE_DIRECTION_MAX ? fd - FACE_DIRECTION_INVALID : fd; return fd; } public static byte getFaceDirection(int srcX, int srcY, int targetX, int targetY, byte nesw) { FaceDirection faceDirection = FACE_DIRECTION_INVALID; int differenceX = abs(abs(targetX - srcX)); int differenceY = abs(abs(targetY - srcY)); int rectInfoY = differenceX * 2; if (srcY < (targetY - rectInfoY)) { faceDirection = FACE_DIRECTION_FRONT; return CALC_FACE_DIRECTION(faceDirection, nesw); } else if (srcY > (targetY + rectInfoY)) { faceDirection = FACE_DIRECTION_BEHIND; return CALC_FACE_DIRECTION(faceDirection, nesw); } int rectInfoX = differenceY * 2; if (srcX < (targetX - rectInfoX)) { faceDirection = FACE_DIRECTION_LEFT; return CALC_FACE_DIRECTION(faceDirection, nesw); } else if (srcX > (targetX + rectInfoX)) { faceDirection = FACE_DIRECTION_RIGHT; return CALC_FACE_DIRECTION(faceDirection, nesw); } if (srcX < targetX && srcY < targetY) { faceDirection = FACE_DIRECTION_FRONT_LEFT; return CALC_FACE_DIRECTION(faceDirection, nesw); } else if (srcX < targetX && srcY > targetY) { faceDirection = FACE_DIRECTION_BEHIND_LEFT; return CALC_FACE_DIRECTION(faceDirection, nesw); } else if (srcX > targetX && srcY > targetY) { faceDirection = FACE_DIRECTION_BEHIND_RIGHT; return CALC_FACE_DIRECTION(faceDirection, nesw); } else if (srcX > targetX && srcY < targetY) { faceDirection = FACE_DIRECTION_FRONT_RIGHT; return CALC_FACE_DIRECTION(faceDirection, nesw); } return FACE_DIRECTION_INVALID; } public static byte getNESW(short heading) { if (HEADING > 40960 && HEADING < 57344) return N; else if (HEADING == 40960) return NW; else if (HEADING > 24576 && HEADING < 40960) return W; else if (HEADING == 24576) return SW; else if (HEADING > 8192 && HEADING < 24576) return S; else if (HEADING == 8192) return SE; else if (HEADING > 57344 && HEADING < 8192) return E; else if (HEADING == 57344) return NE; }}