private IEnumerator Seek(GameObject target)
    {
        CreepScript targetScript = target.GetComponent <CreepScript>();

        while (target != null)
        {
            m_CreepMovement.ChangeTarget(target, true);
            bool targetIsAtAttackRange =
                m_CreepMovement.TargetIsAtAttackRange();

            CreepScript.CREEP_STATE currentState = m_CreepScript.GetCurrentState();
            #region Can Destroy ?
            if (currentState != CreepScript.CREEP_STATE.DESTROYING &&
                targetIsAtAttackRange)
            {
                m_CreepScript.SwitchToDestroyState();

                StartCoroutine("Destroy", targetScript);
            }
            else if (currentState != CreepScript.CREEP_STATE.SEEKING &&
                     !targetIsAtAttackRange)
            {
                m_CreepScript.SwitchToSeekState();
                StopCoroutine("Destroy");
            }
            #endregion

            yield return(null);
        }

        StopSeekAndDestroy();
    }