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)
{
int num;
int num2;
if ((rangeEnd - rangeStart) != 0f)
{
num = Mathf.FloorToInt((minTime - rangeStart) / (rangeEnd - rangeStart));
num2 = Mathf.CeilToInt((maxTime - rangeEnd) / (rangeEnd - rangeStart));
if (num < -100)
{
preWrap = WrapMode.Once;
}
if (num2 > 100)
{
postWrap = WrapMode.Once;
}
}
else
{
preWrap = WrapMode.Once;
postWrap = WrapMode.Once;
num = (minTime >= rangeStart) ? 0 : -1;
num2 = (maxTime <= rangeEnd) ? 0 : 1;
}
int index = points.Length - 1;
Handles.color = color;
List<Vector3> list = new List<Vector3>();
if ((num <= 0) && (num2 >= 0))
{
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 v = points[j];
v.x += i * (rangeEnd - rangeStart);
v = transform.MultiplyPoint(v);
list.Add(v);
}
}
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 m = 0; m < points.Length; m++)
{
if ((k / 2) == (((float) k) / 2f))
{
Vector3 vector2 = points[m];
vector2.x += k * (rangeEnd - rangeStart);
vector2 = transform.MultiplyPoint(vector2);
list.Add(vector2);
}
else
{
Vector3 vector3 = points[index - m];
vector3.x = (-vector3.x + ((k + 1) * (rangeEnd - rangeStart))) + (rangeStart * 2f);
vector3 = transform.MultiplyPoint(vector3);
list.Add(vector3);
}
}
}
Handles.DrawPolyLine(list.ToArray());
}
else if (num < 0)
{
Vector3[] vectorArray1 = 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)) };
Handles.DrawPolyLine(vectorArray1);
}
if (postWrap == WrapMode.Loop)
{
list = new List<Vector3> {
transform.MultiplyPoint(points[index])
};
for (int n = 1; n <= num2; n++)
{
for (int num9 = 0; num9 < points.Length; num9++)
{
Vector3 vector4 = points[num9];
vector4.x += n * (rangeEnd - rangeStart);
vector4 = transform.MultiplyPoint(vector4);
list.Add(vector4);
}
}
Handles.DrawPolyLine(list.ToArray());
}
else if (postWrap == WrapMode.PingPong)
{
list = new List<Vector3>();
for (int num10 = 1; num10 <= num2; num10++)
{
for (int num11 = 0; num11 < points.Length; num11++)
{
if ((num10 / 2) == (((float) num10) / 2f))
{
Vector3 vector5 = points[num11];
vector5.x += num10 * (rangeEnd - rangeStart);
vector5 = transform.MultiplyPoint(vector5);
list.Add(vector5);
}
else
{
Vector3 vector6 = points[index - num11];
vector6.x = (-vector6.x + ((num10 + 1) * (rangeEnd - rangeStart))) + (rangeStart * 2f);
vector6 = transform.MultiplyPoint(vector6);
list.Add(vector6);
}
}
}
Handles.DrawPolyLine(list.ToArray());
}
else if (num2 > 0)
{
Vector3[] vectorArray2 = new Vector3[] { transform.MultiplyPoint(new Vector3(Mathf.Max(minTime, points[index].x), points[index].y, 0f)), transform.MultiplyPoint(new Vector3(maxTime, points[index].y, 0f)) };
Handles.DrawPolyLine(vectorArray2);
}
}
}