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>();
 }