public static float[,] CalculateRanges(float minTime, float maxTime, float rangeStart, float rangeEnd, WrapMode preWrapMode, WrapMode postWrapMode)
{
WrapMode mode = preWrapMode;
if (postWrapMode != mode)
{
return new float[,] { { rangeStart, rangeEnd } };
}
if (mode == WrapMode.Loop)
{
if ((maxTime - minTime) > (rangeEnd - rangeStart))
{
return new float[,] { { rangeStart, rangeEnd } };
}
minTime = Mathf.Repeat(minTime - rangeStart, rangeEnd - rangeStart) + rangeStart;
maxTime = Mathf.Repeat(maxTime - rangeStart, rangeEnd - rangeStart) + rangeStart;
if (minTime < maxTime)
{
return new float[,] { { minTime, maxTime } };
}
return new float[,] { { rangeStart, maxTime }, { minTime, rangeEnd } };
}
if (mode == WrapMode.PingPong)
{
return new float[,] { { rangeStart, rangeEnd } };
}
return new float[,] { { minTime, maxTime } };
}