void Update()
    {
        switch (fase)
        {
        case FasesDesseTrigger.movimentoDePersonagem:
            CaminheHeroi(transform.position);
            break;

        case FasesDesseTrigger.movimentoDeCamera:
            CameraAteFalas();
            break;

        case FasesDesseTrigger.falas:
            if (DisparaT.UpdateDeTextos(T, Fota))
            {
                movNPC = new MovimentoControladoParaNPC();
                movNPC.InsereElementosDeControle(Alvo.gameObject, alvoDaCaminhada);
                AplicadorDeCamera.cam.FocarBasica(Alvo, 10, 10);
                fase = FasesDesseTrigger.npcEmMovimento;
            }
            break;

        case FasesDesseTrigger.npcEmMovimento:
            if (movNPC.UpdatePosition())
            {
                AplicadorDeCamera.cam.FocarBasica(Manager.transform, 10, 10);
                Invoke("MudaPosDoNPC", 0.25f);
                Invoke("VoltaControleDoHeroi", 0.3f);
                Destroy(Destrutivel.gameObject);
                fase = FasesDesseTrigger.finalizar;
            }
            break;
        }
    }
 protected void CameraAteFalas()
 {
     if (AplicadorDeCamera.cam.FocarPonto(3, 15, 5))
     {
         MudarParaFaseDasFalas();
         DisparaT = GameController.g.HudM.DisparaT;
         DisparaT.IniciarDisparadorDeTextos();
     }
 }
    // Update is called once per frame
    void Update()
    {
        switch (fase)
        {
        case FasesDesseTrigger.movimentoDoHeroi:
            CaminheHeroi(primeiraPosHeroi.position);
            break;

        case FasesDesseTrigger.movimentoDeCamera:
            CameraAteFalas();
            break;

        case FasesDesseTrigger.falas:
            if (DisparaT.UpdateDeTextos(T, Fota))
            {
                Manager.Estado = EstadoDePersonagem.movimentoDeFora;
                fase           = FasesDesseTrigger.movimentoAteAPedra;
            }
            break;

        case FasesDesseTrigger.movimentoAteAPedra:
            Vector3 pos = segundaPosHeroi.position;
            if (Vector3.Distance(Manager.transform.position, pos) > 0.5f)
            {
                Manager.Mov.AplicadorDeMovimentos((pos - Manager.transform.position).normalized);
            }
            else
            {
                EntrarNaFaseDoEmpurrao();
                conjuntoDePoeira.SetActive(true);
            }
            break;

        case FasesDesseTrigger.empurrando:
            if (Vector3.Distance(pedraRemovivel.position, posParaPedra.position) > 0.5f)
            {
                pedraRemovivel.position += Vector3.forward * Time.deltaTime;
            }
            else
            {
                Manager.transform.parent = null;
                Alvo.parent = null;
                Manager.Mov.Animador.ForcarPadrao();
                movNPC.Mov.Animador.ForcarPadrao();
                Destroy(conjuntoDePoeira);
                DisparaT.IniciarDisparadorDeTextos();
                T    = bancoDeTextos.RetornaListaDeTextoDoIdioma(ChaveDeTexto.continueMeSeguindo).ToArray();
                fase = FasesDesseTrigger.falaPraSeguirDenovo;
            }
            break;

        case FasesDesseTrigger.falaPraSeguirDenovo:
            if (DisparaT.UpdateDeTextos(T, Fota))
            {
                AplicadorDeCamera.cam.FocarBasica(Alvo, 10, 10);
                movNPC.InsereElementosDeControle(Alvo.gameObject, segundoPontoParaNPC);
                fase = FasesDesseTrigger.NpcParaNovoPonto;
            }
            break;

        case FasesDesseTrigger.NpcParaNovoPonto:
            if (movNPC.UpdatePosition())
            {
                AplicadorDeCamera.cam.FocarBasica(Manager.transform, 10, 10);
                Invoke("MudaPosDoNPC", 0.25f);
                Invoke("VoltaControleDoHeroi", 0.3f);
                Destroy(Destrutivel.gameObject);
                fase = FasesDesseTrigger.finalizar;
            }
            break;
        }
    }