/// <summary>
        /// Muda o atual pelo filho escolhido pelo jogador.
        /// </summary>
        /// <param name="id"></param>
        void MudarNodePorFilho(int id)
        {
            // Agora que o jogador clicou em um butão. Olhe o id do butão em que ele clicou  e qual a mensagem associada.
            EncontrandoNodePorFilho = false;

            if (mensageiro == null)
            {
                mensageiro = gameObject;
            }
            // Tire o delegate para não se repetir quando for o chamar de novo.
            DialogarGUI.d -= MudarNodePorFilho;

            fazendoEscolha = false;
            // Mude o dialogo atual pelo filho com o id do botão.
            dialogoAtual = dialogoAtual.GetFilho(id);

            // Fecha todos os botões.
            DialogarGUI.FecharBotoes();
            // Se não tiver mensagem no dialogo atual, fecha tudo.
            if ((dialogoAtual.GetMensagem() == null) || (dialogoAtual.GetMensagem().Length == 0))
            {
                Debug.Log("Mensagem é vazia, saindo do dialogo");
                FecharDialogo();
                dialogoAtual.Agir(mensageiro);
                return;
            }

            // Chama o  método de ação do dialogo atual, passando o NPC.
            dialogoAtual.Agir(mensageiro);

            // Repete o processo.
            MostrarDialogo();
        }
        virtual protected void EncontrarProximoNode()
        {
            // Mostra as opções de escolha para o jogador e espera que ele clique em alguma.
            if (mensageiro == null)
            {
                mensageiro = gameObject;
            }
            // Caso não tenha filho, saia do dialógo.
            if ((dialogoAtual.GetFilhos().Count == 0) || (dialogoAtual.GetFilhos() == null))
            {
                Debug.Log("Nenhum filho encontrado, saindo do dialogo");
                FecharDialogo();
                return;
            }

            // Caso o proximo filho não tenha mensagens, apenas aja.
            if ((dialogoAtual.GetFilhos().Count == 1) && (dialogoAtual.GetFilhos()[0].GetNomeEscolha() == "") && (dialogoAtual.GetFilho(0).GetMensagem().Length == 0))
            {
                FecharDialogo();
                dialogoAtual.GetFilho(0).Agir(gameObject);
                return;
            }

            // Se houver apenas um filho e ele não possua uma mensagem de escolha, mostre ele.
            if ((dialogoAtual.GetFilhos().Count == 1) && (dialogoAtual.GetFilhos()[0].GetNomeEscolha() == ""))
            {
                Debug.Log("Só tem um filho sem nome");
                dialogoAtual = dialogoAtual.GetFilhos()[0];
                return;
            }

            if ((dialogoAtual.GetFilhos().Count == 1) && (!dialogoAtual.GetFilhos()[0].checarRequisito()))
            {
                Debug.Log("Só tem um filho, mas seu requisito não foi cumprido");
                FecharDialogo();
                return;
            }


            // Caso nenhuma dessas exceções, mostre os botões e espere.
            Debug.Log("Mostrando botoes");
            fazendoEscolha = true;
            DialogarGUI.d += MudarNodePorFilho;
            for (int i = 0; i < dialogoAtual.GetFilhos().Count; i++)
            {
                Debug.Log("Spawnando botoes");
                // Checa se o requisito desse dialogo foi cumprido, caso não, não o mostre.
                if (dialogoAtual.GetFilho(i).checarRequisito())
                {
                    DialogarGUI.MostrarBotao(dialogoAtual.GetFilho(i).GetNomeEscolha(), i);
                }
            }

            EncontrandoNodePorFilho = true;
        }
        public void MostrarDialogo(Dialogo dialogo)
        {
            estaDialogando = true;
            indexDialogo   = 0;
            // Para qualquer dialogo que esteja sendo mostrado.
            DialogarGUI.StopAllCoroutines();
            dialogoPadrao = dialogoAtual;
            dialogoAtual  = dialogo;
            INDialogoFinalizado.AddListener(ResetarDialogo);

            Debug.Log("Mostrando Dialogo");
            if ((dialogoAtual.GetMensagem().Length != 0) && (indexDialogo <= dialogoAtual.GetMensagem().Length))
            {
                // Mostra o dialogo. GUI_Dialogar só lida com strings.
                DialogarGUI.MostrarMensagem(dialogoAtual.GetMensagem(indexDialogo));
            }
            else
            {
                FecharDialogo();
            }
        }
 public void ResetarDialogo()
 {
     dialogoAtual = dialogoPadrao;
     INDialogoFinalizado.RemoveListener(ResetarDialogo);
 }
 public void MudarDialogo(Dialogo dialogo)
 {
     dialogoAtual = dialogo;
 }