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)) }); } }
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))); } }