public IdealHex(Coords c) { // determine origin double ox = c.getX() * XCONST * 3; double oy = c.getY() * 2 + (c.isXOdd() ? 1 : 0); // center cx = ox + (XCONST * 2); cy = oy + 1; x[0] = ox + XCONST; x[1] = ox + (XCONST * 3); x[2] = ox + (XCONST * 4); x[3] = x[1]; x[4] = x[0]; x[5] = ox; y[0] = oy; y[1] = oy; y[2] = cy; y[3] = oy + 2; y[4] = y[3]; y[5] = y[2]; }
/** * Returns the distance to another coordinate. */ public final int distance(Coords c) { // based off of // http://www.rossmack.com/ab/RPG/traveller/AstroHexDistance.asp // since I'm too dumb to make my own int xd, ym, ymin, ymax, yo; xd = Math.abs(this.getX() - c.getX()); yo = (xd / 2) + (!isXOdd() && c.isXOdd() ? 1 : 0); ymin = this.getY() - yo; ymax = ymin + xd; ym = 0; if (c.getY() < ymin) { ym = ymin - c.getY(); } if (c.getY() > ymax) { ym = c.getY() - ymax; } return xd + ym; }