DrawPolyLine() public static method

public static DrawPolyLine ( Matrix4x4 transform, float minDistance ) : void
transform UnityEngine.Matrix4x4
minDistance float
return void
        public static void DrawCurveWrapped(float minTime, float maxTime, float rangeStart, float rangeEnd, WrapMode preWrap, WrapMode postWrap, Color color, Matrix4x4 transform, Vector3[] points, Color wrapColor)
        {
            if (points.Length == 0)
            {
                return;
            }
            int num;
            int num2;

            if (rangeEnd - rangeStart != 0f)
            {
                num  = Mathf.FloorToInt((minTime - rangeStart) / (rangeEnd - rangeStart));
                num2 = Mathf.CeilToInt((maxTime - rangeEnd) / (rangeEnd - rangeStart));
            }
            else
            {
                preWrap  = WrapMode.Once;
                postWrap = WrapMode.Once;
                num      = ((minTime >= rangeStart) ? 0 : -1);
                num2     = ((maxTime <= rangeEnd) ? 0 : 1);
            }
            int num3 = points.Length - 1;

            Handles.color = color;
            List <Vector3> list = new List <Vector3>();

            if (num <= 0 && num2 >= 0)
            {
                NormalCurveRenderer.DrawPolyLine(transform, 2f, points);
            }
            else
            {
                Handles.DrawPolyLine(points);
            }
            Handles.color = new Color(wrapColor.r, wrapColor.g, wrapColor.b, wrapColor.a * color.a);
            if (preWrap == WrapMode.Loop)
            {
                list = new List <Vector3>();
                for (int i = num; i < 0; i++)
                {
                    for (int j = 0; j < points.Length; j++)
                    {
                        Vector3 vector = points[j];
                        vector.x += (float)i * (rangeEnd - rangeStart);
                        vector    = transform.MultiplyPoint(vector);
                        list.Add(vector);
                    }
                }
                list.Add(transform.MultiplyPoint(points[0]));
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (preWrap == WrapMode.PingPong)
            {
                list = new List <Vector3>();
                for (int k = num; k < 0; k++)
                {
                    for (int l = 0; l < points.Length; l++)
                    {
                        if ((float)(k / 2) == (float)k / 2f)
                        {
                            Vector3 vector2 = points[l];
                            vector2.x += (float)k * (rangeEnd - rangeStart);
                            vector2    = transform.MultiplyPoint(vector2);
                            list.Add(vector2);
                        }
                        else
                        {
                            Vector3 vector3 = points[num3 - l];
                            vector3.x = -vector3.x + (float)(k + 1) * (rangeEnd - rangeStart) + rangeStart * 2f;
                            vector3   = transform.MultiplyPoint(vector3);
                            list.Add(vector3);
                        }
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (num < 0)
            {
                Handles.DrawPolyLine(new Vector3[]
                {
                    transform.MultiplyPoint(new Vector3(minTime, points[0].y, 0f)),
                    transform.MultiplyPoint(new Vector3(Mathf.Min(maxTime, points[0].x), points[0].y, 0f))
                });
            }
            if (postWrap == WrapMode.Loop)
            {
                list = new List <Vector3>();
                list.Add(transform.MultiplyPoint(points[num3]));
                for (int m = 1; m <= num2; m++)
                {
                    for (int n = 0; n < points.Length; n++)
                    {
                        Vector3 vector4 = points[n];
                        vector4.x += (float)m * (rangeEnd - rangeStart);
                        vector4    = transform.MultiplyPoint(vector4);
                        list.Add(vector4);
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (postWrap == WrapMode.PingPong)
            {
                list = new List <Vector3>();
                for (int num4 = 1; num4 <= num2; num4++)
                {
                    for (int num5 = 0; num5 < points.Length; num5++)
                    {
                        if ((float)(num4 / 2) == (float)num4 / 2f)
                        {
                            Vector3 vector5 = points[num5];
                            vector5.x += (float)num4 * (rangeEnd - rangeStart);
                            vector5    = transform.MultiplyPoint(vector5);
                            list.Add(vector5);
                        }
                        else
                        {
                            Vector3 vector6 = points[num3 - num5];
                            vector6.x = -vector6.x + (float)(num4 + 1) * (rangeEnd - rangeStart) + rangeStart * 2f;
                            vector6   = transform.MultiplyPoint(vector6);
                            list.Add(vector6);
                        }
                    }
                }
                Handles.DrawPolyLine(list.ToArray());
            }
            else if (num2 > 0)
            {
                Handles.DrawPolyLine(new Vector3[]
                {
                    transform.MultiplyPoint(new Vector3(Mathf.Max(minTime, points[num3].x), points[num3].y, 0f)),
                    transform.MultiplyPoint(new Vector3(maxTime, points[num3].y, 0f))
                });
            }
        }
示例#2
0
        public static void DrawCurveWrapped(float minTime, float maxTime, float rangeStart, float rangeEnd, WrapMode preWrap, WrapMode postWrap, Color color, Matrix4x4 transform, Vector3[] points, Color wrapColor)
        {
            if (points.Length == 0)
            {
                return;
            }
            int num1;
            int num2;

            if ((double)rangeEnd - (double)rangeStart != 0.0)
            {
                num1 = Mathf.FloorToInt((float)(((double)minTime - (double)rangeStart) / ((double)rangeEnd - (double)rangeStart)));
                num2 = Mathf.CeilToInt((float)(((double)maxTime - (double)rangeEnd) / ((double)rangeEnd - (double)rangeStart)));
            }
            else
            {
                preWrap  = WrapMode.Once;
                postWrap = WrapMode.Once;
                num1     = (double)minTime >= (double)rangeStart ? 0 : -1;
                num2     = (double)maxTime <= (double)rangeEnd ? 0 : 1;
            }
            int index1 = points.Length - 1;

            Handles.color = color;
            List <Vector3> vector3List1 = new List <Vector3>();

            if (num1 <= 0 && num2 >= 0)
            {
                NormalCurveRenderer.DrawPolyLine(transform, 2f, points);
            }
            else
            {
                Handles.DrawPolyLine(points);
            }
            Handles.color = new Color(wrapColor.r, wrapColor.g, wrapColor.b, wrapColor.a * color.a);
            if (preWrap == WrapMode.Loop)
            {
                List <Vector3> vector3List2 = new List <Vector3>();
                for (int index2 = num1; index2 < 0; ++index2)
                {
                    for (int index3 = 0; index3 < points.Length; ++index3)
                    {
                        Vector3 point = points[index3];
                        point.x += (float)index2 * (rangeEnd - rangeStart);
                        Vector3 vector3 = transform.MultiplyPoint(point);
                        vector3List2.Add(vector3);
                    }
                }
                vector3List2.Add(transform.MultiplyPoint(points[0]));
                Handles.DrawPolyLine(vector3List2.ToArray());
            }
            else if (preWrap == WrapMode.PingPong)
            {
                List <Vector3> vector3List2 = new List <Vector3>();
                for (int index2 = num1; index2 < 0; ++index2)
                {
                    for (int index3 = 0; index3 < points.Length; ++index3)
                    {
                        if ((double)(index2 / 2) == (double)index2 / 2.0)
                        {
                            Vector3 point = points[index3];
                            point.x += (float)index2 * (rangeEnd - rangeStart);
                            Vector3 vector3 = transform.MultiplyPoint(point);
                            vector3List2.Add(vector3);
                        }
                        else
                        {
                            Vector3 point = points[index1 - index3];
                            point.x = (float)(-(double)point.x + (double)(index2 + 1) * ((double)rangeEnd - (double)rangeStart) + (double)rangeStart * 2.0);
                            Vector3 vector3 = transform.MultiplyPoint(point);
                            vector3List2.Add(vector3);
                        }
                    }
                }
                Handles.DrawPolyLine(vector3List2.ToArray());
            }
            else if (num1 < 0)
            {
                Handles.DrawPolyLine(transform.MultiplyPoint(new Vector3(minTime, points[0].y, 0.0f)), transform.MultiplyPoint(new Vector3(Mathf.Min(maxTime, points[0].x), points[0].y, 0.0f)));
            }
            if (postWrap == WrapMode.Loop)
            {
                List <Vector3> vector3List2 = new List <Vector3>();
                vector3List2.Add(transform.MultiplyPoint(points[index1]));
                for (int index2 = 1; index2 <= num2; ++index2)
                {
                    for (int index3 = 0; index3 < points.Length; ++index3)
                    {
                        Vector3 point = points[index3];
                        point.x += (float)index2 * (rangeEnd - rangeStart);
                        Vector3 vector3 = transform.MultiplyPoint(point);
                        vector3List2.Add(vector3);
                    }
                }
                Handles.DrawPolyLine(vector3List2.ToArray());
            }
            else if (postWrap == WrapMode.PingPong)
            {
                List <Vector3> vector3List2 = new List <Vector3>();
                for (int index2 = 1; index2 <= num2; ++index2)
                {
                    for (int index3 = 0; index3 < points.Length; ++index3)
                    {
                        if ((double)(index2 / 2) == (double)index2 / 2.0)
                        {
                            Vector3 point = points[index3];
                            point.x += (float)index2 * (rangeEnd - rangeStart);
                            Vector3 vector3 = transform.MultiplyPoint(point);
                            vector3List2.Add(vector3);
                        }
                        else
                        {
                            Vector3 point = points[index1 - index3];
                            point.x = (float)(-(double)point.x + (double)(index2 + 1) * ((double)rangeEnd - (double)rangeStart) + (double)rangeStart * 2.0);
                            Vector3 vector3 = transform.MultiplyPoint(point);
                            vector3List2.Add(vector3);
                        }
                    }
                }
                Handles.DrawPolyLine(vector3List2.ToArray());
            }
            else
            {
                if (num2 <= 0)
                {
                    return;
                }
                Handles.DrawPolyLine(transform.MultiplyPoint(new Vector3(Mathf.Max(minTime, points[index1].x), points[index1].y, 0.0f)), transform.MultiplyPoint(new Vector3(maxTime, points[index1].y, 0.0f)));
            }
        }