Example #1
0
        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);
        }
Example #2
0
        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;
            }
        }