protected override void Update()
 {
     tempoDecorrido    += Time.deltaTime;
     transform.position = ZeroOneInterpolation.ParabolaDeDeslocamento(
         posInicial,
         Dir,
         vertice,
         tempoDecorrido / (Mathf.Abs(posInicial.x - Dir.x)) * Velocidade
         );
 }
    // Update is called once per frame
    void Update()
    {
        tempoDecorrido += Time.deltaTime;

        switch (estado)
        {
        case EstadoDaqui.movimentando:
            if (tempoDecorrido < loopTime)
            {
                float interpolation = //ZeroOneInterpolation.PolinomialInterpolation(tempoDecorrido / loopTime, 12);

                                      //ZeroOneInterpolation.RadicalOddInterpolation(tempoDecorrido / loopTime,3);

                                      ZeroOneInterpolation.LagrangeInterppolation(tempoDecorrido / loopTime,
                                                                                  new Vector2(0.75f, 1),
                                                                                  new Vector2(0.95f, 0.65f));

                if (tempoDecorrido > 0f && !somUm)
                {
                    doSomUm.Play();
                    somUm = true;
                }

                if (tempoDecorrido > 1.75f && !somDois)
                {
                    doSomDois.Play();
                    somDois = true;
                }

                //Debug.Log(interpolation + " : " + (tempoDecorrido / loopTime));

                transform.position = Vector3.Lerp(posAuxGuardada, pos[indiceDaPos].position,
                                                  interpolation
                                                  );
            }
            else
            {
                estado         = EstadoDaqui.esperando;
                tempoDecorrido = 0;
                somUm          = false;
                somDois        = false;
            }
            break;

        case EstadoDaqui.esperando:
            if (tempoDecorrido > standTime)
            {
                tempoDecorrido = 0;
                indiceDaPos    = ContadorCiclico.AlteraContador(1, indiceDaPos, pos.Length);
                posAuxGuardada = transform.position;
                estado         = EstadoDaqui.movimentando;
            }
            break;
        }
    }
    void EscalonaSprite()
    {
        interestObject.transform.localScale =
            Vector3.Lerp(interestVector3, new Vector3(1000, 1000, 100), tempoDecorrido / TEMPO_ESCALONANDO_SPRITE);

        Color C = meuSprite.color;

        meuSprite.color = new Color(C.r, C.g, C.b, Mathf.Lerp(1, 0,
                                                              ZeroOneInterpolation.PolinomialInterpolation(
                                                                  tempoDecorrido / TEMPO_ESCALONANDO_SPRITE, 4)));
    }
    // Update is called once per frame
    protected override void Update()
    {
        switch (estado)
        {
        case EstadoDaqui.aparecendo:
            TempoDecorrido += Time.deltaTime;

            Vector3 alvo    = posOriginal + 0.15f * Vector3.right;
            Vector3 partida = posOriginal;
            float   tempo   = 10 * TempoDecorrido / TEMPO_TELEGRAFANDO_PULO - ((int)(10 * TempoDecorrido / TEMPO_TELEGRAFANDO_PULO));
            if (((int)(10 * TempoDecorrido / TEMPO_TELEGRAFANDO_PULO)) % 2 == 0)
            {
                alvo    = posOriginal;
                partida = posOriginal + 0.15f * Vector3.right;
            }

            transform.position = Vector3.Lerp(partida, alvo, tempo);
            if (TempoDecorrido > TEMPO_TELEGRAFANDO_PULO)
            {
                TempoDecorrido = 0;
                rotOriginal    = transform.rotation;
                estado         = EstadoDaqui.disparaPulo;
            }
            break;

        case EstadoDaqui.disparaPulo:
            TempoDecorrido += Time.deltaTime;
            Quaternion qAlvo = Quaternion.Euler(0, 0, zAngleTarget);
            if (TempoDecorrido < TEMPO_SUBINDO)
            {
                transform.position = Vector3.Lerp(posOriginal, posDoSalto.position, ZeroOneInterpolation.PolinomialInterpolation(TempoDecorrido / TEMPO_SUBINDO, 2));
                transform.rotation = Quaternion.Lerp(rotOriginal, qAlvo, TempoDecorrido / TEMPO_SUBINDO);
            }
            else
            {
                PreviousMoveTarget = retornoAoChao.position;
                transform.rotation = qAlvo;
                TempoDecorrido     = 0;
                estado             = EstadoDaqui.descendoPulo;
            }
            break;

        case EstadoDaqui.descendoPulo:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido < TEMPO_DESCENDO)
            {
                transform.position = Vector3.Lerp(posDoSalto.position, retornoAoChao.position, ZeroOneInterpolation.PolinomialInterpolation(TempoDecorrido / TEMPO_DESCENDO, 2));
            }
            else
            {
                transform.position = retornoAoChao.position;
                estado             = EstadoDaqui.baseUpdate;
            }
            break;

        case EstadoDaqui.baseUpdate:
            FlipDirection.Flip(transform, zAngleTarget == 0
                    ? PreviousMoveTarget.x - MovePoints[MoveTarget].position.x
                    : Mathf.Sign(zAngleTarget) * (PreviousMoveTarget.y - MovePoints[MoveTarget].position.y));
            base.Update();
            break;
        }
    }
    // Update is called once per frame
    void Update()
    {
        switch (estado)
        {
        case EstadoDaqui.emDescidaReta:
            tempoDecorrido    += Time.deltaTime;
            transform.position = Vector3.Lerp(posInicial, posFinal,
                                              ZeroOneInterpolation.PolinomialInterpolation(tempoDecorrido / distanciaEntrePontos * velDescida, 2)
                                              );

            if (tempoDecorrido >= distanciaEntrePontos / velDescida)
            {
                ComunsDeImpactoChao();
                downArrow.SetActive(false);
            }
            break;

        case EstadoDaqui.diagonal:
            tempoDecorrido    += Time.deltaTime;
            transform.position = Vector3.Lerp(posInicial, posFinal,
                                              ZeroOneInterpolation.PolinomialInterpolation(tempoDecorrido / distanciaEntrePontos * velDescida, 2)
                                              );
            if (tempoDecorrido >= distanciaEntrePontos / velDescida)
            {
                colliderNormal.enabled = true;
                colliderDash.enabled   = false;

                ComunsDeImpactoChao();
                diagonalDownArrow.SetActive(false);
            }
            break;

        case EstadoDaqui.executandoMagiaMultipla:

            tempoDecorrido += Time.deltaTime;

            transform.position = Vector3.Lerp(posInicial, posFinal,
                                              ZeroOneInterpolation.PolinomialInterpolation(tempoDecorrido / distanciaEntrePontos * velDescida, 2)
                                              );

            if (tempoDecorrido >= distanciaEntrePontos / velDescida)
            {
                _Animator.SetTrigger(AnimKey.magia.ToString());
                tempoDecorrido = 0;
                estado         = EstadoDaqui.preparandoMagiaMultipla;
            }
            break;

        case EstadoDaqui.dash:
            tempoDecorrido += Time.deltaTime;

            transform.position = Vector3.Lerp(posInicial, posFinal,
                                              ZeroOneInterpolation.PolinomialInterpolation(tempoDecorrido / distanciaEntrePontos * velDash, 2)
                                              );

            if (tempoDecorrido >= distanciaEntrePontos / velDash)
            {
                colliderDash.enabled   = false;
                colliderNormal.enabled = true;

                estado = EstadoDaqui.emEspera;
                _Animator.SetTrigger(AnimKey.saiuDoDash.ToString());
                particulaDoDash.SetActive(false);
                new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, IniciaBoss, tempoAposDash);
            }
            break;
        }
    }
Esempio n. 6
0
    // Update is called once per frame
    void Update()
    {
        if (estado != EstadoDaqui.emEspera)
        {
            tempoDecorrido += Time.deltaTime;
            BaseMoveRigidbody.PositionWithAndador(andador, transform);
        }

        switch (estado)
        {
        case EstadoDaqui.pulinhosPreparatorios:
            #region pulinhosPreparatorios
            if (VerifiqueContFurias())
            {
                _Animator.SetTrigger("queda");
                InstanciaLigando.Instantiate(particulaEnfaseDoBoss, transform.position, 5);
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, gritoDaFuria));
                EventAgregator.Publish(EventKey.abriuPainelSuspenso, null);
                estado = EstadoDaqui.prepararGiroDeFuria;
            }
            else
            if (tempoDecorrido > TEMPO_ENTRE_PULINHO && contDePulinhos < PULINHOS_ATE_ATAQUE)
            {
                int qual = Random.Range(0, uhuhah.Length);

                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, uhuhah[qual]));
                _Animator.SetTrigger("preparaPulo");
                estado         = EstadoDaqui.preparaPulinho;
                tempoDecorrido = 0;
            }
            else if (tempoDecorrido > TEMPO_ENTRE_PULINHO && contDePulinhos >= PULINHOS_ATE_ATAQUE)
            {
                int qual = Random.Range(0, 2);

                if (qual == 0)
                {
                    InstanciaLigando.Instantiate(
                        particulaDoAtaqueAlto,
                        particulaDoAtaqueAlto.transform.position, 5,
                        Quaternion.identity);

                    estado = EstadoDaqui.giroAlto;
                    PreparaParabolaLocal();
                }
                else if (qual == 1)
                {
                    EscolheDestino();
                    InstanciaLigando.Instantiate(particulaDoAtaqueReto, particulaDoAtaqueReto.transform.position, 5);
                    estado = EstadoDaqui.giroReto;
                }
                else
                {
                    Debug.Log("numero não esperado: " + qual);
                }

                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, urroDeAtaque));
                tempoDecorrido = 0;
            }
            #endregion
            break;

        case EstadoDaqui.prepararGiroDeFuria:
            #region preparandoGiroFuria
            if (tempoDecorrido > TEMPO_PREPARANDO_FURIA)
            {
                _Animator.SetTrigger("tocouChao");
                EventAgregator.Publish(EventKey.fechouPainelSuspenso);
                EscolheMelhorCantoAlto();
                estado         = EstadoDaqui.giroDeFuria;
                tempoDecorrido = 0;
                contDePulinhos = 0;
                indice         = 0;
                mov.ChangeGravityScale(0);
            }
            #endregion
            break;

        case EstadoDaqui.giroDeFuria:
            #region giroFuria
            andador.position = Vector3.Lerp(posInicial, targets[indice], velocidadeGiroFuria * tempoDecorrido / distancia);
            transform.Rotate(new Vector3(0, 0, 20));

            if (tempoDecorrido * velocidadeGiroFuria > distancia)
            {
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.pedrasQuebrando));
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestShakeCam, ShakeAxis.z, 5, 2f));
                tempoDecorrido = 0;
                posInicial     = targets[indice];
                indice         = ContadorCiclico.AlteraContador(1, indice, 4);
                contDePulinhos++;
            }

            if (contDePulinhos >= 19)
            {
                _Animator.SetTrigger("retornaAoPadrao");
                FinalizaGiro();
            }
            #endregion
            break;

        case EstadoDaqui.giroReto:
            #region giroReto
            if (tempoDecorrido > TEMPO_TELEGRAFANDO_GIRO + TEMPO_GIRO_ALTO)
            {
                FinalizaGiro();
                //mov.AplicadorDeMovimentos(Vector3.zero);
            }
            else if (tempoDecorrido > TEMPO_TELEGRAFANDO_GIRO)
            {
                float time = (tempoDecorrido - TEMPO_TELEGRAFANDO_GIRO) / TEMPO_GIRO_ALTO;

                transform.Rotate(new Vector3(0, 0, 20));

                andador.position = Vector3.Lerp(posInicial, target, ZeroOneInterpolation.PolinomialInterpolation(time, 2));
            }
            #endregion
            break;

        case EstadoDaqui.giroAlto:
            #region giroAlto
            if (tempoDecorrido > TEMPO_TELEGRAFANDO_GIRO + TEMPO_GIRO_ALTO)
            {
                FinalizaGiro();
                //mov.AplicadorDeMovimentos(Vector3.zero);
            }
            else if (tempoDecorrido > TEMPO_TELEGRAFANDO_GIRO)
            {
                float time = (tempoDecorrido - TEMPO_TELEGRAFANDO_GIRO) / TEMPO_GIRO_ALTO;

                transform.Rotate(new Vector3(0, 0, 20));
                andador.position = ZeroOneInterpolation.ParabolaDeDeslocamento(
                    new Vector2(posInicial.x, posInicial.y),
                    new Vector2(target.x, target.y),
                    new Vector2(vertice.position.x, vertice.position.y),
                    ZeroOneInterpolation.OddPolynomialInterpolation(time, 3));

                //Debug.Log(target.x+" : "+posInicial.x);
            }
            #endregion
            break;

        case EstadoDaqui.preparaPulinho:
            #region preparaPulinhos
            if (tempoDecorrido > TEMPO_PREPARANDO_PULINHO)
            {
                mov.JumpForce();
                _Animator.SetTrigger("disparaPulo");
                tempoDecorrido = 0;
                contDePulinhos++;
                estado = EstadoDaqui.atualizaPulinho;
            }
            #endregion
            break;

        case EstadoDaqui.atualizaPulinho:
            #region atualizaPulinhos
            if (tempoDecorrido > TEMPO_NO_PULINHO)
            {
                if (requisicaoDeEspinhos)
                {
                    lancados = new EspinhosDoCirculoImperfeito[conjuntoDeEspinhos.childCount];

                    for (int i = 0; i < conjuntoDeEspinhos.childCount; i++)
                    {
                        GameObject G = InstanciaLigando.Instantiate(conjuntoDeEspinhos.GetChild(i).gameObject,
                                                                    conjuntoDeEspinhos.GetChild(i).position, 10);

                        lancados[i] = G.GetComponent <EspinhosDoCirculoImperfeito>();
                    }

                    _Animator.SetTrigger("retornaAoPadrao");
                    _Animator.SetTrigger("queda");

                    EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, preparaEspinhos));
                    estado = EstadoDaqui.preparaEspinhos;
                    requisicaoDeEspinhos = false;
                }
                else
                {
                    _Animator.SetTrigger("retornaAoPadrao");
                    estado = EstadoDaqui.pulinhosPreparatorios;
                }

                tempoDecorrido = 0;
            }
            #endregion
            break;

        case EstadoDaqui.preparaEspinhos:
            #region preparaEspinhos
            if (tempoDecorrido > TEMPO_PREPARANDO_ESPINHOS)
            {
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, lancaEspinhos));
                _Animator.SetTrigger("tocouChao");
                mov.JumpForce();
                tempoDecorrido = 0;
                estado         = EstadoDaqui.lancaEspinhos;
            }
            #endregion
            break;

        case EstadoDaqui.lancaEspinhos:
            #region lancaEspinhos
            if (tempoDecorrido > TEMPO_PARA_LANCAR_ESPINHOS)
            {
                _Animator.SetTrigger("retornaAoPadrao");

                for (int i = 0; i < lancados.Length; i++)
                {
                    lancados[i].circulo.SetActive(false);
                    lancados[i].espinhos.SetActive(true);
                    lancados[i].particulaDosEspinhos.SetActive(true);
                }

                estado         = EstadoDaqui.pulinhosPreparatorios;
                tempoDecorrido = 0;
            }
            #endregion
            break;
        }
    }
    // Update is called once per frame
    void Update()
    {
        switch (estado)
        {
        case EstadoDaqui.caindoBoss:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido < TEMPO_QUEDA_BOSS)
            {
                boss.transform.position = Vector3.Lerp(
                    posInicial,
                    posDeDeslinicialDoBoss.position,
                    ZeroOneInterpolation.PolinomialInterpolation(TempoDecorrido / TEMPO_QUEDA_BOSS, 8));
            }
            else
            {
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestShakeCam, ShakeAxis.z, 10, 2f));
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.pedrasQuebrando));
                boss.transform.position = posDeDeslinicialDoBoss.position;
                boss._Animator.SetTrigger("tocouChao");
                estado         = EstadoDaqui.animaIntimidacao;
                TempoDecorrido = 0;
            }
            break;

        case EstadoDaqui.particulaDaIntimidacao:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > 0.25f)
            {
                InstanciaLigando.Instantiate(particulaEnfaseDoBoss, boss.transform.position, 5);
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, somEnfaseDoBoss));
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestLocalnameExibition, "O Grande Círculo Imperfeito", false, 2f));

                new MyInvokeMethod().InvokeNoTempoDeJogo(
                    () => {
                    EventAgregator.Publish(new StandardSendGameEvent(EventKey.startMusic, new NameMusicaComVolumeConfig()
                    {
                        Musica = NameMusic.XPboss3,
                        Volume = 1
                    }
                                                                     ));
                }, 1
                    );
                estado         = EstadoDaqui.gritando;
                TempoDecorrido = 0;
            }
            break;

        case EstadoDaqui.animaIntimidacao:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TEMPO_ATE_INTIMIDACAO)
            {
                TempoDecorrido = 0;
                boss._Animator.SetTrigger("preparaPulo");

                estado = EstadoDaqui.particulaDaIntimidacao;
            }
            break;

        case EstadoDaqui.gritando:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TEMPO_GRITANDO)
            {
                boss._Animator.SetTrigger("retornaAoPadrao");
                boss.IniciarBoss();
                EventAgregator.Publish(EventKey.finalizaDisparaTexto, null);
                estado = EstadoDaqui.iniciaLuta;
            }
            break;
        }
    }