예제 #1
0
    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);
        }
    }
예제 #2
0
    // 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;
            }
        }
    }