public static OffsetCoord QoffsetFromCube(OffsetCoord.Parity offset, Hex h) { var col = h.q; var row = h.r + (h.q + (int)offset * (h.q & 1)) / 2; if (offset != OffsetCoord.Parity.Even && offset != OffsetCoord.Parity.Odd) { throw new ArgumentException("offset must be EVEN (+1) or ODD (-1)"); } return(new OffsetCoord(col, row)); }
public static Hex RoffsetToCube(OffsetCoord.Parity offset, OffsetCoord h) { var q = h.col - (h.row + (int)offset * (h.row & 1)) / 2; var r = h.row; var s = -q - r; if (offset != OffsetCoord.Parity.Even && offset != OffsetCoord.Parity.Odd) { throw new ArgumentException("offset must be EVEN (+1) or ODD (-1)"); } return(new Hex(q, r, s)); }