private int GetElementCount(int time, bool transparent) { List <DebugRenderTriangleIndexMarker> triangleMarkers = transparent ? transparentTriangleMarkers : opaqueTriangleMarkers; int indexElementCount = 0; DebugRenderTriangleIndexMarker searchItem = new DebugRenderTriangleIndexMarker(0, time); int index = triangleMarkers.BinarySearch(searchItem); if (index < 0) { index = ~index; } index = triangleMarkers.Count > 0 ? SMath.Clamp(index, 0, triangleMarkers.Count - 1) : index; if (index < triangleMarkers.Count) { while (index > 0 && triangleMarkers[index].time > time) { // Not exact match but the next one -> Decrease index by one to have only the range that counts up for the requested time index--; } if (index < triangleMarkers.Count && triangleMarkers[index].time <= time) { indexElementCount = triangleMarkers[index].index + 1; } } return(indexElementCount); }
public void AddTriangle(int time, Vector3 a, Vector3 b, Vector3 c, Color32 color) { LocalBounds.Encapsulate(a); LocalBounds.Encapsulate(b); LocalBounds.Encapsulate(c); Vector3 newTriangleNormal = GeometryMath.GetTriangleNormal(a, b, c); ArrayList <VertexNormalColor> vertexList = color.A < 255 ? transparentVertexList : opaqueVertexList; List <DebugRenderTriangleIndexMarker> triangleMarkers = color.A < 255 ? transparentTriangleMarkers : opaqueTriangleMarkers; vertexList.Add(new VertexNormalColor() { Position = a, Color = color, Normal = newTriangleNormal }); vertexList.Add(new VertexNormalColor() { Position = b, Color = color, Normal = newTriangleNormal }); vertexList.Add(new VertexNormalColor() { Position = c, Color = color, Normal = newTriangleNormal }); // Find or create new index marker and add triangle DebugRenderTriangleIndexMarker searchItem = new DebugRenderTriangleIndexMarker(0, time); int index = triangleMarkers.BinarySearch(searchItem); if (index < 0) { index = ~index; } while (index > 0 && index < triangleMarkers.Count && triangleMarkers[index].time > time) { // Not exact match but the next one -> Decrease index by one to have only the range that counts up for the requested time index--; } if (index < triangleMarkers.Count && triangleMarkers[index].time == time) { // Has existing one for this time -> Update end index triangleMarkers[index].index = vertexList.Count - 1; } else { // Insert new DebugRenderTriangleIndexMarker range = new DebugRenderTriangleIndexMarker(vertexList.Count - 1, time); triangleMarkers.Insert(index, range); } if (!InfiniteLength && EndTime < time) { EndTime = time; } }