Exemplo n.º 1
0
    private void DrawConnections()
    {
        if (m_nodeGraphModel.GetConnections().Count != 0)
        {
            Connection connection_selected = null;
            foreach (KeyValuePair <int, Connection> connection_pair in m_nodeGraphModel.GetConnections())
            {
                Connection connection = connection_pair.Value;
                Plug       input_plug = m_nodeGraphModel.GetNodeFromID(connection.m_inputNodeId).m_inputPlug;
                Plug       output_plug;
                m_nodeGraphModel.GetNodeFromID(connection.m_outputNodeId).m_outputPlugs.TryGetValue(connection.m_outputPlugId, out output_plug);

                Handles.DrawBezier(input_plug.m_position, output_plug.m_position,
                                   input_plug.m_position + Vector2.left * 50f, output_plug.m_position - Vector2.left * 50f,
                                   Color.white, null, 2f);

                if (Handles.Button((input_plug.m_position + output_plug.m_position) * 0.5f, Quaternion.identity, 4, 8, Handles.SphereHandleCap))
                {
                    connection_selected = connection;
                }
            }
            if (connection_selected != null) // clicking on the selection will delete it
            {
                OnClickRemoveConnection(connection_selected);
            }
        }
    }
Exemplo n.º 2
0
    public void SaveAsset(NodeGraphModel model_data)
    {
        if (m_dialogueAsset.SceneName != SceneManager.GetActiveScene().name)
        {
            return;
        }

        m_dialogueAsset.m_assetData = "";
        // save connections
        m_dialogueAsset.m_assetData += model_data.GetConnections().Count + "`";
        foreach (KeyValuePair <int, Connection> connection_pair in model_data.GetConnections())
        {
            Connection connection = connection_pair.Value;
            m_dialogueAsset.m_assetData += connection.m_id + "`";
            m_dialogueAsset.m_assetData += connection.m_inputNodeId + "`";
            m_dialogueAsset.m_assetData += connection.m_outputNodeId + "`";
            m_dialogueAsset.m_assetData += connection.m_inputPlugId + "`";
            m_dialogueAsset.m_assetData += connection.m_outputPlugId + "`";
        }

        // save nodes
        m_dialogueAsset.m_assetData += model_data.GetNodes().Count + "`";
        foreach (KeyValuePair <int, Node> node_pair in model_data.GetNodes())
        {
            Node node = node_pair.Value;
            m_dialogueAsset.m_assetData += node.m_id + "`";
            m_dialogueAsset.m_assetData += node.m_position.x + "`" + node.m_position.y + "`";
            m_dialogueAsset.m_assetData += node.m_dimension.x + "`" + node.m_dimension.y + "`";
            m_dialogueAsset.m_assetData += node.isConditionalNode + "`";
            SavePlugData(node.m_inputPlug);
            m_dialogueAsset.m_assetData += node.m_outputPlugs.Count + "`";
            foreach (KeyValuePair <int, Plug> plug_pair in node.m_outputPlugs)
            {
                Plug plug = plug_pair.Value;
                SavePlugData(plug);
            }
        }

        //clear current node assets in dialogue asset


        // save dialogue data
        ClearAsset();
        PopulateDialogueList(model_data);
        SaveBuiltDialogueData(model_data);

        // only set it to current scene if there is no scene set in the past
        if (m_dialogueAsset.SceneName == null)
        {
            m_dialogueAsset.SceneName = SceneManager.GetActiveScene().name;
        }

        EditorUtility.SetDirty(m_dialogueAsset); // tells unity to data in this asset has changed and needs to saved if user asks
        AssetDatabase.SaveAssets();
    }
Exemplo n.º 3
0
    public void SaveAsset(NodeGraphModel model_data)
    {
        m_dialogueAsset.m_assetData = "";
        // save connections
        m_dialogueAsset.m_assetData += model_data.GetConnections().Count + "`";
        foreach (KeyValuePair <int, Connection> connection_pair in model_data.GetConnections())
        {
            Connection connection = connection_pair.Value;
            m_dialogueAsset.m_assetData += connection.m_id + "`";
            m_dialogueAsset.m_assetData += connection.m_inputNodeId + "`";
            m_dialogueAsset.m_assetData += connection.m_outputNodeId + "`";
            m_dialogueAsset.m_assetData += connection.m_inputPlugId + "`";
            m_dialogueAsset.m_assetData += connection.m_outputPlugId + "`";
        }

        // save nodes
        m_dialogueAsset.m_assetData += model_data.GetNodes().Count + "`";
        foreach (KeyValuePair <int, Node> node_pair in model_data.GetNodes())
        {
            Node node = node_pair.Value;
            m_dialogueAsset.m_assetData += node.m_id + "`";
            m_dialogueAsset.m_assetData += node.m_position.x + "`" + node.m_position.y + "`";
            m_dialogueAsset.m_assetData += node.m_dimension.x + "`" + node.m_dimension.y + "`";
            SavePlugData(node.m_inputPlug);
            m_dialogueAsset.m_assetData += node.m_outputPlugs.Count + "`";
            foreach (KeyValuePair <int, Plug> plug_pair in node.m_outputPlugs)
            {
                Plug plug = plug_pair.Value;
                SavePlugData(plug);
            }
        }

        // save dialogue data
        SaveEditorDialogueData(model_data);
        SaveRuntimeDialogueData(model_data);

        EditorUtility.SetDirty(m_dialogueAsset); // tells unity to data in this asset has changed and needs to saved if user asks
    }
Exemplo n.º 4
0
    private void PopulateDialogueList(NodeGraphModel model_data)
    {
        m_dialogueAsset.m_dialogueData = new Dictionary <int, DialogueData>();

        foreach (KeyValuePair <int, DialogueData> dialogue_pair in model_data.GetDialogueData())
        {
            List <NextDialogueDataContent> nextData = new List <NextDialogueDataContent>();
            DialogueData dialogue = dialogue_pair.Value;
            // populating next branch ids
            dialogue.m_isBranching      = model_data.GetNodeFromID(dialogue.node_id).m_outputPlugs.Count > 1;
            dialogue.m_nextDialogueData = new List <int>();
            foreach (KeyValuePair <int, Connection> connection_pair in model_data.GetConnections())
            {
                Connection connection = connection_pair.Value;
                if (connection.m_outputNodeId == dialogue.node_id)
                {
                    // adding branching indices
                    DialogueData            next_data       = model_data.GetDataFromNodeID(connection.m_inputNodeId);
                    NextDialogueDataContent nextDataContent = new NextDialogueDataContent();

                    if (next_data.branchingIndex == -1)
                    {
                        Plug outputplug_index = model_data.GetNodeFromID(connection.m_outputNodeId).m_outputPlugs[connection.m_outputPlugId];
                        Debug.Log(outputplug_index.m_plugIndex);
                        next_data.branchingIndex = outputplug_index.m_plugIndex;
                    }

                    nextDataContent.branchingIndex = next_data.branchingIndex;
                    nextDataContent.nextNodeIndex  = connection.m_inputNodeId;
                    nextData.Add(nextDataContent);
                }
            }

            nextData.Sort(delegate(NextDialogueDataContent c1, NextDialogueDataContent c2) { return(c1.branchingIndex.CompareTo(c2.branchingIndex)); });
            foreach (NextDialogueDataContent next_data in nextData)
            {
                dialogue.m_nextDialogueData.Add(next_data.nextNodeIndex);
            }

            // sort the next dialogue data by index;
            m_dialogueAsset.m_dialogueData.Add(dialogue.node_id, dialogue);
        }
    }
Exemplo n.º 5
0
    private void PopulateDialogueList(NodeGraphModel model_data)
    {
        m_dialogueAsset.m_dialogueData = new Dictionary <int, DialogueData>();

        foreach (KeyValuePair <int, DialogueData> dialogue_pair in model_data.GetDialogueData())
        {
            DialogueData dialogue = dialogue_pair.Value;
            // populating next branch ids
            dialogue.m_isBranching      = model_data.GetNodeFromID(dialogue.node_id).m_outputPlugs.Count > 1;
            dialogue.m_nextDialogueData = new List <int>();
            foreach (KeyValuePair <int, Connection> connection_pair in model_data.GetConnections())
            {
                Connection connection = connection_pair.Value;
                if (connection.m_outputNodeId == dialogue.node_id)
                {
                    dialogue.m_nextDialogueData.Add(connection.m_inputNodeId);
                }
            }
            m_dialogueAsset.m_dialogueData.Add(dialogue.node_id, dialogue);
        }
    }
Exemplo n.º 6
0
    public List <int> GetNextDialogueData(DialogueData data, NodeGraphModel model_data)
    {
        List <NextDialogueDataContent> nextData = new List <NextDialogueDataContent>();
        DialogueData dialogue = data;

        // populating next branch ids
        dialogue.m_nextDialogueData = new List <int>();
        foreach (KeyValuePair <int, Connection> connection_pair in model_data.GetConnections())
        {
            Connection connection = connection_pair.Value;
            if (connection.m_outputNodeId == dialogue.node_id)
            {
                // adding branching indices
                DialogueData            next_data       = model_data.GetDataFromNodeID(connection.m_inputNodeId);
                NextDialogueDataContent nextDataContent = new NextDialogueDataContent();

                if (next_data.branchingIndex == -1)
                {
                    Plug outputplug_index = model_data.GetNodeFromID(connection.m_outputNodeId).m_outputPlugs[connection.m_outputPlugId];
                    Debug.Log(outputplug_index.m_plugIndex);
                    next_data.branchingIndex = outputplug_index.m_plugIndex;
                }
                nextDataContent.branchingIndex = next_data.branchingIndex;
                nextDataContent.nextNodeIndex  = connection.m_inputNodeId;
                nextData.Add(nextDataContent);
            }
        }

        nextData.Sort(delegate(NextDialogueDataContent c1, NextDialogueDataContent c2) { return(c1.branchingIndex.CompareTo(c2.branchingIndex)); });
        foreach (NextDialogueDataContent next_data in nextData)
        {
            dialogue.m_nextDialogueData.Add(next_data.nextNodeIndex);
        }

        return(dialogue.m_nextDialogueData);
    }