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)); }
// HANDLERS public void OnAddAtractivity() { StartCoroutine(m_GirlCharacter.ChangeAttractivity(m_Change)); }