コード例 #1
0
    private void SaveNodes(DialogueContainerSO _dialogueContainerSO)
    {
        _dialogueContainerSO.DialogueNodeDatas.Clear();
        _dialogueContainerSO.EventNodeDatas.Clear();
        _dialogueContainerSO.EndNodeDatas.Clear();
        _dialogueContainerSO.StartNodeDatas.Clear();

        nodes.ForEach(node =>
        {
            switch (node)
            {
            case DialogueNode dialogueNode:
                _dialogueContainerSO.DialogueNodeDatas.Add(SaveNodeData(dialogueNode));
                break;

            case StartNode startNode:
                _dialogueContainerSO.StartNodeDatas.Add(SaveNodeData(startNode));
                break;

            case EndNode endNode:
                _dialogueContainerSO.EndNodeDatas.Add(SaveNodeData(endNode));
                break;

            case EventNode eventNode:
                _dialogueContainerSO.EventNodeDatas.Add(SaveNodeData(eventNode));
                break;

            default:
                break;
            }
        });
    }
コード例 #2
0
    private void ConnectNodes(DialogueContainerSO _dialogueContainer)
    {
        for (int i = 0; i < nodes.Count; i++)
        {
            List <NodeLinkData> connections = _dialogueContainer.NodeLinkData.Where(edge => edge.BaseNodeGuid == nodes[i].NodeGuid).ToList();

            for (int j = 0; j < connections.Count; j++)
            {
                var      targetNodeGuid = connections[j].TargetNodeGuid;
                BaseNode targetNode     = nodes.First(node => node.NodeGuid == targetNodeGuid);

                if (nodes[i] is DialogueNode == false)
                {
                    Debug.Log("Подключаю Ноды");
                    LinkNodesTogether(nodes[i].outputContainer[j].Q <Port>(), (Port)targetNode.inputContainer[0]);
                }
            }
        }

        List <DialogueNode> dialogueNodes = nodes.FindAll(node => node is DialogueNode).Cast <DialogueNode>().ToList();

        foreach (DialogueNode dialogueNode in dialogueNodes)
        {
            foreach (DialogueNodePort nodePort in dialogueNode.DialogueNodePorts)
            {
                if (nodePort.InputGuid != string.Empty)
                {
                    BaseNode targetNode = nodes.First(Node => Node.NodeGuid == nodePort.InputGuid);
                    LinkNodesTogether(nodePort.MyPort, (Port)targetNode.inputContainer[0]);
                }
                ;
            }
        }
    }
コード例 #3
0
 public void Load(DialogueContainerSO _dialogueContainerSO)
 {
     ClearGraph();
     GenerateNodes(_dialogueContainerSO);
     ConnectNodes(_dialogueContainerSO);
     GenerateMiniMap();
 }
コード例 #4
0
    public void Save(DialogueContainerSO _dialogueContainerSO)
    {
        SaveEdges(_dialogueContainerSO);
        SaveNodes(_dialogueContainerSO);

        EditorUtility.SetDirty(_dialogueContainerSO);
        AssetDatabase.SaveAssets();
    }
コード例 #5
0
        // Saving our dialgoue
        public void Save(DialogueContainerSO dialogueContainerSO)
        {
            SaveEdges(dialogueContainerSO);
            SaveNodes(dialogueContainerSO);

            EditorUtility.SetDirty(dialogueContainerSO);    // Setting editor dirty to accept our changes
            AssetDatabase.SaveAssets();
        }
コード例 #6
0
        public void StartDialogue(DialogueContainerSO dialogueContainer)       // Starting the dialogue on interaction with NPC
        {
            currentDialogue = dialogueContainer;                               // Current dialogue is the one passed in interaction

            if (isTalking != true)                                             // If player isn't talking already we can run dialogue
            {
                isTalking = true;                                              // Setting the bool to true because player is talking now
                CheckNodeType(GetNextNode(currentDialogue.StartNodeDatas[0])); // Every dialogue starts with Start Node so we're getting the first item in StartNodeData to properly run the dialogue sequence
                dialogueController.ShowDialogueUI(true);                       // Showing the dialogue UI
            }
        }
コード例 #7
0
    private void GenerateNodes(DialogueContainerSO _dialogueContainer)
    {
        // Start
        foreach (StartNodeData node in _dialogueContainer.StartNodeDatas)
        {
            StartNode tempNode = graphView.CreateStartNode(node.Position);
            tempNode.NodeGuid = node.NodeGuid;

            graphView.AddElement(tempNode);
        }

        // End Node
        foreach (EndNodeData node in _dialogueContainer.EndNodeDatas)
        {
            EndNode tempNode = graphView.CreateEndNode(node.Position);
            tempNode.NodeGuid    = node.NodeGuid;
            tempNode.EndNodeType = node.EndNodeType;

            tempNode.LoadValueInToField();
            graphView.AddElement(tempNode);
        }

        // Event Node
        foreach (EventNodeData node in _dialogueContainer.EventNodeDatas)
        {
            EventNode tempNode = graphView.CreateEventNode(node.Position);
            tempNode.NodeGuid      = node.NodeGuid;
            tempNode.DialogueEvent = node.DialogueEventSO;

            tempNode.LoadValueInToField();
            graphView.AddElement(tempNode);
        }

        // Dialogue Node
        foreach (DialogueNodeData node in _dialogueContainer.DialogueNodeDatas)
        {
            DialogueNode tempNode = graphView.CreateDialogueNode(node.Position);
            tempNode.NodeGuid            = node.NodeGuid;
            tempNode.Name                = node.Name;
            tempNode.Texts               = node.TextType;
            tempNode.BackgroundImage     = node.Sprite;
            tempNode.BackgroundImageType = node.DialogueBackgroundImageType;
            tempNode.AudioClips          = node.AudioClips;

            foreach (DialogueNodePort nodePort in node.DialogueNodePorts)
            {
                tempNode.AddChoicePort(tempNode, nodePort);
            }

            tempNode.LoadValueInToField();
            graphView.AddElement(tempNode);
        }
    }
コード例 #8
0
    private void SaveEdges(DialogueContainerSO _dialogueContainerSO)
    {
        _dialogueContainerSO.NodeLinkData.Clear();

        Edge[] connectedEdges = edges.Where(edge => edge.input != null).ToArray();
        for (int i = 0; i < connectedEdges.Count(); i++)
        {
            BaseNode outputNode = (BaseNode)connectedEdges[i].output.node;
            BaseNode inputNode  = connectedEdges[i].input.node as BaseNode;

            _dialogueContainerSO.NodeLinkData.Add(new NodeLinkData {
                BaseNodeGuid = outputNode.NodeGuid, TargetNodeGuid = inputNode.NodeGuid
            });
        }
    }
コード例 #9
0
        // Saving all nodes
        private void SaveNodes(DialogueContainerSO dialogueContainerSO)
        {
            // Clearing all data before saving
            dialogueContainerSO.DialogueNodeDatas.Clear();
            dialogueContainerSO.EventNodeDatas.Clear();
            dialogueContainerSO.StatCheckNodeDatas.Clear();
            dialogueContainerSO.ItemCheckNodeDatas.Clear();
            dialogueContainerSO.EndNodeDatas.Clear();
            dialogueContainerSO.StartNodeDatas.Clear();

            // Each node is saved to different list
            nodes.ForEach(node =>
            {
                switch (node)
                {
                case StartNode startNode:
                    dialogueContainerSO.StartNodeDatas.Add(SaveNodeData(startNode));
                    break;

                case EndNode endNode:
                    dialogueContainerSO.EndNodeDatas.Add(SaveNodeData(endNode));
                    break;

                case EventNode eventNode:
                    dialogueContainerSO.EventNodeDatas.Add(SaveNodeData(eventNode));
                    break;

                case DialogueNode dialogueNode:
                    dialogueContainerSO.DialogueNodeDatas.Add(SaveNodeData(dialogueNode));
                    break;

                case StatCheckNode statCheckNode:
                    dialogueContainerSO.StatCheckNodeDatas.Add(SaveNodeData(statCheckNode));
                    break;

                case ItemCheckNode itemCheckNode:
                    dialogueContainerSO.ItemCheckNodeDatas.Add(SaveNodeData(itemCheckNode));
                    break;

                default:
                    break;
                }
            });
        }
コード例 #10
0
        // Saving nodes edges
        private void SaveEdges(DialogueContainerSO dialogueContainerSO)
        {
            // Clearing all links before saving new ones
            dialogueContainerSO.NodeLinkDatas.Clear();

            Edge[] connectedEdges = edges.Where(edge => edge.input.node != null).ToArray(); // Connecting edges by finding matching ones

            for (int i = 0; i < connectedEdges.Count(); i++)
            {
                BaseNode outputNode = (BaseNode)connectedEdges[i].output.node;
                BaseNode inputNode  = connectedEdges[i].input.node as BaseNode;

                // Adding edges to list
                dialogueContainerSO.NodeLinkDatas.Add(new NodeLinkData
                {
                    BaseNodeGuid   = outputNode.NodeGuid,
                    TargetNodeGuid = inputNode.NodeGuid
                });
            }
        }
コード例 #11
0
        // Connecting nodes
        private void ConnectNodes(DialogueContainerSO dialogueContainer)
        {
            // Looping through every node
            for (int i = 0; i < nodes.Count; i++)
            {
                List <NodeLinkData> connections = dialogueContainer.NodeLinkDatas.Where(edge => edge.BaseNodeGuid == nodes[i].NodeGuid).ToList();

                for (int j = 0; j < connections.Count; j++)
                {
                    string   targetNodeGuid = connections[j].TargetNodeGuid;
                    BaseNode targetNode     = nodes.First(node => node.NodeGuid == targetNodeGuid);

                    if ((nodes[i] is DialogueNode) == false)
                    {
                        // Connecting every nodes (besides DialogueNode) based on their input and output from ScriptableObject
                        LinkNodesTogether(nodes[i].outputContainer[j].Q <Port>(), (Port)targetNode.inputContainer[0]);
                    }
                }
            }

            List <DialogueNode> dialogueNodes = nodes.FindAll(node => node is DialogueNode).Cast <DialogueNode>().ToList();

            // Looping through every DialogueNode
            foreach (DialogueNode dialogueNode in dialogueNodes)
            {
                foreach (DialogueNodePort nodePort in dialogueNode.DialogueNodePorts)
                {
                    if (nodePort.InputGuid != string.Empty)
                    {
                        // Connecting DialogueNodes and every other nodes to DialogueNode choices
                        BaseNode targetNode = nodes.First(Node => Node.NodeGuid == nodePort.InputGuid);
                        LinkNodesTogether(nodePort.MyPort, (Port)targetNode.inputContainer[0]);
                    }
                }
            }
        }
コード例 #12
0
    private void GenerateNodes(DialogueContainerSO _dialogueContainer)
    {
        // Start Node
        foreach (StartNodeData node in _dialogueContainer.StartNodeData)
        {
            StartNode tempNode = graphView.CreateStartNode(node.Position);
            tempNode.NodeGuid   = node.NodeGuid;
            tempNode.DialogueID = node.dialogueID;

            graphView.AddElement(tempNode);
        }

        // End Node
        foreach (EndNodeData node in _dialogueContainer.EndNodeData)
        {
            EndNode tempNode = graphView.CreateEndNode(node.Position);
            tempNode.NodeGuid    = node.NodeGuid;
            tempNode.EndNodeType = node.EndNodeType;

            graphView.AddElement(tempNode);
        }

        // Event Node
        foreach (EventNodeData node in _dialogueContainer.EventNodeData)
        {
            EventNode tempNode = graphView.CreateEventNode(node.Position);
            tempNode.NodeGuid      = node.NodeGuid;
            tempNode.DialogueEvent = node.DialogueEventSO;

            graphView.AddElement(tempNode);
        }

        // Dialogue Node
        foreach (DialogueNodeData node in _dialogueContainer.DialogueNodeData)
        {
            DialogueNode tempNode = graphView.CreateDialogueNode(node.Position);
            tempNode.NodeGuid = node.NodeGuid;
            tempNode.Name     = node.Name;
            //tempNode.Texts = node.TextType;
            tempNode.FaceImage     = node.Sprite;
            tempNode.BackGround    = node.Background;
            tempNode.FaceImageType = node.DialogueFaceImageType;
            //tempNode.AudioClips = node.AudioClips;

            foreach (LanguageGeneric <string> languageGeneric in node.TextType)
            {
                tempNode.Texts.Find(language => language.LanguageType == languageGeneric.LanguageType).LanguageGenericType = languageGeneric.LanguageGenericType;
            }

            foreach (LanguageGeneric <AudioClip> languageGeneric in node.AudioClips)
            {
                tempNode.AudioClips.Find(language => language.LanguageType == languageGeneric.LanguageType).LanguageGenericType = languageGeneric.LanguageGenericType;
            }

            foreach (DialogueNodePort nodePort in node.DialogueNodePorts)
            {
                tempNode.AddChoicePort(tempNode, nodePort);
            }

            tempNode.LoadValueInToField();
            graphView.AddElement(tempNode);
        }


        // Script Node
        foreach (ScriptNodeData node in _dialogueContainer.ScriptNodeData)
        {
            ScriptNode tempNode = graphView.CreateScriptNode(node.Position);
            tempNode.NodeGuid      = node.NodeGuid;
            tempNode.scriptType    = node.scriptNodeType;
            tempNode.reqScriptType = node.reqNodeType;

            foreach (ScriptNodePort scriptNodePort in node.scriptNodePorts)
            {
                tempNode.AddRequirement(tempNode, scriptNodePort);
                tempNode.ScriptText = node.scriptTexts;
                tempNode.ResultText = node.resultTexts;
            }

            tempNode.LoadValueInToField();
            graphView.AddElement(tempNode);
        }
    }
コード例 #13
0
 // Loading dialogue
 public void Load(DialogueContainerSO dialogueContainerSO)
 {
     ClearGraph();
     GenerateNodes(dialogueContainerSO);
     ConnectNodes(dialogueContainerSO);
 }
コード例 #14
0
        // Spawning nodes based on ScriptableObject data
        private void GenerateNodes(DialogueContainerSO dialogueContainer)
        {
            // StartNode
            foreach (StartNodeData node in dialogueContainer.StartNodeDatas)
            {
                StartNode tempNode = graphView.CreateStartNode(node.Position);
                tempNode.NodeGuid = node.NodeGuid;

                graphView.AddElement(tempNode);
            }

            // EndNode
            foreach (EndNodeData node in dialogueContainer.EndNodeDatas)
            {
                EndNode tempNode = graphView.CreateEndNode(node.Position);
                tempNode.NodeGuid    = node.NodeGuid;
                tempNode.EndNodeType = node.EndNodeType;

                tempNode.LoadValueInToField();  // Loading values into node fields
                graphView.AddElement(tempNode); // Adding node to graph view
            }

            // EventNode
            foreach (EventNodeData node in dialogueContainer.EventNodeDatas)
            {
                EventNode tempNode = graphView.CreateEventNode(node.Position);
                tempNode.NodeGuid      = node.NodeGuid;
                tempNode.DialogueEvent = node.DialogueEventSO;

                tempNode.LoadValueInToField();
                graphView.AddElement(tempNode);
            }

            // DialogueNode
            foreach (DialogueNodeData node in dialogueContainer.DialogueNodeDatas)
            {
                DialogueNode tempNode = graphView.CreateDialogueNode(node.Position);
                tempNode.NodeGuid        = node.NodeGuid;
                tempNode.NameText        = node.Name;
                tempNode.NpcFaceImage    = node.npcSprite;
                tempNode.PlayerFaceImage = node.playerSprite;

                // Matching language dialogue is set to
                foreach (LanguageGeneric <string> languageGeneric in node.TextLanguages)
                {
                    tempNode.Texts.Find(language => language.LanguageType == languageGeneric.LanguageType).LanguageGenericType = languageGeneric.LanguageGenericType;
                }

                // Matching voice clips language dialogue is set to
                foreach (LanguageGeneric <AudioClip> languageGeneric in node.AudioClips)
                {
                    tempNode.AudioClips.Find(language => language.LanguageType == languageGeneric.LanguageType).LanguageGenericType = languageGeneric.LanguageGenericType;
                }

                // Matching dialogue choice ports
                foreach (DialogueNodePort nodePort in node.DialogueNodePorts)
                {
                    tempNode.AddChoicePort(tempNode, nodePort);
                }

                tempNode.LoadValueInToField();
                graphView.AddElement(tempNode);
            }

            // StatCheckNode
            foreach (StatCheckNodeData node in dialogueContainer.StatCheckNodeDatas)
            {
                StatCheckNode tempNode = graphView.CreateStatCheckNode(node.Position);
                tempNode.NodeGuid       = node.NodeGuid;
                tempNode.StatCheckValue = node.StatCheckValue.ToString();
                tempNode.CheckType      = node.StatCheckType;

                tempNode.LoadValueInToField();
                graphView.AddElement(tempNode);
            }

            // ItemCheckNode
            foreach (ItemCheckNodeData node in dialogueContainer.ItemCheckNodeDatas)
            {
                ItemCheckNode tempNode = graphView.CreateItemCheckNode(node.Position);
                tempNode.NodeGuid          = node.NodeGuid;
                tempNode.ItemCheckValue    = node.ItemCheckValue.ToString();
                tempNode.ItemCheckNodeType = node.ItemCheckType;
                tempNode.NodeItem          = node.NodeItem;

                tempNode.LoadValueInToField();
                graphView.AddElement(tempNode);
            }
        }