public void removeUnselected()
 {
     Generator.Data.infoText = "Remover salas não elegíveis: " + Text[2];
     GameObject[] objs = GameObject.FindGameObjectsWithTag("Root");
     foreach (GameObject obj in objs)
     {
         RootCreator root = obj.gameObject.GetComponent <RootCreator>();
         if (!root.selected)
         {
             Destroy(obj.gameObject);
         }
     }
 }
    public IEnumerator Populate()
    {
        GameObject[] objs = GameObject.FindGameObjectsWithTag("Root");
        foreach (GameObject sala in objs)
        {
            RootCreator root = sala.gameObject.GetComponent <RootCreator>();
            if (!root.spawnPoint)
            {
                // TIPO DE SALA
                int ran = Random.Range(1, 3);

                switch (ran)
                {
                case 1:                            //inimigo cobra

                    int dom = Random.Range(2, 30); //numero de cobras
                    for (int i = 0; i < dom; i++)
                    {
                        int posX = Random.Range((-root.sizeX) + 1, root.sizeX - 1);
                        int posY = Random.Range((-root.sizeY) + 1, root.sizeY - 1);
                        Generator.Spawn(Generator.Data.inimigo_cobra, new Vector3(sala.transform.position.x + posX, sala.transform.position.y + posY), Quaternion.identity);
                        Generator.Data.enemiesToKill++;
                    }

                    break;

                case 2:                            //inimigo golem

                    int ram = Random.Range(1, 10); //numero de cobras
                    for (int i = 0; i < ram; i++)
                    {
                        int posX = Random.Range((-root.sizeX) + 1, root.sizeX - 1);
                        int posY = Random.Range((-root.sizeY) + 1, root.sizeY - 1);
                        Generator.Spawn(Generator.Data.inimigo_golem, new Vector3(sala.transform.position.x + posX, sala.transform.position.y + posY), Quaternion.identity);
                        Generator.Data.enemiesToKill++;
                    }

                    break;

                case 3:                 //chefe
                    break;
                }
            }
            yield return(null);
        }
    }
 public void SelectMain()
 {
     Generator.Data.infoText = "Escolher salas elegíveis: " + Text[1];
     GameObject[] objs = GameObject.FindGameObjectsWithTag("Root");
     foreach (GameObject obj in objs)
     {
         RootCreator root = obj.gameObject.GetComponent <RootCreator>();
         if (root.sizeX * root.sizeY > 10)
         {
             root.selected = true;
             TileScript[] tiles = obj.GetComponentsInChildren <TileScript>();
             foreach (TileScript tile in tiles)
             {
                 tile.gameObject.GetComponent <SpriteRenderer>().sprite = Generator.Data.tile_selected;
             }
         }
     }
 }
    // Update is called once per frame
    void Update()
    {
        if (Generator.Data.generating)
        {
            int          collisionCount = 0;
            GameObject[] objs           = GameObject.FindGameObjectsWithTag("Root");
            foreach (GameObject obj in objs)
            {
                Vector3     pos    = obj.transform.position;
                RootCreator root   = obj.gameObject.GetComponent <RootCreator>();
                Vector2     pointA = new Vector2(pos.x - 0.5f - (root.sizeX * 0.8f), pos.y - 0.5f - (root.sizeY * 0.8f));
                Vector2     pointB = new Vector2(pos.x - 0.5f + (root.sizeX * 0.8f), pos.y - 0.5f + (root.sizeY * 0.8f));

                Collider2D[] res = Physics2D.OverlapAreaAll(pointA, pointB);
                if (res.Length != 0)
                {
                    foreach (Collider2D coll in res)
                    {
                        if (coll.gameObject != obj.gameObject)
                        {
                            Debug.DrawLine(obj.transform.position, coll.gameObject.transform.position, Color.red);
                            collisionCount++;
                        }
                    }
                }
            }

            if (collisionCount != 0)
            {
                text.color = Color.red;
            }
            else
            {
                text.color = Color.green;
            }
        }
    }
    public void ReadHallWay()
    {
        GameObject[]      objs   = GameObject.FindGameObjectsWithTag("Root");
        List <GameObject> needed = new List <GameObject>();

        foreach (GameObject obj in objs)
        {
            // Procura pro outras salas ao meu redor, indicando se eu preciso ou nao de um corredor
            Vector3      pos    = obj.transform.position;
            RootCreator  root   = obj.gameObject.GetComponent <RootCreator>();
            Vector2      pointA = new Vector2(pos.x - 0.5f - (root.sizeX * 1.1f), pos.y - 0.5f - (root.sizeY * 1.1f));
            Vector2      pointB = new Vector2(pos.x - 0.5f + (root.sizeX * 1.1f), pos.y - 0.5f + (root.sizeY * 1.1f));
            Collider2D[] res    = Physics2D.OverlapAreaAll(pointA, pointB);

            int numberOfIntersections = 0;
            // Se eu precisar de um corredor
            foreach (Collider2D coll in res)
            {
                if (coll.gameObject != obj.gameObject)
                {
                    numberOfIntersections++;
                }
            }

            if (numberOfIntersections == 0)
            {
                needed.Add(obj);
            }
        }

        foreach (GameObject need in needed)
        {
            GameObject nearest = getNearestRoom(need, objs);
            Debug.DrawLine(need.transform.position, nearest.transform.position, Color.black, 10);
        }
    }