static public TopCellInfo GenerateInfo(NativeArray <MergeCellInfo> mergeInfoArray, int index, float cornerDistance, float rightDistance, float topRightDistance, float topDistance, ref int nextVertex, ref int nextTriIndex, bool hasTriangle) { MergeCellInfo mergeCell = mergeInfoArray[index]; MergeTriInfo mergeInfo = mergeCell.mergedInfo; if (mergeCell.canBeMerged) { byte indexLength = (byte)(mergeInfo.triangleCount * 3); byte config = CalcConfiguration(cornerDistance, rightDistance, topRightDistance, topDistance); var cellInfo = new TopCellInfo() { info = new CellInfo() { config = config, cornerDist = cornerDistance, rightDist = rightDistance, topDist = topDistance }, verts = new CellVertices { corner = -1, leftEdge = -1, bottomEdge = -1 }, tris = new IndexSpan(nextTriIndex, indexLength) }; if (hasTriangle) { nextTriIndex += indexLength; } if (mergeCell.needsVertex) { cellInfo.verts.corner = nextVertex; ++nextVertex; } return(cellInfo); } else { return(hasTriangle ? TopCellMesher.GenerateInfoWithTriangles(cornerDistance, rightDistance, topRightDistance, topDistance, ref nextVertex, ref nextTriIndex) : TopCellMesher.GenerateInfoNoTriangles(cornerDistance, rightDistance, topRightDistance, topDistance, ref nextVertex, ref nextTriIndex)); } }
private int VertexIndexB2(MergeTriInfo tri) => infoArray[tri.triB2Cell].verts.corner;
public void CalculateIndices(Orderer orderer, byte config, int triangleIndex, MergeTriInfo mergeInfo, IndexSpan tris, CellVertices bl, CellVertices br, CellVertices tr, CellVertices tl) { if (mergeInfo.triangleCount > 0) { if (mergeInfo.triangleCount == 1) { orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexA0(mergeInfo), VertexIndexA1(mergeInfo), VertexIndexA2(mergeInfo)); } else if (mergeInfo.triangleCount == 2) { orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexA0(mergeInfo), VertexIndexA1(mergeInfo), VertexIndexA2(mergeInfo)); orderer.AddTriangle(triangles, ref triangleIndex, VertexIndexB0(mergeInfo), VertexIndexB1(mergeInfo), VertexIndexB2(mergeInfo)); } } else { TopCellMesher.CalculateIndices(orderer, config, triangleIndex, tris, bl, br, tr, tl, triangles); } }