using System.Collections.Generic; namespace UnityEngine.Splines { /// <summary> /// A key-value pair associating a distance to interpolation ratio ('t') value. This is used when evaluating Spline /// attributes to ensure uniform ditribution of sampling points. /// </summary> /// <seealso cref="CurveUtility.CalculateCurveLengths"/> public struct DistanceToInterpolation { /// <summary> /// Distance in Unity units. /// </summary> public float Distance; /// <summary> /// A normalized interpolation ratio ('t'). /// </summary> public float T; } /// <summary> /// ISpline defines the interface from which Spline types inherit. /// </summary> public interface ISpline : IReadOnlyList<BezierKnot> { /// <summary> /// Whether the spline is open (has a start and end point) or closed (forms an unbroken loop). /// </summary> bool Closed { get; } /// <summary> /// Return the sum of all curve lengths, accounting for <see cref="Closed"/> state. /// </summary> /// <returns> /// Returns the sum length of all curves composing this spline, accounting for closed state. /// </returns> float GetLength(); /// <summary> /// Get a <see cref="BezierCurve"/> from a knot index. /// </summary> /// <param name="index">The knot index that serves as the first control point for this curve.</param> /// <returns> /// A <see cref="BezierCurve"/> formed by the knot at index and the next knot. /// </returns> public BezierCurve GetCurve(int index); /// <summary> /// Return the length of a curve. /// </summary> /// <param name="index">The index of the curve for which the length needs to be retrieved</param> /// <seealso cref="GetLength"/> /// <returns> /// Returns the length of the curve of index 'index' in the spline. /// </returns> public float GetCurveLength(int index); /// <summary> /// Return the interpolation ratio (0 to 1) corresponding to a distance on a <see cref="BezierCurve"/>. Distance /// is relative to the curve. /// </summary> /// <param name="curveIndex"> The zero-based index of the curve.</param> /// <param name="curveDistance"> The distance (measuring from the knot at curveIndex) to convert to a normalized interpolation ratio.</param> /// <returns>The normalized interpolation ratio matching distance on the designated curve. </returns> public float GetCurveInterpolation(int curveIndex, float curveDistance); } }