Ejemplo n.º 1
0
 void OnEnable()
 {
     if(Nodes != null)
     {
         int count = Nodes.Count;
         for(int i=0; i<count; i++)
         {
             Nodes[i].OnEnabled();
         }
     }
     actualNode = Head;
 }
Ejemplo n.º 2
0
    // Update is called once per frame
    void Update()
    {
        if (actualNode != null)
        {
            DialogueTreeStates result = actualNode.OnAction();

            if (result == DialogueTreeStates.SUCCESS)
            {
                actualNode = actualNode.GetNextDialogue();
            }
            else if (result == DialogueTreeStates.FAILURE)
            {
                //TODO: Finish the Dialogue;
            }
        }else
        {
            Destroy(gameObject);
        }
    }
 private void OnOptionBClicked()
 {
     m_currentState = DialogueTreeStates.SUCCESS;
     nextDialogue = optionB;
     if (OnOptionBSelected != null)
     {
         OnOptionBSelected.Invoke();
     }
 }
Ejemplo n.º 4
0
        private IEnumerator ProcessDialogueNode(BaseDialogueNode node)
        {
            if (node == null)
            {
                yield break;
            }

            switch (node)
            {
            case DialogueLineNode lineNode:
                yield return(Talk(lineNode.Character, lineNode.Text));

                break;

            case DecisionNode decisionNode:
                m_Decisions.SetData(decisionNode.Decisions);
                m_Decisions.SetActive(true);

                while (m_SelectedDecision < 0)
                {
                    yield return(null);
                }

                m_Decisions.SetActive(false);

                var decOutput = decisionNode.GetOutputPort($"{nameof(DecisionNode.Decisions)} {m_SelectedDecision}");
                m_SelectedDecision = -1;

                if (decOutput != null && decOutput.Connection != null)
                {
                    yield return(ProcessDialogueNode(decOutput.Connection.node as BaseDialogueNode));

                    yield break;
                }
                break;

            case ChangeAtractivityNode changeAtractivityNode:
                StartCoroutine(m_GirlCharacter.ChangeAttractivity(changeAtractivityNode.ChangedValue));
                break;

            case AtractivityConditionNode conditionNode:
                var selectedIndex = -1;

                for (int idx = 0, count = conditionNode.Conditions.Length; idx < count; idx++)
                {
                    var condition = conditionNode.Conditions[idx];
                    switch (condition.Type)
                    {
                    case EConditionType.Equals when m_GirlCharacter.Atractivity == condition.Atractivity:
                        selectedIndex = idx;
                        break;

                    case EConditionType.Greater when m_GirlCharacter.Atractivity > condition.Atractivity:
                        selectedIndex = idx;
                        break;

                    case EConditionType.GreaterEquals when m_GirlCharacter.Atractivity >= condition.Atractivity:
                        selectedIndex = idx;
                        break;

                    case EConditionType.Less when m_GirlCharacter.Atractivity < condition.Atractivity:
                        selectedIndex = idx;
                        break;

                    case EConditionType.LessEquals when m_GirlCharacter.Atractivity <= condition.Atractivity:
                        selectedIndex = idx;
                        break;
                    }

                    if (selectedIndex >= 0)
                    {
                        break;
                    }
                }

                if (selectedIndex >= 0)
                {
                    var conditionOutput = conditionNode.GetOutputPort($"{nameof(AtractivityConditionNode.Conditions)} {selectedIndex}");
                    if (conditionOutput != null && conditionOutput.Connection != null)
                    {
                        yield return(ProcessDialogueNode(conditionOutput.Connection.node as BaseDialogueNode));

                        yield break;
                    }
                }

                break;
            }

            var output = node.GetPort(nameof(DialogueLineNode.OutputNode))?.Connection;

            if (output == null)
            {
                yield break;
            }

            yield return(ProcessDialogueNode(output.node as BaseDialogueNode));
        }