/**
  * L'ennemi est en attente s'il est arrivé au waypoint prévu
  * */
 public void Move()
 {
     if (_enemyModel.Health > 0)
     {
         if (_enemyView.IsWaiting)
         {
             if (_wavepointIndex >= Waypoints.GetNumberOfWaypoints())
             {
                 //L'ennemi est arrivé au point de fin
                 NotifyObservers();
                 _enemyView.Die();
                 GameController.HealthDown();
             }
             else
             {
                 _enemyView.Move(Waypoints.GetWaypoints(_wavepointIndex), _enemyModel.Speed);
                 ++_wavepointIndex;
             }
         }
         else
         {
             _enemyView.Move(Waypoints.GetWaypoints(_wavepointIndex - 1), _enemyModel.Speed);
         }
     }
     else
     {
         //L'ennemi à été tué
         NotifyObservers();
         Die();
         GameData.Money = GameData.Money + 5;
     }
 }
    // updates the position of the enemy
    private void UpdateMotion()
    {
        eSpeed = enemiesController.GetEnemySpeed();

        RB.MovePosition(transform.position + (transform.TransformDirection(Vector3.up) * eSpeed * Time.deltaTime));
        distanceToWaypoint = Vector3.Distance(heading.position, transform.position);
        flightOrder        = enemiesController.FlightOrder();

        // if enemy reached waypoint, assign new waypoint
        if (distanceToWaypoint < waypointThreshold)
        {
            if (flightOrder)
            {
                // ordered flight pattern
                headingIndex++;

                // check overflow, reassign to 0 if at end
                if (headingIndex > waypoints.GetNumberOfWaypoints() - 1)
                {
                    headingIndex = 0;
                }

                heading = waypoints.GetWaypoint(headingIndex).transform;
            }
            else
            {
                // random flight pattern
                heading = waypoints.GetRNGWaypoint().transform;
            }
            NewDirection();
        }
    }