public void DrawCurve(float minTime, float maxTime, Color color, Matrix4x4 transform, int component, Color wrapColor) { if (minTime < cachedRangeStart || maxTime > cachedRangeEnd) { CalculateCurves(minTime, maxTime); if (minTime <= rangeStart && maxTime >= rangeEnd) { // if we are covering whole range cachedRangeStart = Mathf.NegativeInfinity; cachedRangeEnd = Mathf.Infinity; } else { cachedRangeStart = minTime; cachedRangeEnd = maxTime; } } List <Vector3> polyLine = new List <Vector3>(); foreach (KeyValuePair <float, Vector3> kvp in points) { polyLine.Add(new Vector3(kvp.Key, kvp.Value[component])); } NormalCurveRenderer.DrawCurveWrapped(minTime, maxTime, rangeStart, rangeEnd, preWrapMode, postWrapMode, color, transform, polyLine.ToArray(), wrapColor); }
private void CalculateCurves(float minTime, float maxTime) { points = new SortedDictionary <float, Vector3>(); float[,] ranges = NormalCurveRenderer.CalculateRanges(minTime, maxTime, rangeStart, rangeEnd, preWrapMode, postWrapMode); for (int i = 0; i < ranges.GetLength(0); i++) { AddPoints(ranges[i, 0], ranges[i, 1]); } }