void OnDrawGizmos() { GameObject[] allObjects = UnityEngine.Object.FindObjectsOfType <GameObject>(); foreach (GameObject obj in allObjects) { // ControllableByKeyboard control = obj.GetComponent<ControllableByKeyboard> (); // if (control != null) { // Vector3 p = control.point; // if (p != null) { // Gizmos.color = new Color(0.0f,255.0f,0.0f,255f); // Gizmos.DrawSphere (p, 5); // on dessine le cercle de vision. // } // // } Behaviour behav = obj.GetComponent <Behaviour> (); if (behav == null) { continue; } if (behav.index_currentBehaviour != EnumBehaviour.Patrouille) { continue; } Vivant bdv = obj.GetComponent <Vivant> (); if (bdv != null) { Gizmos.color = new Color(255f, 255f, 0f, 0.2f); Gizmos.DrawSphere(bdv.centreOfPatrouille, bdv.rayonPatrouille); // on dessine le cercle de la patrouille Gizmos.color = new Color(0f, 255f, 0f, 0.2f); Gizmos.DrawSphere(bdv.objectifCoord, 5); // on dessine l'objectif Gizmos.color = new Color(0f, 0.0f, 255f, 0.2f); Gizmos.DrawSphere(obj.transform.position, bdv.rayonVueAlerte); // on dessine le cercle de vision. } } }
// on affiche la map avec la position de l'aventurier public void afficheMap(ref Vivant.Aventurier joueur, List<Torches> etatsDesTorches, List<Pieces> etatsDesPieces, ref List<List<affichage>> ancienAffichageMap) { const char affichageBrouillard = '#'; bool torchesAllummees = true; List<List<affichage>> affichageMap = new List<List<affichage>>(); #region on vérifie si toute les torches sont allumés foreach (Torches torche in etatsDesTorches) { if (!torche.estAllume) torchesAllummees = false; } #endregion // torchesAllummees est alors a true ou false #region on initialise totalemnt la variable affichageMap for (int i = 0; i < m_Map.Count; i++) { // pour chaque ligne, on ajoute une ligne d'affichage affichageMap.Add(new List<affichage>()); for (int j = 0; j < m_Map[i].Count; j++) { affichageMap[i].Add(new affichage() { estVide = true }); } } #endregion for (int i = 0; i < m_Map.Count; i++) { for (int j = 0; j < m_Map[i].Count; j++) { #region si les torches sont allumées et si la case est normalement observable if (torchesAllummees && m_Map[i][j].EstVisible) { if(affichageMap[i][j].estVide) // on enregistre le contenue de la case affichageMap[i][j] = (new affichage(m_Map[i][j].affichage, m_Map[i][j].couleurElement, i, j) { estVide = false }); } #endregion #region si la case est a moins de 5 case du joueur et que les torches sont éteintes et qu'elle est observable else if (i > (joueur.PositionX - 4) && i < (joueur.PositionX + 4) && j > (joueur.PositionY - 5) && j < (joueur.PositionY + 5) && m_Map[i][j].EstVisible) // on enregistre le contenue de la case { if (affichageMap[i][j].estVide) affichageMap[i][j] = (new affichage(m_Map[i][j].affichage, m_Map[i][j].couleurElement, i, j) { estVide = false } ); } #endregion // si la i et j ne sont ni le joueur, ni une torche ni a proximité de l'un des deux, alors on affiche le brouillard else { if (affichageMap[i][j].estVide) // on enregistre le contenue de la case affichageMap[i][j] = (new affichage(affichageBrouillard, ConsoleColor.DarkGray, i, j) { estVide = true } ); } #region on enregistre les torches dans l'affichage foreach (Torches torche in etatsDesTorches) { #region si la torche est allumé, on affiche les 5 cases autours if (torche.estAllume && (i > (torche.posX - 8) && i < (torche.posX + 8) && j > (torche.posY - 9) && j < (torche.posY + 9)) && m_Map[i][j].estVisible) { if (affichageMap[i][j].estVide) affichageMap[i][j] = (new affichage(m_Map[i][j].affichage, m_Map[i][j].couleurElement, i, j) { estVide = false } ); } #endregion // on enregistre la torche si i et j sont a la position de la torche if (i == torche.posX && j == torche.posY) { #region si elle est allumé OU dans un rayon de 5 autour du joueur on l'affiche en jaune, sinon le tradi brouillard if (torche.estAllume || (torche.posX > (joueur.PositionX - 4) && torche.posX < (joueur.PositionX + 4) && torche.posY > (joueur.PositionY - 5) && torche.posY < (joueur.PositionY + 5))) { affichageMap[i][j] = (new affichage('*', torche.couleurTorche, torche.posX, torche.posY) { estVide = false }); } else { if (affichageMap[i][j].estVide) affichageMap[i][j] = (new affichage(affichageBrouillard, ConsoleColor.DarkGray, torche.posX, torche.posY) { estVide = true }); } #endregion } } #endregion #region on enregistre les pieces dans l'affichage foreach (Pieces piece in etatsDesPieces) { // si i et j sont une piece if (i == piece.posX && j == piece.posY) { // si elle est dans un rayon de 5 autour du joueur ou que les torches sont allumées if (torchesAllummees || (piece.posX > (joueur.PositionX - 4) && piece.posX < (joueur.PositionX + 4) && piece.posY > (joueur.PositionY - 5) && piece.posY < (joueur.PositionY + 5))) { if (!piece.estPrise) // si la piece est toujours là { if (affichageMap[i][j].estVide) affichageMap[i][j] = (new affichage(m_Map[i][j].Affichage, m_Map[i][j].CouleurElement, piece.posX, piece.posY) { estVide = false }); } else // si elle n'est plus là { // quoiqu'il arrive, si la piece est prise, il ne faut rien mettre dans cette case // on ne fais donc pas la verification affichageMap[i][j] = (new affichage('\0', ConsoleColor.Black, piece.posX, piece.posY) { estVide = false }); } } else { if (affichageMap[i][j].estVide) affichageMap[i][j] = (new affichage(affichageBrouillard, ConsoleColor.DarkGray, piece.posX, piece.posY) { estVide = true }); } } } #endregion // on fini par enregistrer la position du joueur, quoi qu'on ai mis avant dans la case #region si i et j sont la position du joueur if (i == joueur.PositionX && j == joueur.PositionY) { // on enregistre le joueur a sa position affichageMap[i][j] = (new affichage('@', joueur.Couleur, i, j) { estVide = false }); } #endregion } // fin dur for j } // fin du for i #region on affiche enfin le tout dans la console List<affichage> differenceEntreDeuxMap = new List<affichage>(); for (int i = 0; i < affichageMap.Count; i++) for (int j = 0; j < affichageMap[i].Count; j++) { if (!affichageMap[i][j].Equals(ancienAffichageMap[i][j])) differenceEntreDeuxMap.Add(affichageMap[i][j]); } foreach (affichage aff in differenceEntreDeuxMap) aff.affiche(); ancienAffichageMap = affichageMap; #endregion } // fin fonction