private void AddIndices(int innerOffset, int innerSides, int outerOffset, int outerSides) { var stepInner = 1.0f / innerSides; var stepOuter = 1.0f / outerSides; var indexInner = 0; var indexOuter = 0; var progress = 0.0f; var remainingInner = innerSides; var remainingOuter = outerSides; if (remainingInner == 1) { remainingInner = 0; } while (remainingInner > 0 || remainingOuter > 0) { var targetInner = (indexInner + 1) * stepInner; var targetOuter = (indexOuter + 1) * stepOuter; var remainderInner = targetInner - progress; var remainderOuter = targetOuter - progress; if (remainderInner <= remainderOuter && remainingInner > 0) { SgtProceduralMesh.PushIndex(innerOffset + indexInner % innerSides); SgtProceduralMesh.PushIndex(outerOffset + indexOuter % outerSides); SgtProceduralMesh.PushIndex(innerOffset + (indexInner + 1) % innerSides); progress = targetInner; remainingInner -= 1; indexInner += 1; } if (remainderInner >= remainderOuter && remainingOuter > 0) { SgtProceduralMesh.PushIndex(outerOffset + (indexOuter + 1) % outerSides); SgtProceduralMesh.PushIndex(innerOffset + indexInner % innerSides); SgtProceduralMesh.PushIndex(outerOffset + indexOuter % outerSides); progress = targetOuter; remainingOuter -= 1; indexOuter += 1; } } }