/// <summary>
        /// return to guard position state
        /// </summary>
        private void _return_state()
        {
            m_CurrentDest = m_StartPosition;

            m_Direction2target   = m_CurrentDest - transform.position;
            m_Distance2target    = m_Direction2target.magnitude;
            m_Direction2target.y = 0.0f;
            m_Direction2target.Normalize();

            _calc_ranges();

            m_Character.setMoveMode(TPCharacter.MovingMode.RotateToDirection);


            _calculate_path(ref m_Move);

            m_Move.y      = 0.0f;
            m_Move       *= m_Stats.DefaultMoveSpeed;
            m_BodyLookDir = m_Move;
            if (takingHit)
            {
                m_Move        = Vector3.zero;
                m_BodyLookDir = Vector3.zero;
            }
            m_Character.move(m_Move, false, false, false, m_BodyLookDir, Vector3.zero);

            if (m_InAttackRange)
            {
                m_NpcState = NPCState.Idle;
                m_Character.setMoveMode(TPCharacter.MovingMode.RotateToDirection);
                m_Move = Vector3.zero;
                m_Character.fullStop();
                m_OnStartPosition = true;
            }
        }