Example #1
0
    void MakeNodeToOptionConnection(int idFrom, int idTo, NodeType targetType)
    {
        if (targetType == NodeType.Option)
        {
            DialogueNode node = CurrentNodes[idFrom];
            List <int>   optionsAttachedToNode = new List <int>(node.OptionsAttached);

            if (!EditorInfo.NodesOptionsFoldouts.ContainsKey(node.NodeID))
            {
                EditorInfo.NodesOptionsFoldouts.Add(node.NodeID, new Dictionary <int, bool>());
            }

            if (!optionsAttachedToNode.Contains(idTo))
            {
                optionsAttachedToNode.Add(idTo);
                node.OptionsAttached = optionsAttachedToNode.ToArray();

                EditorInfo.NodesOptionsFoldouts[node.NodeID].Add(idTo, false);
            }
        }
        else
        {
            if (targetType == NodeType.Node)
            {
                DialogueOption option = CurrentOptions[idFrom];

                if (idTo != Dialogue.ExitDialogue)
                {
                    option.SetNext(idTo, NodeType.Node);
                }
                else
                {
                    option.SetNextNodeExit();
                }
            }
        }

        ClearAllConnectionsPending();
    }
    private void AddContinueButton(int indexer = 0)
    {
        int      nxt     = DialogueShown.CurrentNode.TargetID;
        NodeType nxtType = DialogueShown.CurrentNode.TargetType;

        DialogueOption continueOption = new DialogueOption();

        continueOption.OptionText = "[Continue]";
        continueOption.OptionID   = int.MaxValue;
        continueOption.SetNext(nxt, nxtType);

        GameObject         prefabCreated = Instantiate(OptionButtonPrefab, this.transform);
        OptionButtonScript obs           = prefabCreated.GetComponent <OptionButtonScript>();

        obs.SetNumber(++indexer);

        obs.SetText(continueOption.OptionText);
        obs.SetOption(continueOption);

        DialogueLog.Insert(indexer, prefabCreated);

        AddSeparator(indexer + 1);
    }
Example #3
0
    void UpdateCurves()
    {
        Event currentEvent = Event.current;
        Rect  cursorRect   = new Rect(currentEvent.mousePosition, new Vector2(5, 5));

        foreach (Rect win in EditorInfo.Windows)
        {
            if (win.Contains(currentEvent.mousePosition))
            {
                cursorRect = win;
            }
        }

        bool repaint = false;
        bool save    = false;

        #region Immediate Node connections creation
        if (nodeToNodeToAttach.Count == 1)
        {
            int from = EditorInfo.NodesIndexes[nodeToNodeToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.ImmidiateNodeConnection);
            repaint = true;
        }
        else
        {
            if (nodeToNodeToAttach.Count == 2)
            {
                MakeImmediateNodeConnection(
                    nodeToNodeToAttach[0],
                    nodeToNodeToAttach[1],
                    (nodeToNodeToAttach[1] == Dialogue.ExitDialogue)?
                    NodeType.Exit : NodeType.Node);
                save = true;
            }
        }
        #endregion
        #region Node To Option Connections creation
        if (nodeToOptionToAttach.Count == 1)
        {
            int from = EditorInfo.NodesIndexes[nodeToOptionToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.NodeToOptionConnection);
            repaint = true;
        }
        else
        {
            if (nodeToOptionToAttach.Count == 2)
            {
                MakeNodeToOptionConnection(nodeToOptionToAttach[0], nodeToOptionToAttach[1], NodeType.Option);
                save = true;
            }
        }
        #endregion
        #region Option To Node Connection creation
        if (optionToNodeToAttach.Count == 1)
        {
            int from = EditorInfo.OptionsIndexes[optionToNodeToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.OptionToNodeConnection);
            repaint = true;
        }
        else
        {
            if (optionToNodeToAttach.Count == 2)
            {
                MakeNodeToOptionConnection(optionToNodeToAttach[0], optionToNodeToAttach[1], NodeType.Node);
                save = true;
            }
        }
        #endregion

        #region Conditions Connections
        #region Immediate Node -> Condition

        if (nodeToConditionToAttach.Count == 1)
        {
            int from = EditorInfo.NodesIndexes[nodeToConditionToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.ToConditionConnection);
            repaint = true;
        }
        else
        {
            if (nodeToConditionToAttach.Count == 2)
            {
                MakeImmediateNodeConnection(
                    nodeToConditionToAttach[0],
                    nodeToConditionToAttach[1],
                    (nodeToConditionToAttach[1] == Dialogue.ExitDialogue)? NodeType.Exit : NodeType.Condition
                    );

                save = true;
            }
        }

        #region Option -> Condtion
        if (optionToConditionToAttach.Count == 1)
        {
            int from = EditorInfo.OptionsIndexes[optionToConditionToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.ToConditionConnection);
            repaint = true;
        }
        else
        {
            if (optionToConditionToAttach.Count == 2)
            {
                DialogueOption optionFrom = CurrentOptions[optionToConditionToAttach[0]];
                optionFrom.SetNext(optionToConditionToAttach[1], NodeType.Condition);

                optionToConditionToAttach.Clear();
                optionToNodeToAttach.Clear();
            }
        }
        #endregion

        #endregion
        #region Condition -> [Success] -> Condition

        if (conditionSuccessToConditionToAttach.Count == 1)
        {
            int from = EditorInfo.ConditionsIndexes[conditionSuccessToConditionToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.FromSuccesConnection);
            repaint = true;
        }
        else
        {
            if (conditionSuccessToConditionToAttach.Count == 2)
            {
                MakeConditionNodeConnection(
                    conditionSuccessToConditionToAttach[0],
                    conditionSuccessToConditionToAttach[1],
                    NodeType.Condition,
                    true
                    );
                save = true;
            }
        }

        #endregion
        #region Condition -> [Success] -> Node

        if (conditionSuccessToNodeToAttach.Count == 1)
        {
            int from = EditorInfo.ConditionsIndexes[conditionSuccessToNodeToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.FromSuccesConnection);
            repaint = true;
        }
        else
        {
            if (conditionSuccessToNodeToAttach.Count == 2)
            {
                MakeConditionNodeConnection(
                    conditionSuccessToNodeToAttach[0],
                    conditionSuccessToNodeToAttach[1],
                    NodeType.Node,
                    true
                    );
                save = true;
            }
        }

        #endregion
        #region Condition -> [Failure] -> Condition

        if (conditionFailToConditionToAttach.Count == 1)
        {
            int from = EditorInfo.ConditionsIndexes[conditionFailToConditionToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.FromFailureConnection);
            repaint = true;
        }
        else
        {
            if (conditionFailToConditionToAttach.Count == 2)
            {
                MakeConditionNodeConnection(
                    conditionFailToConditionToAttach[0],
                    conditionFailToConditionToAttach[1],
                    NodeType.Condition,
                    false
                    );
                save = true;
            }
        }

        #endregion
        #region Condition -> [Failure] -> Node

        if (conditionFailToNodeToAttach.Count == 1)
        {
            int from = EditorInfo.ConditionsIndexes[conditionFailToNodeToAttach[0]];

            DrawNodeCurve(EditorInfo.Windows[from], cursorRect, Config.FromFailureConnection);
            repaint = true;
        }
        else
        {
            if (conditionFailToNodeToAttach.Count == 2)
            {
                MakeConditionNodeConnection(
                    conditionFailToNodeToAttach[0],
                    conditionFailToNodeToAttach[1],
                    NodeType.Node,
                    false
                    );
                save = true;
            }
        }

        #endregion
        #region Condition -> Entry Option

        if (conditionToEntryOption.Count == 1)
        {
            int to = EditorInfo.ConditionsIndexes[conditionToEntryOption[0]];

            DrawNodeCurve(cursorRect, EditorInfo.Windows[to], Config.EntryConditionConnection);
            repaint = true;
        }
        else
        {
            if (conditionToEntryOption.Count == 2)
            {
                int to = conditionToEntryOption[0];

                if (ValidateConditionChain(to))
                {
                    MakeConditionNodeConnection(conditionToEntryOption[0], conditionToEntryOption[1], NodeType.Option, false);
                    save = true;
                }
                else
                {
                    WriteDebug("WARNING! Attempted illegal connection!: Entry Conditions must lead to Exit or another Condition.");
                    conditionToEntryOption.Clear();
                }
            }
        }

        #endregion
        #endregion

        #region Drawing established connections TOFINISH
        foreach (DialogueNode nodeFrom in CurrentNodes)
        {
            int from = EditorInfo.NodesIndexes[nodeFrom.NodeID];

            if (nodeFrom.ImmediateNode)
            {
                int      targID;
                NodeType targType;

                nodeFrom.GetTarget(out targID, out targType);

                if (targID == Dialogue.ExitDialogue)
                {
                    continue;
                }

                if (targType == NodeType.Node)
                {
                    int to = EditorInfo.NodesIndexes[targID];
                    DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.ImmidiateNodeConnection);
                }

                if (targType == NodeType.Condition)
                {
                    int to = EditorInfo.ConditionsIndexes[targID];
                    DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.ToConditionConnection);
                }
            }
            else
            {
                foreach (int optInd in nodeFrom.OptionsAttached)
                {
                    int to = EditorInfo.OptionsIndexes[optInd];
                    DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.NodeToOptionConnection);
                }
            }
        }

        foreach (DialogueOption optionFrom in CurrentOptions)
        {
            int from = EditorInfo.OptionsIndexes[optionFrom.OptionID];

            if (optionFrom.EntryConditionSet)
            {
                int entryCondition = EditorInfo.ConditionsIndexes[optionFrom.EntryCondition.ConditionID];
                DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[entryCondition], Config.EntryConditionConnection);
            }

            int to = -1;

            switch (optionFrom.NextType)
            {
            case NodeType.Node:
                to = EditorInfo.NodesIndexes[optionFrom.NextID];
                DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.OptionToNodeConnection);
                break;

            case NodeType.Condition:
                to = EditorInfo.ConditionsIndexes[optionFrom.NextID];
                DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.ToConditionConnection);
                break;
            }
        }

        foreach (ConditionNode conditionFrom in CurrentConditions)
        {
            int from = EditorInfo.ConditionsIndexes[conditionFrom.ConditionID];
            int to   = Dialogue.ExitDialogue;

            switch (conditionFrom.SuccessTargetType)
            {
            case NodeType.Condition:
                to = EditorInfo.ConditionsIndexes[conditionFrom.SuccessTarget];
                break;

            case NodeType.Node:
                to = EditorInfo.NodesIndexes[conditionFrom.SuccessTarget];
                break;
            }

            if (to != Dialogue.ExitDialogue)
            {
                DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.FromSuccesConnection);
            }

            to = Dialogue.ExitDialogue;

            switch (conditionFrom.FailureTargetType)
            {
            case NodeType.Condition:
                to = EditorInfo.ConditionsIndexes[conditionFrom.FailureTarget];
                break;

            case NodeType.Node:
                to = EditorInfo.NodesIndexes[conditionFrom.FailureTarget];
                break;
            }

            if (to != Dialogue.ExitDialogue)
            {
                DrawNodeCurve(EditorInfo.Windows[from], EditorInfo.Windows[to], Config.FromFailureConnection);
            }
        }

        #endregion

        if (repaint)
        {
            Repaint();
        }

        if (save)
        {
            SaveChanges("Update Curves");
        }
    }