private IEnumerator WayPointBehavior(WayPoints wayPoints)
        {
            Transform[] points   = wayPoints.points;
            float       waitTime = wayPoints.uponReachWaitTime;
            bool        walk     = wayPoints.walk;
            bool        repeat   = wayPoints.patrol;
            bool        stopLoop = false;

            int       currentIndex       = FindCurrentClosestPoint(points);
            int       startingIndex      = currentIndex;
            Transform currentTargetPoint = points[currentIndex];

            _navAgent.SetDestination(currentTargetPoint.position);
            _animator.SetInteger(WalkId, walk ? 1 : 2);

            while (!stopLoop)
            {
                // Upon Reaching the Point, Wait for some seconds and Move On
                if (Vector3.Distance(transform.position, points[currentIndex].position) <= _stoppingDistance)
                {
                    _animator.SetInteger(WalkId, 0);

                    yield return(new WaitForSeconds(waitTime));

                    currentIndex = (currentIndex + 1) % points.Length;

                    if (!repeat && currentIndex == startingIndex)
                    {
                        stopLoop = true;
                    }

                    else
                    {
                        currentTargetPoint = points[currentIndex];
                        _navAgent.SetDestination(currentTargetPoint.position);
                        _animator.SetInteger(WalkId, walk ? 1 : 2);
                    }
                }

                else
                {
                    yield return(new WaitForSeconds(0.2f));
                }
            }
        }
 public void StartWayPointBehavior(WayPoints wayPoints)
 {
     ClearBehavior();
     StartCoroutine(WayPointBehavior(wayPoints));
 }