public FluffyUnderware.Curvy.CurvySpline GetChangeSpline(FluffyUnderware.Curvy.CurvySpline refSpine, float refT, Vector3 changeDirection, float maxAngle = 360) { List <Vector3> dirs = this.GetChangeSplineDirections(refSpine, refT); float closestAngle = 9999f; FluffyUnderware.Curvy.CurvySpline closestSpline = null; Vector3 refPoint = refSpine.InterpolateFast(refT); for (int i = 0; i < this.splines.Length; i++) { if (this.splines[i] == refSpine) { continue; } Vector3 splinePoint = this.splines[i].InterpolateFast(refT); Vector3 splineDir = (splinePoint - refPoint).normalized; float angle = Vector3.Angle(splineDir, changeDirection); if (angle < closestAngle) { closestAngle = angle; closestSpline = this.splines[i]; } } return((closestAngle <= maxAngle) ? closestSpline : null); }
public List <Vector3> GetChangeSplineDirections(FluffyUnderware.Curvy.CurvySpline refSpine, float refT) { List <Vector3> dirs = new List <Vector3>(); Vector3 refPoint = refSpine.InterpolateFast(refT); for (int i = 0; i < this.splines.Length; i++) { if (this.splines[i] == refSpine) { continue; } Vector3 splinePoint = this.splines[i].InterpolateFast(refT); Vector3 slineDir = (splinePoint - refPoint).normalized; dirs.Add(slineDir); } return(dirs); }