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