// coroutine pour le deplacement aletoire
    IEnumerator Deplacement()
    {
        // verifie si il lui reste des mouvements, si oui il choisi une position aleatoir
        while (_mouvementCourant > 0)
        {
            List <OrientationHero> orientationValide = OrientationValide();                     // determine les orientations possible
            OrientationHero        orientation       = OrientationAleatoire(orientationValide); // choisis un orientation
            Vector3Int             targetPos         = ObtenirTargetPosition(_grid.WorldToCell(transform.position), orientation);
            Vector3 destinationPos = CentrerPositionGrille(_grid.CellToWorld(targetPos));

            float vitesse           = _vitesse * Time.deltaTime;
            float _distanceRestante = DistanceRestanteCalcul(destinationPos);

            // bouge le personnage
            while (_distanceRestante > float.Epsilon)
            {
                transform.position = Vector3.MoveTowards(transform.position, destinationPos, vitesse);
                _distanceRestante  = DistanceRestanteCalcul(destinationPos);
                yield return(null);
            }

            _mouvementCourant = _mouvementCourant - 1;
        }

        _mouvementCourant = _nbMouvement;
        TurnManager.instance.CompleterTour(TourPerso.Ennemi); //termine le tour ennemi
    }
    //determine la position de deplacement ennemi selon son orientation
    Vector3Int ObtenirTargetPosition(Vector3Int position, OrientationHero orientation)
    {
        switch (orientation)
        {
        case OrientationHero.NE:
            return(new Vector3Int(position.x + 1, position.y, 0));

            break;

        case OrientationHero.NW:
            return(new Vector3Int(position.x, position.y + 1, 0));

            break;

        case OrientationHero.SE:
            return(new Vector3Int(position.x, position.y - 1, 0));

            break;

        case OrientationHero.SW:
            return(new Vector3Int(position.x - 1, position.y, 0));

            break;

        default:
            return(position);
        }
    }
    //verifie si la tuile est valide
    bool ValiderPosition(Vector3Int position, OrientationHero orientation)
    {
        Vector3Int _targetPosCollision = ObtenirTargetPosition(position, orientation);

        return(!_collision.HasTile(_targetPosCollision));
    }