/// <summary> /// Constructeur paramétré initialisant les attributs de this. Invoque la fonction privée /// Initialiser() qui fait la quasi-totalité du travail d'initialisation de l'instance. /// </summary> /// <param name="monde">Monde de tuiles à utiliser pour construire la grille.</param> /// <param name="couleursFranchissables">Liste de couleurs à considérer comme franchissable /// (voir fonction Initialiser()).</param> public PFGrille(MondeTuiles monde, List<Color> couleursFranchissables) { this.Initialiser(monde, couleursFranchissables); }
/// <summary> /// Fonction construisant la grille de noeuds à partir du monde de tuiles fourni en paramètre. /// La fonction crée la matrice (grille) de même taille que celle de tuiles du monde, puis /// un noeud pour chaque tuile. Le paramètre couleursFranchissables est exploité pour /// déterminer si chaque tuile est franchissable ou pas (si les couleurs retrouvées dans une tuiles /// sont toutes dans couleursFranchissables, alors la tuile est considérée franchissable). /// </summary> /// <param name="monde">Monde de tuiles à considérer pour construire pricGrille.</param> /// <param name="couleursFranchissables">Liste de couleurs à considérer pour déterminer si une tuile /// est franchissable ou pas.</param> public void Initialiser(MondeTuiles monde, List<Color> couleursFranchissables) { this.Monde = monde; // socker l'instance de MondeDeTuiles // Déterminer pour chaque tuile de la palette lesquelles sont franchissables. bool[] franchissables = new bool[this.Monde.PaletteCollisions.NombreDeTuiles]; for (int tuileIdx = 0; tuileIdx < franchissables.GetLength(0); tuileIdx++) { franchissables[tuileIdx] = true; // Obtenir la liste des couleurs retrouvées dans la tuile courante. List<Color> couleurs; this.Monde.PaletteCollisions.CouleursDansTuile(tuileIdx, out couleurs); // Pour chaque couleur de la tuile, vérifier si elle est dans couleursFranchissables // (sinon la tuile n'est pas considérée comme franchissable). foreach (Color clr in couleurs) { if (!couleursFranchissables.Exists(delegate(Color c) { return c == clr; })) { franchissables[tuileIdx] = false; break; } } } // Indiquer pour chaque noeud de la grille s'il est franchissable ou non. for (int row = 0; row < this.NombreRangees; row++) { for (int col = 0; col < this.NombreColonnes; col++) { // Calculer les coordonnées du centre de la tuile correspondant au noeud. Vector2 centre = new Vector2( (col * this.Monde.PaletteCollisions.LargeurTuile) + (this.Monde.PaletteCollisions.LargeurTuile / 2), (row * this.Monde.PaletteCollisions.HauteurTuile) + (this.Monde.PaletteCollisions.HauteurTuile / 2)); // Obtenir l'index de cette tuile dans la palette du monde. int tuileIdx = this.Monde.MondeXY2TuileIdx(centre); // Configurer le noeud en conséquence. this.grille[row, col].Franchissable = franchissables[tuileIdx]; } } }
/// <summary> /// Constructeur paramétré initialisant les attributs de this. Invoque la fonction privée /// Initialiser() qui fait la quasi-totalité du travail d'initialisation de l'instance. /// </summary> /// <param name="monde">Monde de tuiles à utiliser pour construire la grille.</param> /// <param name="couleurFranchissable">Couleur à considérer comme franchissable (voir /// fonction Initialiser()).</param> public PFGrille(MondeTuiles monde, Color couleurFranchissable) { // Invoquer l'autre constructeur de la classe. List<Color> couleursFranchissables = new List<Color>(); couleursFranchissables.Add(couleurFranchissable); this.Initialiser(monde, couleursFranchissables); }