Example #1
0
    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