void EntrarNaFraseAgradecer()
 {
     estado = EstadoDaqui.fraseAgradecer;
     BtnsManager.DesligarBotoes(gameObject);
     DisparaTexto dispara = GameController.g.HudM.DisparaT;
     ActionManager.ModificarAcao(transform, null);
     dispara.ReligarPaineis();
     dispara.Dispara(comprar
         ?
         BancoDeTextos.RetornaListaDeTextoDoIdioma(ChaveDeTexto.frasesDeShoping)[2]
         :
         BancoDeTextos.RetornaListaDeTextoDoIdioma(ChaveDeTexto.frasesDeShoping)[3]);
 }
Beispiel #2
0
 void VerifiqueAtivacao()
 {
     if (Vector3.Distance(transform.position, GameController.g.Manager.transform.position) < disAtivacao)
     {
         estado = EstadoDaqui.padrao;
         Invoke("VerifiqueConstancia", 1);
         Invoke("TelegrafaTiro", 1.75f);
     }
     else
     {
         Invoke("VerifiqueAtivacao", 1);
     }
 }
    void OnReceivedTriggerInfo(IGameEvent e)
    {
        StandardSendGameEvent ssge = (StandardSendGameEvent)e;

        if (ssge.Sender.transform.IsChildOf(transform.parent) && estado == EstadoDaqui.escondido)
        {
            if (((Collider2D)ssge.MyObject[0]).tag == "Player")
            {
                estado = EstadoDaqui.aparecendo;
                Destroy(Instantiate(particula, transform.position, Quaternion.identity), 5);

                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, s, .5f));
            }
        }
    }
Beispiel #4
0
    public void BtnComprar()
    {
        if (estado == EstadoDaqui.mudandoOpcao)
        {
            if (EssaLoja.VerifiqueCompra())
            {
            }
            else
            {
                GlobalController.g.UmaMensagem.ConstroiPainelUmaMensagem(RetornoDeMensagem, "Você não tem dinheiro suficiente");
            }

            estado = EstadoDaqui.mensagemSuspensa;
        }
    }
    void OnChangeOption(IGameEvent e)
    {
        StandardSendGameEvent ssge = (StandardSendGameEvent)e;

        if ((string)ssge.MyObject[0] == "disponivel")
        {
            if (!(bool)ssge.MyObject[1])
            {
                int I = (int)ssge.MyObject[2];
                ColocaInfoTexts(dj.MeusEmblemas[I]);
            }
            else
            {
                if (dj.MeusEmblemas.Count > 0)
                {
                    emblemasD.RetirarDestaques();
                }

                emblemasE.ColocarDestaqueNoSelecionado();
                estado = EstadoDaqui.sobreEncaixes;
                ColocaInfoTexts(Emblema.VerificarOcupacaoDoEncaixe(dj.MeusEmblemas, emblemasE.OpcaoEscolhida));
            }
        }
        else if ((string)ssge.MyObject[0] == "encaixes")
        {
            if (!(bool)ssge.MyObject[1])
            {
                int I = (int)ssge.MyObject[2];
                ColocaInfoTexts(Emblema.VerificarOcupacaoDoEncaixe(dj.MeusEmblemas, I));
            }
            else
            {
                estado = EstadoDaqui.sobreDisponiveis;

                emblemasE.RetirarDestaques();

                if (dj.MeusEmblemas.Count > 0)
                {
                    emblemasD.ColocarDestaqueNoSelecionado();
                    ColocaInfoTexts(dj.MeusEmblemas[emblemasD.OpcaoEscolhida]);
                }
                else
                {
                    InfoDeNaoTemEmblema();
                }
            }
        }
    }
    void ComunsDeImpactoChao()
    {
        _Animator.SetTrigger(AnimKey.tocouChao.ToString());
        estado = EstadoDaqui.emEspera;

        new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject,

                                                 IniciaBoss
                                                 , tempoAposTocarChao);

        _Animator.SetTrigger(AnimKey.tocouChaoParaPadrao.ToString());

        InstanciaLigando.Instantiate(downArrowGroundParticles, transform.position + 2 * Vector3.down, 5);
        EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.pedrasQuebrando));
        EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestShakeCam, ShakeAxis.x, 5, 2f));
    }
Beispiel #7
0
    void FinalizarMenuDepause()
    {
        estado = EstadoDaqui.emEspera;
        FinalizarTodasAsAbas();
        Time.timeScale = 1;
        containerDoMenuDePause.SetActive(false);

        mapPanel.OnUnpausedGame();


        EventAgregator.Publish(new StandardSendGameEvent(EventKey.exitPause, estadoAoPausar));
        EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestShowControllers));

        EventAgregator.RemoveListener(EventKey.returnToMainMenu, OnReturnToMainMenu);
        EventAgregator.RemoveListener(EventKey.triedToChangeEmblemNoSuccessfull, OnTriedEmblem);
        EventAgregator.RemoveListener(EventKey.requestReturnToEmblemMenu, OnRequestEmblemMenu);
    }
Beispiel #8
0
    private void EscolhaDeViagem(int qual)
    {
        estado = EstadoDaqui.emEspera;

        CapsuleInfo cI = myKeys.ListaDeCapsulas.GetActiveCapsules()[qual];

        if (StaticMudeCena.EstaCenaEstaCarregada(cI.Cena))
        {
            GlobalController.g.FadeV.IniciarFadeOutComAction(FakeFadeOut);

            Time.timeScale = 0;
        }
        else
        {
            infoSend = cI;
            GlobalController.g.FadeV.IniciarFadeOutComAction(OnFadeOut);
        }
    }
Beispiel #9
0
    public static void PrepareInterstial()
    {
        if (estado == EstadoDaqui.emEspera)
        {
            Debug.Log("preparando");
            interstial = new InterstitialAd(adUnitId);

            AdRequest request = new AdRequest.Builder()
                                .AddTestDevice("AQZ9WOLB9LF6FYCI")
                                .Build();
            interstial.LoadAd(request);

            // prepara o listener para quando o banner estiver completamente
            interstial.OnAdLoaded       += OnAdLoadedInterstial;
            interstial.OnAdFailedToLoad += OnInterstialLoadFailed;
            estado = EstadoDaqui.preparando;
        }
    }
Beispiel #10
0
    void OnBasicPauseOptionSelect(int option)
    {
        switch (option)
        {
        case 0:
            FinalizarMenuDepause();
            break;

        case 1:
            estado = EstadoDaqui.menuDeOpcoesAberto;
            menuO.gameObject.SetActive(true);
            break;

        case 2:
            GlobalController.g.FadeV.IniciarFadeOutComAction(OnFadeOutComplete);
            break;
        }
    }
Beispiel #11
0
    private void OnReceiveTriggerInfo(IGameEvent obj)
    {
        StandardSendGameEvent ssge = (StandardSendGameEvent)obj;

        if (ssge.Sender.transform.IsChildOf(transform) && estado == EstadoDaqui.emEspera)
        {
            if (((Collider2D)ssge.MyObject[0]).tag == "Player")
            {
                doHeroi = GameController.g.Manager.transform;
                estado  = EstadoDaqui.buscadorDeAcao;
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.changeMusicWithRecovery, new NameMusicaComVolumeConfig()
                {
                    Musica = NameMusic.miniBoss,
                    Volume = 1
                }));
            }
        }
    }
    void PosCoolDown()
    {
        if (estado == EstadoDaqui.emCoolDown)
        {
            if (!VerifiqueAtkEspecial())
            {
                int        sorteio = Random.Range(0, 5);
                BossAttack b       = (BossAttack)sorteio;

                //Debug.Log("numero de sorteio: "+sorteio+" enum bossAttack: "+b+" : "+estado);
                switch (b)
                {
                case BossAttack.descidaReta:
                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, IniciarDescidaReta, intervaloDeTeleport);
                    break;

                case BossAttack.diagonal:
                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, IniciarDescidaDiagonal, intervaloDeTeleport);
                    break;

                case BossAttack.magiaSimples:
                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, PreparMagiaSimples, intervaloDeTeleport);
                    break;

                case BossAttack.magiaMultipla:
                    cont = 0;
                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, PreparaMagiaMultipla, intervaloDeTeleport);
                    break;

                case BossAttack.dash:
                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, IniciaDash, intervaloDeTeleport);
                    break;
                }

                InvocaTeleportProps(false);
                estado = EstadoDaqui.atacando;
            }
            else
            {
                IniciarAtkEspecial();
            }
            //Debug.Log("estado: " + estado);
        }
    }
 void VerificaMais(int tanto)
 {
     if (comprar)
     {
         if ((quantidade + tanto) * esseItem.Valor > dados.Cristais && dados.Cristais >= esseItem.Valor)
         {
             DesligaBotoes();
             estado = EstadoDaqui.emEspera;
             GameController.g.HudM.UmaMensagem.ConstroiPainelUmaMensagem(ReligarBotoes,
                 string.Format(textos[7], dados.Cristais / esseItem.Valor, MbItens.NomeEmLinguas(esseItem.ID))
                 );
             AtualizaQuantidade(Mathf.Max(dados.Cristais / esseItem.Valor, 1), esseItem.Valor);
         }
         else if (dados.Cristais < esseItem.Valor)
         {
             DesligaBotoes();
             estado = EstadoDaqui.emEspera;
             GameController.g.HudM.UmaMensagem.ConstroiPainelUmaMensagem(ReligarBotoes,
                 string.Format(textos[11], dados.Cristais / esseItem.Valor, MbItens.NomeEmLinguas(esseItem.ID))
                 );
             AtualizaQuantidade(1, esseItem.Valor);
         }
         else
         {
             AtualizaQuantidade(quantidade + tanto, esseItem.Valor);
         }
     }
     else
     {
         if (quantidade + tanto > dados.TemItem(esseItem.ID))
         {
             DesligaBotoes();
             estado = EstadoDaqui.emEspera;
             GameController.g.HudM.UmaMensagem.ConstroiPainelUmaMensagem(ReligarBotoes,
                 string.Format(textos[8], dados.TemItem(esseItem.ID), MbItens.NomeEmLinguas(esseItem.ID))
                 );
             AtualizaQuantidade(dados.TemItem(esseItem.ID), Mathf.Max(1,esseItem.Valor / 4));
         }
         else
         {
             AtualizaQuantidade(quantidade + tanto, Mathf.Max(1, esseItem.Valor / 4));
         }
     }
 }
    void Update()
    {
        //Debug.Log(estado+" : "+ (MovePoints[MoveTarget].position - transform.position)+" : "+ (Vector3.ProjectOnPlane((MovePoints[MoveTarget].position - transform.position).normalized, Vector3.up)));

        switch (estado)
        {
        case EstadoDaqui.movendo:
            UpdateMovendo();
            break;

        case EstadoDaqui.preparandoInvestida:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TEMPO_DA_PAUSA_DA_INVESTIDA)
            {
                Acelerar();
                estado = EstadoDaqui.investindo;
            }
            break;

        case EstadoDaqui.investindo:
            UpdateAcelerando();
            break;

        case EstadoDaqui.esperandoMove:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TempoEsperando)
            {
                estado = EstadoDaqui.movendo;
            }
            break;

        case EstadoDaqui.finalizandoInvestida:
            TempoDecorrido += Time.deltaTime;

            if (TempoDecorrido > TempoEsperando)
            {
                estado = EstadoDaqui.movendo;
            }
            break;
        }

        PositionChangeWithAndador();
    }
Beispiel #15
0
    /*
     * protected void OnReceivedTriggerInfo(IGameEvent e)
     * {
     *  if (e.Sender.transform.IsChildOf(transform))
     *  {
     *      StandardSendGameEvent ssge = (StandardSendGameEvent)e;
     *      Collider2D collision = (Collider2D)ssge.MyObject[0];
     *      //OnTriggerEnter2D(collision);
     *  }
     * }*/

    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.layer == 8 || collision.gameObject.layer == 12)
        {
            redirecionador = multiplicadorDoRedirecionamento * collision.contacts[0].normal;

            if (estado == EstadoDaqui.investindo)
            {
                estado = EstadoDaqui.animandoColisao;
                _Animator.SetTrigger("colidiu");
                EventAgregator.Publish(new StandardSendGameEvent(gameObject, EventKey.request3dSound, SoundEffectID.Break));
                new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, () =>
                {
                    estado             = EstadoDaqui.perseguindo;
                    transform.rotation = Quaternion.identity;
                }, TEMPO_COLIDINDO);
            }
        }
    }
Beispiel #16
0
    void VerificadorDeDistancia()
    {
        if (Vector2.Distance(transform.position, doHeroi.position) < distanciaDeAparecer &&
            Vector2.Distance(transform.position, doHeroi.position) > proximoDeMais
            )
        {
            if (estado == EstadoDaqui.emEspera)
            {
                ShowHideEnemy(true);
            }

            estado         = EstadoDaqui.preparandoTiro;
            tempoDecorrido = 0;
        }
        else
        {
            Invoke("VerificadorDeDistancia", 1);
        }
    }
    public void IniciarEssaHud(MbItens itemAlvo, bool comprar = true)
    {
        this.comprar = comprar;
        BtnsManager.ReligarBotoes(gameObject);
        ActionManager.ModificarAcao(transform, BotaoComprar);
        estado = EstadoDaqui.botoesAtivos;
        gameObject.SetActive(true);
        esseItem = itemAlvo;
        dados = GameController.g.Manager.Dados;
        quantidade = 1;

        labelCristais.text = textos[0] + dados.Cristais;
        mensagem.text = string.Format(comprar ? textos[3] : textos[4], MbItens.NomeEmLinguas(itemAlvo.ID));
        infos.text = BancoDeTextos.RetornaListaDeTextoDoIdioma(ChaveDeTexto.shopInfoItem)[(int)(itemAlvo.ID)];
        quantidadeTXt.text = (comprar)?quantidade.ToString():quantidade+" / "+ dados.TemItem(esseItem.ID);

        valorAPagar.text = (itemAlvo.Valor / (comprar ? 1 : 4)).ToString();
        labelValorAPagar.text = comprar ? textos[1] : textos[2];
        labelDoBotaoComprar.text = comprar ? textos[5] : textos[6];
    }
Beispiel #18
0
    private void Update()
    {
        switch (estado)
        {
        case EstadoDaqui.movendo:
            UpdateMovendo();
            break;

        case EstadoDaqui.esperandoMove:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TempoEsperando)
            {
                estado = EstadoDaqui.movendo;
            }
            break;

        case EstadoDaqui.preparando:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TEMPO_TELEGRAFANDO)
            {
                Acelerar();
                estado = EstadoDaqui.investindo;
            }
            break;

        case EstadoDaqui.investindo:
            UpdateAcelerando();
            break;

        case EstadoDaqui.finalizando:
            TempoDecorrido += Time.deltaTime;
            if (TempoDecorrido > TempoEsperando)
            {
                estado = EstadoDaqui.movendo;
            }
            break;
        }

        PositionChangeWithAndador();
    }
    void OnReceivedAnimationPoint(IGameEvent e)
    {
        if (e.Sender == gameObject)
        {
            StandardSendGameEvent ssge = (StandardSendGameEvent)e;
            string info = (string)ssge.MyObject[1];
            switch (info)
            {
            case "a":

                break;

            case "b":
                int random = Random.Range(0, 3);
                if (random < 2)
                {
                    _Animator.SetTrigger("retornaAoPadrao");
                    estado         = EstadoDaqui.buscadorDeAcao;
                    tempoDecorrido = 0;
                }
                else
                {
                    _Animator.SetTrigger("espadadaDois");
                }
                break;

            case "c":
                _Animator.SetTrigger("retornaAoPadrao");
                estado         = EstadoDaqui.buscadorDeAcao;
                tempoDecorrido = 0;
                break;

            case "e":
                mov.ApplyForce(forDesl * Mathf.Sign(-transform.localScale.x) * Vector3.right, 1);
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.EnemySlash));
                break;
            }
        }
    }
    void OnReceivedTriggerInfo(IGameEvent e)
    {
        StandardSendGameEvent ssge = (StandardSendGameEvent)e;

        //Debug.Log(ssge.Sender.name+" : "+estado);
        if (ssge.Sender.transform.IsChildOf(transform))
        {
            Collider2D c = (Collider2D)ssge.MyObject[0];

            if (ssge.Sender.name == "triggerAcionador" && estado == EstadoDaqui.emEspera && Time.time - ultimaMordida > intervaloEntreMordidas)
            {
                estado = EstadoDaqui.telegrafando;
                InstanciaLigando.Instantiate(particulaDoInicio, transform.position, 5);
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.Fire1));
                _Animator.SetTrigger("telegrafar");
                new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, PosTelegrafar, tempoTelegrafando);
            }
            else if (ssge.Sender.name == "mordedorEscondido")
            {
                VerificadorDeDano(c);
            }
        }
    }
Beispiel #21
0
    void CheckAnimationPoint(IGameEvent e)
    {
        if (e.Sender == gameObject)
        {
            StandardSendGameEvent ssge = (StandardSendGameEvent)e;
            string info = (string)ssge.MyObject[1];
            switch (info)
            {
            case "a":
            case "b":
            case "c":
                Mov.ApplyForce(forDesl * Mathf.Sign(-transform.localScale.x) * Vector3.right, 1);
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.EnemySlash));
                break;

            case "d":
                TempoDecorrido = 0;
                _Animator.SetTrigger("retornarAoPadrao");
                estado = EstadoDaqui.movendo;
                break;
            }
        }
    }
Beispiel #22
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "attackCollisor")
        {
            estado             = EstadoDaqui.fade;
            tempoDecorrido     = 0;
            myCollider.enabled = false;

            if (extraColliders != null)
            {
                for (int i = 0; i < extraColliders.Length; i++)
                {
                    extraColliders[i].enabled = false;
                }
            }

            particulaDaAcao.SetActive(true);
            Destroy(particulaDaAcao, 5);

            EventAgregator.Publish(new StandardSendGameEvent(EventKey.requestChangeShiftKey, ID));
            EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.fakeWall));
        }
    }
Beispiel #23
0
    void TelegrafaTiro()
    {
        if (gameObject != null)
        {
            Invoke("TelegrafaTiro", intervaloDeTiro);

            estado = EstadoDaqui.preparandoTiro;
            InstanciaLigando.Instantiate(particulaTelegrafista, transform.position, 5);
            EventAgregator.Publish(new StandardSendGameEvent(gameObject, EventKey.request3dSound, SoundEffectID.Wind1));

            new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, () =>
            {
                estado         = EstadoDaqui.disparaTiro;
                Vector3[] dirs = new Vector3[4] {
                    new Vector3(1, 1, 0),
                    new Vector3(-1, 1, 0),
                    new Vector3(1, -1, 0),
                    new Vector3(-1, -1, 0)
                };
                for (int i = 0; i < 4; i++)
                {
                    GameObject G = InstanciaLigando.Instantiate(projetil, transform.position + distProjetilTransform * dirs[i], 5,
                                                                Quaternion.LookRotation(-projetil.transform.forward, Vector3.Cross(dirs[i], -Vector3.forward))
                                                                );

                    ProjetilInimigo P = G.AddComponent <ProjetilInimigo>();
                    P.Iniciar(dirs[i], particulaTelegrafista, 10f);
                    P.SomDeImpacto = SoundEffectID.lancaProjetilInimigo;

                    new MyInvokeMethod().InvokeNoTempoDeJogo(gameObject, () => {
                        estado = EstadoDaqui.padrao;
                    }, tempoPosTiro);
                }
            }, tempoTelegrafando);
        }
    }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.tag == "Player" && !iniciado)
        {
            if (UnicidadeDoPlayer.Verifique(collision))
            {
                EventAgregator.Publish(new StandardSendGameEvent(EventKey.stopMusic));
                EventAgregator.Publish(new StandardSendGameEvent(gameObject, EventKey.requestHeroPosition, posicionadorDoHeroi.position));
                EventAgregator.Publish(new StandardSendGameEvent(gameObject, EventKey.requestChangeCamLimits, limitantes, changeCamLimitsTime));

                EventAgregator.AddListener(EventKey.positionRequeredOk, OnHeroPositionOk);
                EventAgregator.AddListener(EventKey.limitCamOk, OnLimitCamOk);

                estado   = EstadoDaqui.posicionandoHeroi_limitsCam;
                iniciado = true;

                for (int i = 0; i < barreiras.Length; i++)
                {
                    barreiras[i].SetActive(true);
                    InstanciaLigando.Instantiate(particulaDabarreira, barreiras[i].transform.position, 5);
                }
            }
        }
    }
    void OnReceivedTriggerInfo(IGameEvent e)
    {
        if (transform.IsChildOf(e.Sender.transform) && estado == EstadoDaqui.emEspera)
        {
            float px  = ((Collider2D)((StandardSendGameEvent)e).MyObject[0]).transform.position.x;
            bool  foi = false;

            if (Mathf.Abs(ultimoInvestimento - Time.time) > intervaloDeInvestimento)
            {
                for (int i = 0; i < trajetorias.Length; i++)
                {
                    float partida = trajetorias[i].partida.position.x;
                    float chegada = trajetorias[i].chegada.position.x;
                    //Debug.Log(Mathf.Abs(partida - px)+" : "+px +" : "+" : "+partida+" : "+chegada+" : "+(partida < px && px < chegada) +" : "+ (partida > px && chegada < px) +" : "+ (Mathf.Abs(partida - px) > disMin)+" : "+i);
                    if (((partida < px && px < chegada) || (partida > px && chegada < px)) && (Mathf.Abs(partida - px) > disMin))
                    {
                        indiceDoDeslocamento = i;
                        foi = true;
                    }
                }

                if (foi)
                {
                    transform.position = trajetorias[indiceDoDeslocamento].partida.position;
                    InstanciaLigando.Instantiate(particulaDoAparecimento, transform.position, 5);
                    EventAgregator.Publish(new StandardSendGameEvent(EventKey.disparaSom, SoundEffectID.aparicaoSurpresaDeInimigo));
                    estado         = EstadoDaqui.telegrafando;
                    tempoDecorrido = 0;

                    FlipDirection.Flip(transform,
                                       trajetorias[indiceDoDeslocamento].partida.position.x - trajetorias[indiceDoDeslocamento].chegada.position.x);
                    ChangeView(true);
                }
            }
        }
    }
    void PosProjetil()
    {
        bool foi = false;

        if (Mathf.Abs(doHeroi.position.x - transform.position.x) > 1.1f * distanciaDeEspadada)
        {
            int random = Random.Range(0, 8);

            if (random > 0)
            {
                foi = true;
            }
        }

        if (foi)
        {
            IniciaProjetil();
        }
        else
        {
            estado         = EstadoDaqui.buscadorDeAcao;
            tempoDecorrido = 0;
        }
    }
    // 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;
        }
    }
    void VerifiquePosicionamento()
    {
        int[] angulos = new int[9] {
            0, 30, -30, 45, -45, 60, -60, 90, -90
        };
        int     cont           = 0;
        bool    foi            = false;
        Vector3 charPosition   = GameController.g.Manager.transform.position;
        Vector3 baseDir        = charPosition - transform.position;
        Vector3 posDeInteresse = Vector3.zero;

        while (cont < 9 && !foi)
        {
            Vector3      dir = Quaternion.AngleAxis(angulos[cont], Vector3.forward) * baseDir;
            RaycastHit2D hit = Physics2D.Raycast(transform.position, dir, 100, 511);

            if (hit)
            {
                /*
                 * Debug.Log(cont+" raycast true "+hit.transform.name);
                 * Instantiate(mark1, hit.point, Quaternion.identity);
                 */
                Vector3 thisPoint = hit.point;
                hit = Physics2D.Linecast(hit.point + 0.25f * hit.normal, charPosition, 511);

                if (!hit)
                {
                    // Instantiate(transform.GetChild(0), thisPoint, Quaternion.identity);
                    moveDir = (thisPoint - transform.position).normalized;

                    foi = true;
                }
                else
                {
                    moveDir = dir;

                    /*
                     * Debug.Log(cont + "licast true: " + hit.transform.name);
                     * Instantiate(mark2, hit.point, Quaternion.identity);*/
                }
            }
            else
            {
                hit = Physics2D.Linecast(transform.position, charPosition, 511);
                if (hit)
                {
                    //Instantiate(transform.GetChild(0), charPosition, Quaternion.identity);

                    moveDir = -dir;
                    foi     = true;
                }
                else
                {
                    foi = false;
                }
            }

            cont++;
        }

        if (foi)
        {
            estado = EstadoDaqui.posicionandoParaAtirar;
        }
        else
        {
            moveDir = (transform.position - charPosition).normalized;
            estado  = EstadoDaqui.posicionandoEvasivamente;
            Invoke("VerificaDistanciaDeAtivacao", TEMPO_EM_EVASIVA);
        }
    }
 protected void RetornarParaEsperaZerandoTempo()
 {
     estado         = EstadoDaqui.emEspera;
     tempoDecorrido = 0;
     VerifiquePosicionamento();
 }
    // Update is called once per frame
    void Update()
    {
        Vector3 charPos = default;

        if (GameController.g)
        {
            if (GameController.g.Manager)
            {
                charPos = GameController.g.Manager.transform.position;
            }
        }

        switch (estado)
        {
        case EstadoDaqui.emEspera:
            moveVel     = Vector3.Lerp(moveVel, moveDir, TRANSICAO_DA_VELOCIDADE * Time.deltaTime);
            r2.velocity = VEL_MOVIMENTO * moveVel;

            FlipDirection.Flip(transform, moveVel.x);
            break;

        case EstadoDaqui.posicionandoParaAtirar:
            tempoDecorrido += Time.deltaTime;
            moveVel         = Vector3.Lerp(moveVel, moveDir, TRANSICAO_DA_VELOCIDADE * Time.deltaTime);

            FlipDirection.Flip(transform, moveVel.x);

            r2.velocity = VEL_MOVIMENTO * moveVel;

            if (tempoDecorrido > INTERVALO_DE_TIRO)
            {
                RaycastHit2D hit = Physics2D.Linecast(transform.position, GameController.g.Manager.transform.position, 511);

                if (!hit)
                {
                    tempoDecorrido = 0;
                    estado         = EstadoDaqui.telegrafando;

                    Telegrafar(charPos);
                }
                else
                {
                    moveDir        = (transform.position - charPos).normalized;
                    estado         = EstadoDaqui.emEspera;
                    tempoDecorrido = 0;
                    Invoke("VerifiquePosicionamento", TEMPO_NA_ESPERA);
                }
            }
            break;

        case EstadoDaqui.telegrafando:
            tempoDecorrido += Time.deltaTime;
            moveVel         = Vector3.Lerp(moveVel, Vector3.zero, TRANSICAO_DA_VELOCIDADE * Time.deltaTime);
            r2.velocity     = moveVel;

            //FlipDirection.Flip(transform, moveVel.x);

            if (tempoDecorrido > TEMPO_TELEGRAFANDO)
            {
                RequestAction(charPos);
            }
            break;

        case EstadoDaqui.posicionandoEvasivamente:
            moveVel     = Vector3.Lerp(moveVel, moveDir, TRANSICAO_DA_VELOCIDADE * Time.deltaTime);
            r2.velocity = VEL_MOVIMENTO * moveVel;

            FlipDirection.Flip(transform, moveVel.x);

            break;
        }
    }