Esempio n. 1
0
    //////////////////////////////////////////////////////////////////////////
    // UNITY
    //////////////////////////////////////////////////////////////////////////

    //////////////////////////////////////////////////////////////////////////
    // Update
    private void    Update()
    {
        if (m_Movement.HasPath == false)
        {
            return;
        }

        float traveledDistance = (m_Movement.PrevPosition - transform.position).sqrMagnitude;

        // CHECK
        if (traveledDistance >= m_Movement.NextNodeDistance)
        {
            m_Movement.Path[m_Movement.NodeIdx].OnNodeReached(this);
            m_Movement.NodeIdx++;

            // Arrived
            if (m_Movement.NodeIdx == m_Movement.PathLength || m_Movement.Path[m_Movement.NodeIdx] == null)
            {
                if (m_Movement.Action != null)
                {
                    m_Movement.Action();
                }
                m_Movement.Reset();
                return;
            }

            m_Movement.NextNodeDistance = (m_Movement.Path[m_Movement.NodeIdx].Position - transform.position).sqrMagnitude;
            m_MovementStartPosition     = m_Movement.PrevPosition = transform.position;
        }

        // go to node
        Vector3 targetDirection = (m_Movement.Path[m_Movement.NodeIdx].Position - transform.position).normalized;

        transform.position += (targetDirection * m_Speed) * Time.deltaTime;
    }