public Vector2d GetDegreePoint(long degree) { if (Points.Length == 1) { return(Points[0]); ; } else if (Points.Length <= 0) { return(Vector2d.zero); ; } if (Looped) { degree = degree.Mod(FixedMath.One); } else { if (degree < 0) { degree = 0; } if (degree > FixedMath.One) { degree = FixedMath.One; } } //TODO: Degree guards long degreeMag = TotalLength.Mul(degree); long distanceAcc = 0; for (int i = 0; i < PointDistances.Length; i++) { long curDistance = PointDistances [i]; long nextDistanceAcc = distanceAcc + curDistance; if (nextDistanceAcc >= degreeMag) { long fraction = (degreeMag - distanceAcc).Div(curDistance); long index1 = i; long index2 = i + 1; if (index2 >= Points.Length) { index2 = 0; } Vector2d ret = Points [index1].Lerped(Points [index2], fraction); return(ret + Offset); } distanceAcc = nextDistanceAcc; } throw new System.Exception(); }