public TezHexOffsetCoordinate toOffset(TezHexGrid.Layout layout) { switch (layout) { case TezHexGrid.Layout.Pointy: { ///-5, 0, 5 ///-5 + (5 + (5 & 1) >> 1) ///-5 + (6 >> 1) ///-5 + 3 = -2 /// = 5 var q = x + (z + (z & 1) >> 1); var r = z; return(new TezHexOffsetCoordinate(q, r)); } case TezHexGrid.Layout.Flat: { var q = x; var r = z + (x + (x & 1) >> 1); return(new TezHexOffsetCoordinate(q, r)); } } throw new Exception("TezHexCoordinate toOffsetCoordinate"); }
/// <summary> /// 初始化Block /// </summary> public void initBlock(TezHexCubeCoordinate coordinate, TezHexGrid.Layout layout, Block block) { var array_index = this.toArrayIndex(coordinate.toOffset(layout)); if (array_index.isChunkOutOfRange(m_ChunkXCount, m_ChunkYCount)) { throw new IndexOutOfRangeException("Chunk Out Of Range"); } block.coordinate = coordinate; m_ChunkArray[array_index.chunkX, array_index.chunkY].initBlock(array_index.blockX, array_index.blockY, block); this.onBlockInited(block); }
public TezHexCubeCoordinate toCube(TezHexGrid.Layout layout) { switch (layout) { case TezHexGrid.Layout.Pointy: { var x = q - (r + (r & 1) >> 1); var z = r; return(new TezHexCubeCoordinate(x, z)); } case TezHexGrid.Layout.Flat: { var x = q; var z = r - (q + (q & 1) >> 1); return(new TezHexCubeCoordinate(x, z)); } } throw new Exception("TezHexOffsetCoordinate toCoordinate"); }
public static TezHexCubeCoordinate fromOffset(int q, int r, TezHexGrid.Layout layout) { switch (layout) { case TezHexGrid.Layout.Pointy: { var x = q - (r + (r & 1) >> 1); var z = r; return(new TezHexCubeCoordinate(x, z)); } case TezHexGrid.Layout.Flat: { var x = q; var z = r - (q + (q & 1) >> 1); return(new TezHexCubeCoordinate(x, z)); } } throw new Exception("TezHexCoordinate fromOffset"); }