IEnumerator ResetNodeBehaviour(GameObject button, float time) { //verificando se a saida do node atual chega em um node de tipo EndNode //ou seja, validando se a conversa acaba com resultado gravado //o yield break sai da funcao if (nodeAtual.GetOutputPort("Exit").Connection.node.GetType() == typeof(EndNode)) { EndNode nodeFinal = (EndNode)nodeAtual.GetOutputPort("Exit").Connection.node; Parametros_globais.AddOrUpdateResultados(Conversation.name, nodeFinal.Resultado); Parametros_globais.DebugAllResultados(); endConversation(nodeFinal); yield break; } //chegamos aqui se a conversa continua de alguma forma yield return(new WaitForSeconds(time)); //reiniciar a situação toda após x tempo, geralmente dado pelo tamanho da ultima fala WaitingAnswer = false; //se o proximo node for uma decisao baseado em uma conversa anterior if (nodeAtual.GetOutputPort("Exit").Connection.node.GetType() == typeof(Decision_resultadoNode)) { Decision_resultadoNode drn = (Decision_resultadoNode)nodeAtual.GetOutputPort("Exit").Connection.node; if (drn.GetBasedOnResult() == true) { nodeAtual = (Conversation_Node)drn.GetOutputPort("Exit_if_true").Connection.node; } else { nodeAtual = (Conversation_Node)drn.GetOutputPort("Exit_if_false").Connection.node; } } //se nao for end nem decision_resultado, só pode ser decisionNode else { DecisionNode dn = (DecisionNode)nodeAtual.GetOutputPort("Exit").Connection.node; //passa o nome da opcao escolhida para delimitar qual a saida certa do node de decisao nodeAtual = dn.GetNextNode(button.name); } }