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); } }
// Update is called once per frame void Update() { if (Conversation != null) { if (!conversationStarted) { //para designar os valores apos start conversationStarted = true; //print(conversationStarted); nodeAtual = (Conversation_Node)startNode.GetOutputPort("Inicio").Connection.node; } if (WaitingAnswer == false) { //zerar os pensamentos Pensamento1 = ""; Pensamento2 = ""; Pensamento3 = ""; Pensamento4 = ""; //metodo para trazer pessoa na conversa da cutscene. deve ser refeito. if (nodeAtual.pessoaatrazer != null) { Instantiate(nodeAtual.pessoaatrazer); } //colocar o alinhamento do texto a direta TextoPrincipal.alignment = TextAnchor.UpperRight; //atualizar o texto principal, que será do NPC Sempre TextoPrincipal.text = nodeAtual.NPCText; //se houver opcao 1... if (!string.IsNullOrEmpty(nodeAtual.Opcao1)) { //ativar o botao ConversaOpcao1.gameObject.SetActive(true); //buscar o pensamento string[] pensamentoOp1 = RemoverPensamento(nodeAtual.Opcao1); if (pensamentoOp1 != null) { Pensamento1 = pensamentoOp1[0]; ConversaOpcao1.text = pensamentoOp1[1]; } else { //colocar o texto no botao ConversaOpcao1.text = nodeAtual.Opcao1; } } //se estiver sem opcao1... else { //desabilitar o botao ConversaOpcao1.gameObject.SetActive(false); } if (!string.IsNullOrEmpty(nodeAtual.Opcao2)) { ConversaOpcao2.gameObject.SetActive(true); string[] pensamentoOp2 = RemoverPensamento(nodeAtual.Opcao2); if (pensamentoOp2 != null) { Pensamento2 = pensamentoOp2[0]; ConversaOpcao2.text = pensamentoOp2[1]; } else { ConversaOpcao2.text = nodeAtual.Opcao2; } } else { ConversaOpcao2.gameObject.SetActive(false); } if (!string.IsNullOrEmpty(nodeAtual.Opcao3)) { ConversaOpcao3.gameObject.SetActive(true); string[] pensamentoOp3 = RemoverPensamento(nodeAtual.Opcao3); if (pensamentoOp3 != null) { Pensamento3 = pensamentoOp3[0]; ConversaOpcao3.text = pensamentoOp3[1]; } else { ConversaOpcao3.text = nodeAtual.Opcao3; } } else { ConversaOpcao3.gameObject.SetActive(false); } if (!string.IsNullOrEmpty(nodeAtual.Opcao4)) { ConversaOpcao4.gameObject.SetActive(true); string[] pensamentoOp4 = RemoverPensamento(nodeAtual.Opcao4); if (pensamentoOp4 != null) { Pensamento4 = pensamentoOp4[0]; ConversaOpcao4.text = pensamentoOp4[1]; } else { ConversaOpcao4.text = nodeAtual.Opcao4; } } else { ConversaOpcao4.gameObject.SetActive(false); } } //se nao há mais opcoes, encerramos a conversa if (!nodeAtual.GetOutputPort("Exit").IsConnected) { endConversation(); } else { WaitingAnswer = true; } } }