Esempio n. 1
0
        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);
        }
Esempio n. 2
0
    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];
//            }
        }
    }