Exemple #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);
        }
    }