void LancarPassanteBaixo()
    {
        Passante p = ondasBaixo[atualBaixo].Lancar();

        if (p != null)
        {
            Lancar(p);
            if (ondasBaixo[atualBaixo].Gritar())
            {
                Gritar();
            }
        }
    }
    void LancarPassanteCima()
    {
        Passante p = ondasCima[atualCima].Lancar();

        if (p != null)
        {
            Lancar(p);
            if (ondasCima[atualCima].Gritar())
            {
                Gritar();
            }
        }
    }
    // Métodos estáticos
    public static void DerrubouPassante(Passante p, int pontos)
    {
        Dados.pontosUltimaFasePassantes += pontos;

        totalDerrubados++;

        if (p.ponte == Pontes.Cima)
        {
            derrubadosCima++;
        }
        else
        {
            derrubadosBaixo++;
        }
    }
    Onda CriarNovaOndaSobrevivencia()
    {
        int dir = 1;

        if (Utilidade.MeiaChance())
        {
            dir = -1;
        }

        List <Passante> listapassantes = new List <Passante>();

        float vel = Random.Range(1.0f, 1.5f) *
                    ((float)Dados.jogoRapidoDificuldade * dir);

        Passante passante = new Passante(vel, Pontes.Cima);

        listapassantes.Add(passante);

        if (podeLancarMaisDeUmSobrevivencia)
        {
            float changeVir1 = ((float)Dados.jogoRapidoDificuldadeMaxima -
                                Dados.jogoRapidoDificuldade + 1);

            changeVir1 /= ((float)Dados.jogoRapidoDificuldadeMaxima);

            float chanceVir2 = 1f - changeVir1;
            float chanceVir3 = chanceVir2 * 0.333f;

            float aleatorio = Random.value;

            if (aleatorio < chanceVir2)
            {
                Passante passante2 = new Passante(vel * 0.8f, Pontes.Cima);
                listapassantes.Add(passante2);
            }

            if (aleatorio < chanceVir3)
            {
                Passante passante3 = new Passante(vel * 0.6f, Pontes.Cima);
                listapassantes.Add(passante3);
            }
        }

        Onda onda = new Onda(listapassantes);

        return(onda);
    }
    void Lancar(Passante p)
    {
        float   destino = ponteCimaDireita.position.x;
        Vector3 posicao = ponteCimaEsquerda.position;

        int        indice  = Random.Range(0, passantes.Length);
        GameObject prePass = passantes[indice];

        if (p.ponte == Pontes.Cima)
        {
            if (p.direcao == Passante.Direcoes.ParaEsquerda)
            {
                destino = ponteCimaEsquerda.position.x;
                posicao = ponteCimaDireita.position;
            }
        }
        else
        {
            if (p.direcao == Passante.Direcoes.ParaEsquerda)
            {
                destino = ponteBaixoEsquerda.position.x;
                posicao = ponteBaixoDireita.position;
            }
            else
            {
                destino = ponteBaixoDireita.position.x;
                posicao = ponteBaixoEsquerda.position;
            }
        }

        GameObject passante = (GameObject)Instantiate(
            prePass, posicao, Quaternion.identity);

        if (p.direcao == Passante.Direcoes.ParaEsquerda)
        {
            passante.transform.localScale = new Vector3(
                -passante.transform.localScale.x,
                passante.transform.localScale.y,
                passante.transform.localScale.z);
        }

        passante.GetComponent <ControlePassante>()
        .Criar(p, destino);
    }
    void SobrevivenciaLancarPassanteCima()
    {
        if (ondasCima.Count == 0 || ondasCima[0].Acabou())
        {
            ondasCima.Clear();
            ondasCima.Add(CriarNovaOndaSobrevivencia());
        }

        Passante p = ondasCima[atualCima].Lancar();

        if (p != null)
        {
            Lancar(p);
            if (ondasCima[atualCima].Gritar())
            {
                Gritar();
            }
        }
    }
Esempio n. 7
0
    // Métodos públicos
    public void Criar(Fase f, bool inicializar = true)
    {
        //Debug.Log(f.ParaString());

        // Pega os passantes da ponte de cima
        ondasCima.Clear();
        int patual = 0;

        foreach (int o in f.w)
        {
            List <Passante> passantes = new List <Passante>();
            for (int i = 0; i < o; i++)
            {
                Passante passante = new Passante(
                    f.s[patual + i], Pontes.Cima);
                passantes.Add(passante);
            }
            patual += passantes.Count;
            ondasCima.Add(new Onda(passantes));
        }

        // Pega os passantes da ponte de baixo
        ondasBaixo.Clear();
        Dados.ponteBaixo = false;
        if (f.sbridge)
        {
            Dados.ponteBaixo = true;
            patual           = 0;
            foreach (int o in f.sw)
            {
                List <Passante> passantes = new List <Passante>();
                for (int i = 0; i < o; i++)
                {
                    Passante passante = new Passante(
                        f.ss[patual + i], Pontes.Baixo);
                    passantes.Add(passante);
                }
                patual += passantes.Count;
                ondasBaixo.Add(new Onda(passantes));
            }
        }

        // Verifica o movimento do barco
        Dados.barcoMove = false;
        if (f.boat > 0)
        {
            Dados.barcoMove = true;
            switch (f.boat)
            {
            case 1:
                Dados.barcoVelocidade = Dados.BARCO_VELOCIDADE_LENTO;
                break;

            case 2:
                Dados.barcoVelocidade = Dados.BARCO_VELOCIDADE_NORMAL;
                break;

            case 3:
                Dados.barcoVelocidade = Dados.BARCO_VELOCIDADE_RAPIDO;
                break;
            }
        }

        // Verifica o vento
        controleVento.Desabilitar();
        Dados.vento = false;
        if (f.wind > 0)
        {
            Dados.vento = true;
            switch (f.wind)
            {
            case 1:
                Dados.ventoVelocidade = Dados.VENTO_VELOCIDADE_LENTO;
                break;

            case 2:
                Dados.ventoVelocidade = Dados.VENTO_VELOCIDADE_NORMAL;
                break;

            case 3:
                Dados.ventoVelocidade = Dados.VENTO_VELOCIDADE_RAPIDO;
                break;

            case 4:
                Dados.ventoVelocidade = Dados.VENTO_VELOCIDADE_MAX;
                break;
            }
            switch (f.dir)
            {
            case 1:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_NORTE;
                break;

            case 2:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_NORDESTE;
                break;

            case 3:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_LESTE;
                break;

            case 4:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_SUDESTE;
                break;

            case 5:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_SUL;
                break;

            case 6:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_SUDOESTE;
                break;

            case 7:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_OESTE;
                break;

            case 8:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_NOROESTE;
                break;

            default:
                Dados.ventoDirecao = Dados.VENTO_DIRECAO_NORTE;
                break;
            }
        }

        // Verifica se o vento varia de velocidade
        if (f.wind < 0)
        {
            float [] velos = new float[f.v.Count];
            for (int i = 0; i < velos.Length; i++)
            {
                switch (f.v[i])
                {
                case 1:
                    velos[i] = Dados.VENTO_VELOCIDADE_LENTO;
                    break;

                case 2:
                    velos[i] = Dados.VENTO_VELOCIDADE_NORMAL;
                    break;

                case 3:
                    velos[i] = Dados.VENTO_VELOCIDADE_RAPIDO;
                    break;

                case 4:
                    velos[i] = Dados.VENTO_VELOCIDADE_MAX;
                    break;
                }
            }
            controleVento.Velocidades(f.wtime, velos);
        }

        // Verifica se o vento varia de direção
        if (f.dir < 0)
        {
            Vector2 [] dirs = new Vector2[f.d.Count];
            for (int i = 0; i < dirs.Length; i++)
            {
                switch (f.d[i])
                {
                case 1:
                    dirs[i] = Dados.VENTO_DIRECAO_NORTE;
                    break;

                case 2:
                    dirs[i] = Dados.VENTO_DIRECAO_NORDESTE;
                    break;

                case 3:
                    dirs[i] = Dados.VENTO_DIRECAO_LESTE;
                    break;

                case 4:
                    dirs[i] = Dados.VENTO_DIRECAO_SUDESTE;
                    break;

                case 5:
                    dirs[i] = Dados.VENTO_DIRECAO_SUL;
                    break;

                case 6:
                    dirs[i] = Dados.VENTO_DIRECAO_SUDOESTE;
                    break;

                case 7:
                    dirs[i] = Dados.VENTO_DIRECAO_OESTE;
                    break;

                case 8:
                    dirs[i] = Dados.VENTO_DIRECAO_NOROESTE;
                    break;

                default:
                    dirs[i] = Dados.VENTO_DIRECAO_NORTE;
                    break;
                }
            }
            controleVento.Direcoes(f.dtime, dirs);
        }

        // Habilita as coisas
        controleVento.Reiniciar();

        rebatedores.RemoverRebatedores();
        rebatedores.AdicionarTodos(f.bouncers);

        if (inicializar)
        {
            IniciarFase();
        }
    }
 // Métodos públicos
 public void Criar(Passante p, float d)
 {
     passante = p;
     destino  = d;
 }