public void Reset(Vector3 axis, int numPoints, float length) { numPoints = Mathf.Clamp(numPoints, 3, Int32.MaxValue); Init(); points.Clear(); times.Clear(); var segmentLength = length / (numPoints - 1); var timeIncrement = (1f / (numPoints - 1)); for (int i = 0; i < numPoints; i++) { var point = i * segmentLength * axis; var time = i * timeIncrement; points.Add(point); times.Add(time); } m_Hermite.InitializeNatural(points.ToArray(), times.ToArray(), numPoints); inTangents.Clear(); inTangents.AddRange(m_Hermite.InTangents); outTangents.Clear(); outTangents.AddRange(m_Hermite.OutTangents); }
private void Awake() { if (m_Points.Count < 3 || m_InTangents.Count != m_Points.Count - 1 || m_OutTangents.Count != m_Points.Count - 1) { // (re)initialize m_Points.Clear(); m_InTangents.Clear(); m_OutTangents.Clear(); m_Times.Clear(); AddNewPointInternal(); LastPoint.position = transform.position; AddNewPointInternal(); LastPoint.position = transform.position + Vector3.forward; // TODO: make own monobehaviour with cached AddNewPointInternal(); LastPoint.position = transform.position + 2 * Vector3.forward + Vector3.right; // TODO: make own monobehaviour with cached m_Times.Add(0.0f); m_Times.Add(0.5f); m_Times.Add(1.0f); m_Hermite = new Hermite(); m_Hermite.InitializeNatural(m_Points.Select(p => p.position).ToArray(), m_Times.ToArray(), m_Points.Count); AddNewIntagentInternal(1); AddNewIntagentInternal(2); AddNewOutTangentInternal(0); AddNewOutTangentInternal(1); // // create intangents // for (int i = 0; i < m_Hermite.InTangents.Count; i++) // { // var inTangent = new GameObject(m_Points[i+1].name + "_inTangent"); // inTangent.transform.SetParent(m_Points[i+1].transform); // m_InTangents.Add(inTangent.transform); // inTangent.transform.position = m_Hermite.InTangents[i]; // } // // // create outtangents // for (int i = 0; i < m_Hermite.OutTangents.Count; i++) // { // var outTangent = new GameObject(m_Points[i].name + "_outTangent"); // outTangent.transform.SetParent(m_Points[i].transform); // m_OutTangents.Add(outTangent.transform); // outTangent.transform.position = m_Hermite.OutTangents[i]; // } } }