private float DoDistanceComparison(SplineSigil spline, int splineSigilIndex, int pointSigilIndex) { // Find the point on the pre-defined spell spline float splineIndex = 0f; if (splineSigilIndex > 0) { splineIndex = (float)splineSigilIndex / (float)(sigil.points.Count - 1); } // Scale the point along the spline, and the current point in our manual sigil Vector3 transformedSplinePoint = spline.GetPointOnSpellPlane(splineIndex, spellPlane); Vector3 transformedPoint = sigil.TranslatePointToSpellPlane(sigil.points[pointSigilIndex], spellPlane); Vector3 pointDelta = transformedSplinePoint - transformedPoint; return(Mathf.Abs(pointDelta.sqrMagnitude)); }
// -------------------------------------------------------------------------------- // Spline detection // -------------------------------------------------------------------------------- // For each point in our manually-drawn point sigil, compare the distance from this point // to a point on the sigil. // Calculate the distance from 0->t, and from t->0 private float CalculateDistance(SplineSigil spline) { float distanceForward = 0f; float distanceBackwards = 0f; for (int i = 0; i < sigil.points.Count; i++) { distanceForward += DoDistanceComparison(spline, i, i); } for (int i = 0; i < sigil.points.Count; i++) { distanceBackwards += DoDistanceComparison(spline, i, sigil.points.Count - i - 1); } if (distanceForward < distanceBackwards) { return(distanceForward); } else { return(distanceBackwards); } }
protected virtual void Start() { sigil = GetComponent <SplineSigil>(); }