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