Exemplo n.º 1
0
    static int QuantidadeMaxima(Rebatedores.Tipo tipo)
    {
        switch (tipo)
        {
        case Rebatedores.Tipo.Fixo:
            return(4);

        case Rebatedores.Tipo.VerticalCimaBaixo:
        case Rebatedores.Tipo.VerticalBaixoCima:
            return(2);
        }
        return(1);
    }
Exemplo n.º 2
0
    static int ModPos(Rebatedores.Tipo tipo)
    {
        switch (tipo)
        {
        case Rebatedores.Tipo.Fixo:
            return(6);

        case Rebatedores.Tipo.DiagonalEsqDir:
        case Rebatedores.Tipo.DiagonalDirEsq:
            return(3);
        }
        return(2);
    }
Exemplo n.º 3
0
    static List <Rebatedor> CriarRebatedoresGrade(int pos, bool f, int dif)
    {
        List <Rebatedor> rebs = new List <Rebatedor>();

        float chanceDestrutivel =
            1 - ((dif - 1f) / Dados.jogoRapidoDificuldadeMaxima);

        //bool destru = Random.value <= chanceDestrutivel;


        Rebatedores.Tipo tipo = PegarTipo(f);
        int m          = ModPos(tipo);
        int qMaxPorDif = dif / 2;
        int q          = QuantidadeMaxima(tipo);

        q = q <= qMaxPorDif ? q : qMaxPorDif;
        q = q > 1 ? q : 1;

        List <int> posicoes = new List <int>();

        for (int i = 0; i < m; i++)
        {
            posicoes.Add(i);
        }

        for (int i = 0; i < q; i++)
        {
            Rebatedor reb = new Rebatedor();
            reb.destrutivel  = Random.value <= chanceDestrutivel;
            reb.posicaoGrade = pos;
            reb.tipo         = tipo;
            reb.posicaoLocal = AleatorioLista <int>(posicoes);

            rebs.Add(reb);
        }

        return(rebs);
    }
    // Métodos públicos
    public void Criar(
        Rebatedores.Tipo t, bool d, Vector3 p, int posGrade)
    {
        tipo         = t;
        destrutivel  = d;
        posInicial   = p;
        posicaoGrade = posGrade;

        switch (tipo)
        {
        case Rebatedores.Tipo.HorizontalEsqDir:
            limiteNegativo = p.x;
            limitePositivo = p.x + 2 * Dados.rebatedorDistanciaHorizontal;
            distancia      = limiteNegativo;
            direcao        = 1;
            velocidade     = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.HorizontalDirEsq:
            limitePositivo = p.x;
            limiteNegativo = p.x - 2 * Dados.rebatedorDistanciaHorizontal;
            distancia      = limitePositivo;
            direcao        = -1;
            velocidade     = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.VerticalCimaBaixo:
            limitePositivo = p.y;
            limiteNegativo = p.y - Dados.rebatedorDistanciaVertical;
            distancia      = limitePositivo;
            direcao        = 1;
            velocidade     = Dados.rebatedorVerticalVelocidade;
            break;

        case Rebatedores.Tipo.VerticalBaixoCima:
            limiteNegativo = p.y;
            limitePositivo = p.y + Dados.rebatedorDistanciaVertical;
            distancia      = limiteNegativo;
            direcao        = -1;
            velocidade     = Dados.rebatedorVerticalVelocidade;
            break;

        case Rebatedores.Tipo.DiagonalDirEsqBaixoCima:
            limitePositivo       = p.x;
            limiteNegativo       = p.x - 2 * Dados.rebatedorDistanciaHorizontal;
            distancia            = limitePositivo;
            distanciaExtra       = p.y;
            posicaoExtraNegativo = p.y;
            posicaoExtraPositivo = p.y + Dados.rebatedorDistanciaVertical;
            direcao      = -1;
            direcaoExtra = 1;
            velocidade   = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.DiagonalDirEsqCimaBaixo:
            limitePositivo       = p.x;
            limiteNegativo       = p.x - 2 * Dados.rebatedorDistanciaHorizontal;
            distancia            = limitePositivo;
            distanciaExtra       = p.y;
            posicaoExtraPositivo = p.y;
            posicaoExtraNegativo = p.y - Dados.rebatedorDistanciaVertical;
            direcao      = -1;
            direcaoExtra = -1;
            velocidade   = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.DiagonalEsqDirBaixoCima:
            limiteNegativo       = p.x;
            limitePositivo       = p.x + 2 * Dados.rebatedorDistanciaHorizontal;
            distancia            = limiteNegativo;
            distanciaExtra       = p.y;
            posicaoExtraNegativo = p.y;
            posicaoExtraPositivo = p.y + Dados.rebatedorDistanciaVertical;
            direcao      = 1;
            direcaoExtra = 1;
            velocidade   = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.DiagonalEsqDirCimaBaixo:
            limiteNegativo       = p.x;
            limitePositivo       = p.x + 2 * Dados.rebatedorDistanciaHorizontal;
            distancia            = limiteNegativo;
            distanciaExtra       = p.y;
            posicaoExtraPositivo = p.y;
            posicaoExtraNegativo = p.y - Dados.rebatedorDistanciaVertical;
            direcao      = 1;
            direcaoExtra = -1;
            velocidade   = Dados.rebatedorHorizontalVelocidade;
            break;

        case Rebatedores.Tipo.CircularHorario:
            direcao    = -1;
            velocidade = Dados.rebatedorAngularVelocidade;
            break;

        case Rebatedores.Tipo.CircularAntihorario:
            direcao    = 1;
            velocidade = Dados.rebatedorAngularVelocidade;
            break;
        }
    }