Ejemplo n.º 1
0
        static private void InsertVertexAfter(MultiSpline inSpline, int inIndex)
        {
            if (inSpline.m_Vertices == null || inSpline.m_Type == GenType.Uninitialized || inSpline.m_Type == GenType.Simple)
            {
                return;
            }

            int   currentIndex = inIndex;
            float lerp         = 0.5f;
            bool  bAddToEnd    = false;

            int segCount = inSpline.m_Vertices.Length;

            if (!inSpline.m_Looped)
            {
                --segCount;
            }

            if (currentIndex == inSpline.m_Vertices.Length - 1)
            {
                bAddToEnd = true;
                if (!inSpline.m_Looped)
                {
                    --currentIndex;
                    lerp = 1.5f;
                }
            }

            float   realLerp = (float)(currentIndex + lerp) / segCount;
            Vector3 next     = inSpline.GetPoint(realLerp);
            Vector3 dir      = inSpline.GetDirection(realLerp);

            CSplineVertex vert;

            vert.Point     = next;
            vert.InTangent = vert.OutTangent = inSpline.m_Type == GenType.CSpline ? dir : Vector3.zero;

            if (bAddToEnd)
            {
                UnityEditor.ArrayUtility.Add(ref inSpline.m_Vertices, vert);
            }
            else
            {
                UnityEditor.ArrayUtility.Insert(ref inSpline.m_Vertices, currentIndex + 1, vert);
            }
        }
Ejemplo n.º 2
0
        static private void InsertVertexBefore(MultiSpline inSpline, int inIndex)
        {
            if (inSpline.m_Vertices == null || inSpline.m_Type == GenType.Uninitialized || inSpline.m_Type == GenType.Simple)
            {
                return;
            }

            int   currentIndex = inIndex;
            float lerp         = -0.5f;

            int segCount = inSpline.m_Vertices.Length;

            if (!inSpline.m_Looped)
            {
                --segCount;
            }

            if (currentIndex == 0)
            {
                if (!inSpline.m_Looped)
                {
                    ++currentIndex;
                    lerp = -1.5f;
                }
            }

            float   realLerp = (float)(currentIndex + lerp) / segCount;
            Vector3 next     = inSpline.GetPoint(realLerp);
            Vector3 dir      = inSpline.GetDirection(realLerp);

            CSplineVertex vert;

            vert.Point     = next;
            vert.InTangent = vert.OutTangent = inSpline.m_Type == GenType.CSpline ? dir : Vector3.zero;

            UnityEditor.ArrayUtility.Insert(ref inSpline.m_Vertices, currentIndex, vert);
            inSpline.m_Dirty = true;
        }