示例#1
0
    public static void SoltarObjeto(GerBotao ativo)
    {
        bool juntou = false;

        foreach (GerBotao obj in objetos)
        {
            if (obj != null && obj != ativo)
            {
                float distancia = Vector3.Distance(
                    obj.transform.localPosition,
                    ativo.transform.localPosition);

                if (distancia <= distanciaJuntar)
                {
                    JuntarObjetos(obj, ativo);
                    juntou = true;
                    break;
                }
                else
                {
                    //Utilidade.DebugMensagem ("Distância: " + distancia);
                }
            }
        }

        if (juntou == false)
        {
            AjeitarPosicao(ativo);
        }

        //MostrarGrade();
    }
示例#2
0
 public static void Limpar(bool recriar = true)
 {
     for (int i = 0; i < objetos.Count; i++)
     {
         GerBotao gb = objetos[i];
         //Utilidade.DebugMensagem ("Objeto: "+gb.posicaoGrade);
         if (gb != null)
         {
             gb.Destruir();
         }
     }
     objetos.Clear();
     //posicoesOcupadas.Clear();
     //posicoesLivres.Clear();
     //*
     if (recriar)
     {
         for (int i = 0; i < qtdMaxima; i++)
         {
             //posicoesLivres.Add(i);
             objetos.Add(null);
         }
     }
     //*/
 }
示例#3
0
 static int PegarPosicao(GerBotao bloco)
 {
     for (int i = 0; i < objetos.Count; i++)
     {
         if (bloco == objetos[i])
         {
             return(i);
         }
     }
     return(-1);
 }
示例#4
0
    static void AjeitarPosicao(GerBotao ativo)
    {
        LiberarPosicao(PegarPosicao(ativo));

        int p = PegarPosicaoMaisProxima(
            ativo.transform.localPosition);

        ativo.transform.localPosition = grade[p % qtdMaxima];
        ativo.posicaoGrade            = p;

        objetos[p] = ativo;
        //posicoesOcupadas.Add(p);
        //posicoesLivres.Remove(p);
    }
示例#5
0
    public void Resetar()
    {
        for (int i = 0; i < objetos.Count; i++)
        {
            GerBotao gb = objetos[i];
            //Utilidade.DebugMensagem ("Objeto: "+gb.posicaoGrade);
            if (gb != null)
            {
                gb.Destruir();
            }
        }
        objetos.Clear();
        //posicoesOcupadas.Clear();
        //posicoesLivres.Clear();
        Dados.pontosAtuais       = 0;
        Dados.pontosTotaisReais  = 0;
        Dados.quantidadeDeResets = 0;
        Dados.tempoTotalDeJogo   = 0;
        Dados.tempoAtualDeJogo   = 0;

        //if (posicoesLivres.Count == 0)
        //{
        for (int i = 0; i < qtdMaxima; i++)
        {
            //posicoesLivres.Add(i);
            objetos.Add(null);
        }
        //}

        for (int i = 0; i < quantidadeInicial; i++)
        {
            AdicionarEmPosicaoAleatoria();
        }

        foreach (Missao missao in Dados.missoes)
        {
            missao.Nivel(0);
            missao.AjeitarValores();
        }

        foreach (Realizacao realizacao in Dados.realizacoes)
        {
            realizacao.completa = false;
        }

        AjeitarResets();
    }
示例#6
0
    static void AjeitarGrade()
    {
        GameObject [] objs = GameObject.
                             FindGameObjectsWithTag("Bloco");

        //List<GerBotao> listanova = new List<GerBotao>();

        foreach (GameObject obj in objs)
        {
            GerBotao bot = obj.GetComponent <GerBotao>();
            if (!objetos.Contains(bot))
            {
                bot.Destruir();
            }
            //listanova.Add(bot);
        }
    }
示例#7
0
    static void JuntarObjetos(GerBotao parado, GerBotao juntado)
    {
        long novoValor = 0;
        long pontos    = 0;

        int pospar = PegarPosicao(parado);              //parado.posicaoGrade;
        int posjun = PegarPosicao(juntado);             //juntado.posicaoGrade;

        bool mul = false;

        if (juntado.multiplicou)
        {
            parado.multiplicou = true;
        }

        Tipos.Botao tipo = juntado.tipo;

        if (parado.tipo == Tipos.Botao.Multiplicador ||
            juntado.tipo == Tipos.Botao.Multiplicador)
        {
            novoValor = parado.valor * juntado.valor;
            if (novoValor > 0 && novoValor > Dados.blocoMaiorValor)
            {
                novoValor = Dados.blocoMaiorValor;
            }
            else if (novoValor < 0 && novoValor < -Dados.blocoMaiorValor)
            {
                novoValor = -Dados.blocoMaiorValor;
            }

            parado.multiplicou = true;

            if (parado.tipo == Tipos.Botao.Multiplicador &&
                juntado.tipo == Tipos.Botao.Multiplicador)
            {
                mul = true;
            }
        }
        else
        {
            novoValor = parado.valor + juntado.valor;
            if (novoValor > 0 && novoValor > Dados.blocoMaiorValor)
            {
                novoValor = Dados.blocoMaiorValor;
            }
            else if (novoValor < 0 && novoValor < -Dados.blocoMaiorValor)
            {
                novoValor = -Dados.blocoMaiorValor;
            }
        }

        long [] valores = new long[2];
        valores[0] = parado.valor;
        valores[1] = juntado.valor;
        VerificarRealizacoes(
            Realizacao.Tipo.Fundir, valores);
        VerificarRealizacoes(
            Realizacao.Tipo.FundirIndiferente, valores);

        LiberarPosicao(posjun);

        //objetos.Remove(juntado);
        juntado.Destruir();

        if (novoValor == 0)
        {
            EfeitosSonoros.Tocar(EfeitosSonoros.Tipos.Zerar);

            adicionarNovoBlocoAleatorio = true;
            //AdicionarEmPosicaoAleatoria();

            if (parado.valor < 0)
            {
                pontos = -parado.valor;
            }
            else
            {
                pontos = parado.valor;
            }
            //objetos.Remove(parado);
            parado.Zerou();
            LiberarPosicao(pospar);

            VerificarMissao(missaoZerar, pontos);
        }
        else
        {
            switch (tipo)
            {
            case Tipos.Botao.Positivo:
                EfeitosSonoros.Tocar(EfeitosSonoros.Tipos.Somar);
                break;

            case Tipos.Botao.Negativo:
                EfeitosSonoros.Tocar(EfeitosSonoros.Tipos.Subtrair);
                break;

            case Tipos.Botao.Multiplicador:
                EfeitosSonoros.Tocar(EfeitosSonoros.Tipos.Multiplicar);
                break;
            }


            valores    = new long[1];
            valores[0] = novoValor;

            long absNovoValor = novoValor;
            if (novoValor < 0)
            {
                absNovoValor = -novoValor;
            }

            if (mul)
            {
                VerificarMissao(
                    missaoMultiplicador, absNovoValor);
            }
            else
            {
                VerificarMissao(missaoBloco, absNovoValor);

                if (parado.multiplicou == false)
                {
                    VerificarRealizacoes(
                        Realizacao.Tipo.BlocoSemMultiplicar, valores);
                }
            }

            if (parado.tipo != Tipos.Botao.Multiplicador)
            {
                VerificarRealizacoes(
                    Realizacao.Tipo.BlocoNormal, valores);
                VerificarRealizacoes(
                    Realizacao.Tipo.BlocoMaiorQue, valores);
                VerificarRealizacoes(
                    Realizacao.Tipo.BlocoAbsoluto, valores);
            }

            parado.Mudar(novoValor, mul);
            parado.Brilhar();

            if (Random.value <= Dados.chanceCriarNovoBloco)
            {
                //AdicionarEmPosicaoAleatoria();
                adicionarNovoBlocoAleatorio = true;
            }
        }

        if (Dados.tutorialCompleto == false)
        {
            pontos = 0;
        }

        //Cria funçao para mostrar pontos ganhos.
        Dados.pontosAtuais += pontos;
        VerificarMissao(missaoPlacar, Dados.pontosAtuais);

        valores    = new long[1];
        valores[0] = Dados.pontosAtuais;
        VerificarRealizacoes(
            Realizacao.Tipo.PlacarExato, valores);

        /*
         * Utilidade.DebugMensagem(
         *      "Pontos recebidos: "+pontos +
         *      "; Nova pontuação: "+Dados.pontosAtuais+
         *      "; Resets: " + Dados.quantidadeDeResets +
         *      "; Pontos totais: "+Dados.pontosTotaisReais);
         * //*/

        VerificarReset(pontos);

        valores = new long[1];
        if (Dados.pontosTotaisReais < (ulong)Dados.pontosParaReset)
        {
            valores[0] = (long)Dados.pontosTotaisReais;
        }
        else
        {
            valores[0] = Dados.pontosParaReset;
        }
        VerificarRealizacoes(
            Realizacao.Tipo.Placar, valores);

        AjeitarResets();

        List <long> listaValores = new List <long>();
        string      vs           = "Valores:";

        foreach (GerBotao bloco in objetos)
        {
            if (bloco == null)
            {
                continue;
            }
            if (bloco.tipo != Tipos.Botao.Multiplicador &&
                bloco.tipo != Tipos.Botao.Zero)
            {
                vs += " " + bloco.valor;
                listaValores.Add(bloco.valor);
            }
        }
        VerificarRealizacoes(
            Realizacao.Tipo.VariosBlocos, listaValores.ToArray());
        //Utilidade.DebugMensagem (vs);

        valores    = new long[1];
        valores[0] = (long)Dados.quantidadeDeResets;
        VerificarRealizacoes(Realizacao.Tipo.Zerar, valores);

        valores    = new long[1];
        valores[0] = 1;
        foreach (Missao missao in Dados.missoes)
        {
            if (missao.Completa() == false)
            {
                valores[0] = 0;
                break;
            }
        }
        VerificarRealizacoes(
            Realizacao.Tipo.CompletarMissoes, valores);
    }