public GameObject AddNewPoint() { if (m_Points.Count < 3) { Debug.LogWarning("Can't add point when less than two points."); } Vector3 newPos = LastPoint.position + (LastPoint.position - m_Points[m_Points.Count - 2].position); if (m_Hermite.AddPositionNatural(newPos)) { AddNewPointInternal(); AddNewIntagentInternal(m_Hermite.Positions.Count - 1); AddNewOutTangentInternal(m_Hermite.Positions.Count - 2); return(LastPoint.gameObject); } return(null); }
public void ValidateClosed() { if (closed != m_ClosedInternal) { if (closed && m_Hermite.Positions[0] != m_Hermite.Positions[m_Hermite.Positions.Count - 1]) { var newPos = m_Hermite.Positions[0]; m_Hermite.AddPositionNatural(newPos); m_Hermite.MakeUniformTimes(); m_Hermite.SetInTangent(m_Hermite.Positions.Count - 2, m_Hermite.OutTangents[0]); points.Clear(); points.AddRange(m_Hermite.Positions); inTangents.Clear(); inTangents.AddRange(m_Hermite.InTangents); outTangents.Clear(); outTangents.AddRange(m_Hermite.OutTangents); times.Clear(); times.AddRange(m_Hermite.Times); } else if (m_Hermite.Positions[0] == m_Hermite.Positions[m_Hermite.Positions.Count - 1]) { m_Hermite.RemovePosition(m_Hermite.Positions.Count - 1); points.Clear(); points.AddRange(m_Hermite.Positions); inTangents.Clear(); inTangents.AddRange(m_Hermite.InTangents); outTangents.Clear(); outTangents.AddRange(m_Hermite.OutTangents); m_Hermite.MakeUniformTimes(); times.Clear(); times.AddRange(m_Hermite.Times); } m_ClosedInternal = closed; } }