Example #1
0
        public float InvTransformPercent(float inPercent, SplineLerp inLerpMethod)
        {
            if (m_Dirty)
            {
                Process();
            }

            if (m_Looped)
            {
                inPercent = (inPercent + 1) % 1;
            }

            switch (inLerpMethod)
            {
            case SplineLerp.Vertex:
            default:
            {
                return(inPercent);
            }

            case SplineLerp.Direct:
            case SplineLerp.Precise:
            {
                SplineSegment seg;
                GetSegment(inPercent, out seg);
                return(m_VertexData[seg.VertexA].Marker + m_VertexData[seg.VertexA].Length * seg.Interpolation);
            }
            }
        }
Example #2
0
 /// <summary>
 /// Generates info about an interpolation along the given spline.
 /// </summary>
 static public void GetUpdateInfo(this ISpline inSpline, float inPercent, SplineLerp inLerpMethod, Curve inSegmentEase, out SplineUpdateInfo outInfo)
 {
     outInfo.Spline    = inSpline;
     outInfo.Percent   = inSpline.TransformPercent(inPercent, inLerpMethod);
     outInfo.Point     = inSpline.GetPoint(outInfo.Percent, inSegmentEase);
     outInfo.Direction = inSpline.GetDirection(outInfo.Percent, inSegmentEase);
 }
Example #3
0
        public float InvTransformPercent(float inPercent, SplineLerp inLerpMethod)
        {
            if (m_Dirty)
            {
                Process();
            }

            if (m_Looped)
            {
                inPercent = (inPercent + 1) % 1;
            }

            if (inPercent == 0 || inPercent == 1)
            {
                return(inPercent);
            }

            switch (inLerpMethod)
            {
            case SplineLerp.Vertex:
            default:
            {
                return(inPercent);
            }

            case SplineLerp.Direct:
            {
                SplineSegment seg;
                GetSegment(inPercent, out seg);
                return(m_VertexData[seg.VertexA].Marker + m_VertexData[seg.VertexA].Length * seg.Interpolation);
            }

            case SplineLerp.Precise:
            {
                int segCount = m_PreciseSegmentCount;
                if (m_Looped)
                {
                    inPercent = (inPercent + 1) % 1;
                }

                float vertAF = inPercent * segCount;
                int   vertA  = (int)vertAF;
                if (!m_Looped)
                {
                    if (vertA < 0)
                    {
                        vertA = 0;
                    }
                    else if (vertA >= segCount)
                    {
                        vertA = segCount - 1;
                    }
                }

                float interpolation = vertAF - vertA;
                return(m_PreciseSegmentData[vertA].Marker + interpolation * m_PreciseSegmentData[vertA].Length);
            }
            }
        }
        public SplineTweenSettings(SplineTweenSettings inSource)
        {
            LerpMethod     = inSource.LerpMethod;
            SegmentEase    = inSource.SegmentEase;
            UpdateCallback = inSource.UpdateCallback;

            Offset = inSource.Offset;

            Orient = new SplineOrientationSettings(inSource.Orient);
        }
Example #5
0
        public float TransformPercent(float inPercent, SplineLerp inLerpMethod)
        {
            if (m_Dirty)
            {
                Process();
            }

            if (m_Looped)
            {
                inPercent = (inPercent + 1) % 1;
            }

            if (inPercent == 0 || inPercent == 1)
            {
                return(inPercent);
            }

            switch (inLerpMethod)
            {
            case SplineLerp.Vertex:
            default:
            {
                return(inPercent);
            }

            case SplineLerp.Direct:
            case SplineLerp.Precise:
            {
                int segCount = m_SegmentCount;

                for (int i = segCount - 1; i > 0; --i)
                {
                    if (m_VertexData[i].Marker <= inPercent)
                    {
                        float lerp = (inPercent - m_VertexData[i].Marker) / m_VertexData[i].Length;
                        return((i + lerp) / segCount);
                    }
                }

                // If these fail, use the starting node
                {
                    float lerp = (inPercent) / m_VertexData[0].Length;
                    return(lerp / segCount);
                }
            }
            }
        }
Example #6
0
        public float InvTransformPercent(float inPercent, SplineLerp inLerpMethod)
        {
            if (m_Dirty)
            {
                Process();
            }

            if (inPercent == 0 || inPercent == 1)
            {
                return(inPercent);
            }

            switch (inLerpMethod)
            {
            case SplineLerp.Vertex:
            case SplineLerp.Direct:
            default:
            {
                return(inPercent);
            }

            case SplineLerp.Precise:
            {
                float vertAF = inPercent * m_PreciseSegmentCount;
                int   vertA  = (int)vertAF;
                if (vertA < 0)
                {
                    vertA = 0;
                }
                else if (vertA >= m_PreciseSegmentData.Length)
                {
                    vertA = m_PreciseSegmentData.Length - 1;
                }

                float interpolation = vertAF - vertA;
                return(m_PreciseSegmentData[vertA].Marker + interpolation * m_PreciseSegmentData[vertA].Length);
            }
            }
        }
Example #7
0
 public float InvTransformPercent(float inPercent, SplineLerp inLerpMethod)
 {
     return(RefreshSpline().InvTransformPercent(inPercent, inLerpMethod));
 }
Example #8
0
        /// <summary>
        /// Aligns a RectTransform to a point along the spline, using anchoredPosition.
        /// </summary>
        static public void AlignAnchorPos(ISpline inSpline, RectTransform inTransform, float inPercent, Axis inAxis, SplineLerp inLerpMethod, Curve inSegmentEase, SplineOrientationSettings inOrientation)
        {
            SplineUpdateInfo info;

            GetUpdateInfo(inSpline, inPercent, inLerpMethod, inSegmentEase, out info);
            inTransform.SetAnchorPos(info.Point, inAxis);
            if (inOrientation != null)
            {
                inOrientation.Apply(ref info, inTransform, Space.Self);
            }
        }
Example #9
0
 /// <summary>
 /// Generates info about an interpolation along the given spline.
 /// </summary>
 static public void GetUpdateInfo(this ISpline inSpline, float inPercent, SplineLerp inLerp, out SplineUpdateInfo outInfo)
 {
     GetUpdateInfo(inSpline, inPercent, inLerp, Curve.Linear, out outInfo);
 }
Example #10
0
 /// <summary>
 /// Samples the spline for the given range and outputs to an array.
 /// </summary>
 static public int Sample(this ISpline inSpline, Vector2[] outPoints, float inStart, float inEnd, SplineLerp inLerp = SplineLerp.Vertex)
 {
     return(Sample(inSpline, outPoints, inStart, inEnd, 0, outPoints.Length, inLerp));
 }
Example #11
0
        /// <summary>
        /// Samples the spline for the given range and outputs to a list.
        /// </summary>
        static public void Sample(this ISpline inSpline, List <Vector2> outPoints, float inStart, float inEnd, int inNumSamples, SplineLerp inLerp = SplineLerp.Vertex)
        {
            float delta = inEnd - inStart;

            for (int i = 0; i < inNumSamples; ++i)
            {
                float t = (float)i / (inNumSamples - 1);
                outPoints.Add(inSpline.GetPoint(inSpline.TransformPercent(inStart + t * delta, inLerp)));
            }
        }
Example #12
0
        /// <summary>
        /// Samples the spline for the given range and outputs to an array.
        /// </summary>
        static public int Sample(this ISpline inSpline, Vector2[] outPoints, float inStart, float inEnd, int inStartIdx, int inNumSamples, SplineLerp inLerp = SplineLerp.Vertex)
        {
            inNumSamples = Mathf.Min(outPoints.Length - inStartIdx, inNumSamples);

            float delta = inEnd - inStart;

            for (int i = 0; i < inNumSamples; ++i)
            {
                float t = (float)i / (inNumSamples - 1);
                outPoints[inStartIdx + i] = inSpline.GetPoint(inSpline.TransformPercent(inStart + t * delta, inLerp));
            }

            return(inNumSamples);
        }
Example #13
0
 public float TransformPercent(float inPercent, SplineLerp inLerpMethod)
 {
     return(Spline.TransformPercent(inPercent, inLerpMethod));
 }