public virtual void AtualizaVisao()
    {
        Config.Point pos    = new Config.Point((int)transform.position.x, (int)transform.position.y);
        int          startC = pos.x - raioDeVisao;
        int          startL = pos.y - raioDeVisao;
        int          fimC   = pos.x + raioDeVisao;
        int          fimL   = pos.y + raioDeVisao;

        int x = startC;
        int y = startL;

        for (x = startC; x <= fimC; x++)
        {
            for (y = startL; y <= fimL; y++)
            {
                if (controleMapa.DentroMapa(x, y))
                {
                    int raio = raioDeVisao - matrizIlha [x, y].bloqueioVisao;
                    if (Mathf.Pow((x - pos.x), 2) + Mathf.Pow((y - pos.y), 2) <= raio * raio)
                    {
                        matrizIlha [x, y].Mostra();
                    }
                }
            }
        }
    }
Exemple #2
0
    void EscolheSpawnJogador(Area[,] mapa)
    {
        Config.Point ponto = new Config.Point(0, 0);


        //Descobre em qual "quadrante" ta o boss

        //Primeiro quadrante - superior esquerdo
        if (pontoBoss.x < mapa.GetLength(0) / 2 && pontoBoss.y >= mapa.GetLength(1) / 2)
        {
            ponto = LinhaSpawn(mapa, 3, mapa.GetLength(0), mapa.GetLength(1));
        }

        //Segundo quadrante - superior direito
        if (pontoBoss.x >= mapa.GetLength(0) / 2 && pontoBoss.y >= mapa.GetLength(1) / 2)
        {
            ponto = LinhaSpawn(mapa, 4, mapa.GetLength(0), mapa.GetLength(1));
        }

        //Terceiro quadrante - inferior direito
        if (pontoBoss.x >= mapa.GetLength(0) / 2 && pontoBoss.y < mapa.GetLength(1) / 2)
        {
            ponto = LinhaSpawn(mapa, 1, mapa.GetLength(0), mapa.GetLength(1));
        }

        //Quarto quadrante - inferior esquerdo
        if (pontoBoss.x < mapa.GetLength(0) / 2 && pontoBoss.y < mapa.GetLength(1) / 2)
        {
            ponto = LinhaSpawn(mapa, 2, mapa.GetLength(0), mapa.GetLength(1));
        }

        pontoSpawn = ponto;
        mapa [ponto.x, ponto.y].tipo = SPAWN;
    }
Exemple #3
0
    Area[,] ColocaAreaFinal(Area[,] mapa1)
    {
        Area[,] mapaRetorno = new Area[mapa1.GetLength(0), mapa1.GetLength(1)];
        Area[,] mapa2       = FazMapaTesouroFinal();

        Vector2 ponto   = PegaPontoInicial(mapa1);
        int     xCentro = (int)ponto.x;
        int     yCentro = (int)ponto.y;

        int tamanhoX = mapa2.GetLength(0) / 2;
        int tamanhoY = mapa2.GetLength(1) / 2;


        int zeroX = xCentro - tamanhoX;
        int zeroY = yCentro - tamanhoY;

        int contagem2 = 0;


        while (contagem2 < tamMinimoBoss)
        {
            contagem2 = 0;
            for (int l, c = 0; c < mapaRetorno.GetLength(0); c++)
            {
                for (l = 0; l < mapaRetorno.GetLength(1); l++)
                {
                    mapaRetorno [c, l] = mapa1 [c, l];
                    if (c >= zeroX && c < xCentro + tamanhoX)
                    {
                        if (l >= zeroY && l < yCentro + tamanhoY)
                        {
                            int difX = c - zeroX;
                            int difY = l - zeroY;
                            if (mapa1 [c, l].tipo == GRAMA && mapa2 [difX, difY].tipo == GRAMA)
                            {
                                mapaRetorno [c, l].tipo        = FINAL;
                                mapaRetorno [c, l].dificuldade = 5;
                                contagem2++;
                            }
                            if (difX == tamanhoX && difY == tamanhoY)
                            {
                                pontoBoss = new Config.Point(c, l);
                                mapaRetorno [c, l].tipo        = BOSS;
                                mapaRetorno [c, l].dificuldade = 6;
                            }
                        }
                    }
                }
            }
            if (contagem2 < tamMinimoBoss)
            {
                contagem2 = 0;
                mapa2     = FazMapaTesouroFinal();
            }
        }

        return(mapaRetorno);
    }
Exemple #4
0
    /*** Secao de interface ***/

    public Area[,]  ConstroiIlha()
    {
        mapaIlha = new ConstrutorMapa(largura, altura, iteracoes, iteracoesDif, percentAguaInicial, percentDifMinInicial);
        //mapaIlha.matrizMapa = ColocaAreaFinal (mapaIlha.matrizMapa);
        Vector2 v = PegaPontoInicial(mapaIlha.matrizMapa);

        pontoBoss = new Config.Point((int)v.x, (int)v.y);
        EscolheSpawnJogador(mapaIlha.matrizMapa);
        DesenhaMapa(mapaIlha);

        matrizFinal = mapaIlha.matrizMapa;
        return(matrizFinal);
        //DesenhaMapa(mapaIlha.matrizMapa);
    }
    public void Popula(Area[,] mapa, Config.Point spawn)
    {
        playerTransform.position = new Vector2(spawn.x, spawn.y);
        List <Area> listaMapa = mapa.Cast <Area> ().ToList();

        areasGrama  = listaMapa.Where(i => i.dificuldade == 1 && i.tipo == FazIlha.GRAMA).ToList();
        areasMato   = listaMapa.Where(i => i.dificuldade == 2).ToList();
        areasRuinas = listaMapa.Where(i => i.dificuldade >= 3 && i.dificuldade <= 4).ToList();
        areasBoss   = listaMapa.Where(i => i.dificuldade >= 5).ToList();


        PopulaGramas(mapa);
        PopulaMatos(mapa);
        PopulaSeparadas(mapa);
    }
Exemple #6
0
    protected void EscolheAtaque()
    {
        Config.Point pontoAlvo = new Config.Point((int)alvo.transform.position.x, (int)alvo.transform.position.y);
        Config.Point pontoBoss = new Config.Point((int)transform.position.x, (int)transform.position.y);

        if (pontoAlvo.x == pontoBoss.x || pontoAlvo.x == pontoBoss.x + 1)
        {
            if (pontoAlvo.y < pontoBoss.y)
            {
                Fogo();
            }
            else if (pontoAlvo.y > pontoBoss.y + 1)
            {
                Rabo();
            }
        }
        else
        {
            if (pontoAlvo.y == pontoBoss.y || pontoAlvo.y == pontoBoss.y)
            {
                Asas();
            }
            else if (pontoAlvo.y < pontoBoss.y)
            {
                if (pontoBoss.y - pontoAlvo.y <= larguraExtraAsa)
                {
                    Asas();
                }
                else
                {
                    Fogo();
                }
            }
            else if (pontoAlvo.y > pontoBoss.y + 1)
            {
                if (pontoAlvo.y - (pontoAlvo.y + 1) <= larguraExtraAsa)
                {
                    Asas();
                }
                else
                {
                    Rabo();
                }
            }
        }
    }
Exemple #7
0
    void TiraDesconectadas()
    {
        Config.Point        pontoInicial = new Config.Point(largura / 2, altura / 2);
        List <Config.Point> lista        = FloodFill(pontoInicial);

        if (lista.Count == 0)
        {
            return;
        }
        Config.Point np = new Config.Point(0, 0);
        for (int l, c = 0; c < largura; c++)
        {
            for (l = 0; l < altura; l++)
            {
                np.x = c;
                np.y = l;
                if (!lista.Contains(np))
                {
                    matrizMapa [c, l].tipo        = 1;
                    matrizMapa [c, l].dificuldade = difMin;
                }
            }
        }
    }
Exemple #8
0
    List <Config.Point> FloodFill(Config.Point startP)
    {
        if (matrizMapa [startP.x, startP.y].tipo == 1)
        {
            return(new List <Config.Point> ());
        }

        Queue <Config.Point> fila       = new Queue <Config.Point> ();
        List <Config.Point>  pontosArea = new List <Config.Point> ();

        fila.Enqueue(startP);
        pontosArea.Add(startP);
        while (fila.Count > 0)
        {
            Config.Point p  = fila.Dequeue();
            Config.Point np = new Config.Point(0, 0);
            if (!EAgua(p.x - 1, p.y))
            {
                np.x = p.x - 1;
                np.y = p.y;
                if (!pontosArea.Contains(np))
                {
                    fila.Enqueue(np);
                    pontosArea.Add(np);
                }
            }

            if (!EAgua(p.x + 1, p.y))
            {
                np.x = p.x + 1;
                np.y = p.y;
                if (!pontosArea.Contains(np))
                {
                    fila.Enqueue(np);
                    pontosArea.Add(np);
                }
            }

            if (!EAgua(p.x, p.y + 1))
            {
                np.x = p.x;
                np.y = p.y + 1;
                if (!pontosArea.Contains(np))
                {
                    fila.Enqueue(np);
                    pontosArea.Add(np);
                }
            }
            if (!EAgua(p.x, p.y - 1))
            {
                np.x = p.x;
                np.y = p.y - 1;
                if (!pontosArea.Contains(np))
                {
                    fila.Enqueue(np);
                    pontosArea.Add(np);
                }
            }
        }

        return(pontosArea);
    }