// 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)); }