Beispiel #1
0
        public Vector3 InterpolateNormalByLen(float tl)
        {
            float localF;
            SplineControlPoint seg = LenToSegment(tl, out localF);

            return(seg.InterpolateNormal(localF));
        }
Beispiel #2
0
        public SplineControlPoint LenToSegment(float t, out float localF)
        {
            SplineControlPoint seg = null;

            t = Mathf.Clamp01(t);

            float len = t * mSegments[mSegments.Count - 1].Dist;


            int index = 0;

            for (index = 0; index < mSegments.Count; index++)
            {
                if (mSegments[index].Dist >= len)
                {
                    seg = mSegments[index];
                    break;
                }
            }

            if (index == 0)
            {
                //skip the first frame.
                localF = 0f;
                return(seg);
            }

            float PrevLen = 0f;
            int   prevIdx = seg.SegmentIndex - 1;
            SplineControlPoint prevSeg = mSegments[prevIdx];

            PrevLen = seg.Dist - prevSeg.Dist;
            localF  = (len - prevSeg.Dist) / PrevLen;
            return(prevSeg);
        }
Beispiel #3
0
        Vector3 GetNext2Position()
        {
            SplineControlPoint cp = NextControlPoint;

            if (cp != null)
            {
                return(cp.NextPosition);
            }
            return(NextPosition);
        }
Beispiel #4
0
        Vector3 GetNext2Normal()
        {
            SplineControlPoint cp = NextControlPoint;

            if (cp != null)
            {
                return(cp.NextNormal);
            }


            return(Normal);
        }
Beispiel #5
0
        public Vector3 PreviousPosition(SplineControlPoint controlpoint)
        {
            SplineControlPoint seg = PreviousControlPoint(controlpoint);

            if (seg != null)
            {
                return(seg.Position);
            }
            else
            {
                return(controlpoint.Position);
            }
        }
Beispiel #6
0
        public Vector3 NextPosition(SplineControlPoint controlpoint)
        {
            SplineControlPoint seg = NextControlPoint(controlpoint);

            if (seg != null)
            {
                return(seg.Position);
            }
            else
            {
                return(controlpoint.Position);
            }
        }
Beispiel #7
0
        public Vector3 NextNormal(SplineControlPoint controlpoint)
        {
            SplineControlPoint seg = NextControlPoint(controlpoint);

            if (seg != null)
            {
                return(seg.Normal);
            }
            else
            {
                return(controlpoint.Normal);
            }
        }
Beispiel #8
0
        public Vector3 PreviousNormal(SplineControlPoint controlpoint)
        {
            SplineControlPoint seg = PreviousControlPoint(controlpoint);

            if (seg != null)
            {
                return(seg.Normal);
            }
            else
            {
                return(controlpoint.Normal);
            }
        }
Beispiel #9
0
        public SplineControlPoint AddControlPoint(Vector3 pos, Vector3 up)
        {
            SplineControlPoint cp = new SplineControlPoint();

            cp.Init(this);

            cp.Position = pos;

            cp.Normal = up;

            mControlPoints.Add(cp);

            cp.ControlPointIndex = mControlPoints.Count - 1;


            return(cp);
        }
Beispiel #10
0
        public SplineControlPoint PreviousControlPoint(SplineControlPoint controlpoint)
        {
            if (mControlPoints.Count == 0)
            {
                return(null);
            }

            int i = controlpoint.ControlPointIndex - 1;

            if (i < 0)
            {
                return(null);
            }
            else
            {
                return(mControlPoints[i]);
            }
        }
Beispiel #11
0
        public SplineControlPoint NextControlPoint(SplineControlPoint controlpoint)
        {
            if (mControlPoints.Count == 0)
            {
                return(null);
            }

            int i = controlpoint.ControlPointIndex + 1;

            if (i >= mControlPoints.Count)
            {
                return(null);
            }
            else
            {
                return(mControlPoints[i]);
            }
        }