Ejemplo n.º 1
0
    public void DrawNodeProperties(Rect propertiesRect, Node selected_node, DialogueAssetBuilder asset)
    {
        if (asset != null)
        {
            m_nodeGraphModel = asset.m_nodeGraphModel;
        }

        m_nodePropertiesRect = new Rect(propertiesRect.position.x + 5f, propertiesRect.position.y + 5f, propertiesRect.width - 10f, propertiesRect.height - 10f);
        BeginArea(m_nodePropertiesRect);
        if (selected_node != null) // if there has been a node selected, display that node's properties
        {
            int node_id = selected_node.m_id;
            Label("Node Properties");
            DialogueData data = m_nodeGraphModel.GetDataFromNodeID(node_id);
            if (data != null)
            {
                data.m_isStartNode = Toggle(data.m_isStartNode, "Is start node");
                Label(" ");

                Label("Character Speaking");
                data.characterName = TextArea(data.characterName);

                Label("Preview Text");
                data.previewDialogueText = TextArea(data.previewDialogueText, Height(50));

                Label("Dialogue Text");
                data.dialogueText = TextArea(data.dialogueText, Height(m_nodePropertiesRect.height * 0.5f));
            }

            if (m_nodeGraphModel != null)
            {
                if (Button("Add Dialogue Option"))
                {
                    m_nodeGraphModel.AddOutputPlugToNode(node_id);
                }
            }
        }
        else if (asset != null) // display asset properties
        {
            Label("Dialogue Asset");
            if (Button("Save Asset"))
            {
                // save asset
                asset.SaveAsset(m_nodeGraphModel);
            }
        }
        EndArea();
    }
Ejemplo n.º 2
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);
        }
    }
Ejemplo n.º 3
0
    private void DrawNode(Node node, GUIStyle style)
    {
        Rect nodeRect = new Rect(node.m_position.x, node.m_position.y, node.m_dimension.x, node.m_dimension.y);

        // draw plugs on specific node
        DrawPlug(node.m_inputPlug, nodeRect, m_inputPlugStyle, 1, 1);
        int  plug_count  = 1;
        Plug delete_plug = null;

        foreach (KeyValuePair <int, Plug> output_plug in node.m_outputPlugs)
        {
            if (delete_plug == null)
            {
                delete_plug = DrawPlug(output_plug.Value, nodeRect, m_outputPlugStyle, plug_count, node.m_outputPlugs.Count);
            }
            else
            {
                DrawPlug(output_plug.Value, nodeRect, m_outputPlugStyle, plug_count, node.m_outputPlugs.Count);
            }
            ++plug_count;
        }
        if (delete_plug != null)
        {
            m_nodeGraphModel.RemoveOutputPlugFromNode(delete_plug.m_plugId, delete_plug.m_nodeId);
        }


        // drawing the node itself with the contents in it
        GUI.Box(nodeRect, "", style);
        float padding         = 7f;
        Rect  nodeContentRect = new Rect(node.m_position.x + padding, node.m_position.y + padding, node.m_dimension.x - (2 * padding), node.m_dimension.y - (2 * padding));

        BeginArea(nodeContentRect);
        DialogueData data = m_nodeGraphModel.GetDataFromNodeID(node.m_id);

        if (data != null)
        {
            Label(data.characterName);
            Label(data.dialogueText, Height(node.m_dimension.y));
        }
        EndArea();
    }
Ejemplo n.º 4
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);
    }
Ejemplo n.º 5
0
    public void DrawNodeGraph(Rect graphRect, DialogueAssetBuilder asset)
    {
        if (asset != null)
        {
            m_nodeGraphModel = asset.m_nodeGraphModel;
            m_assetBuilder   = asset;
        }

        if (m_nodeGraphModel.startNodeID == 0)
        {
            int id = m_nodeGraphModel.AddNode(new Vector2(10, 10));
            m_nodeGraphModel.AddOutputPlugToNode(id);
            m_nodeGraphModel.GetDataFromNodeID(id).m_isStartNode = true;
            m_nodeGraphModel.startNodeID = id;
        }

        m_nodeGraphRect = graphRect;
        BeginArea(graphRect);
        Label("Node Graph");

        // write out asset errors

        DrawGrid(graphRect, 20, 0.2f, Color.gray);  // light grid-lines
        DrawGrid(graphRect, 100, 0.4f, Color.gray); // dark grid-lines
        DrawNodes();
        DrawConnections();
        DrawActiveConnection(Event.current);
        if (m_isMultiSelectOn)
        {
            DrawMultiSelectBox();
        }
        EndArea();
    }
Ejemplo n.º 6
0
    public void DrawNodeProperties(Rect propertiesRect, List <int> selected_nodes, DialogueAssetBuilder asset)
    {
        if (asset != null)
        {
            m_nodeGraphModel = asset.m_nodeGraphModel;
        }

        m_nodePropertiesRect = new Rect(propertiesRect.position.x + 5f, propertiesRect.position.y + 5f, propertiesRect.width - 10f, propertiesRect.height - 10f);
        BeginArea(m_nodePropertiesRect);
        scrollPosition = BeginScrollView(scrollPosition, false, false, Width(m_nodePropertiesRect.width), Height(m_nodePropertiesRect.height));

        EditorGUI.BeginChangeCheck();

        if (SceneManager.GetActiveScene().name == asset.m_dialogueAsset.SceneName)
        {
            // display first node properties
            if (selected_nodes != null) // if there has been a node selected, display that node's properties
            {
                Node first_node = m_nodeGraphModel.GetNodeFromID(selected_nodes[0]);
                int  node_id    = first_node.m_id;
                Label("Node Properties", EditorStyles.boldLabel);
                DialogueData data = m_nodeGraphModel.GetDataFromNodeID(node_id);
                if (data != null)
                {
                    // draw start node
                    if (data.m_isStartNode)
                    {
                        DisplayStartNodeProperties(data, node_id);
                    }
                    // draw condition node
                    else if (data.isConditionalBranching)
                    {
                        DisplayConditionalNodeProperties(data, node_id, asset);
                    }
                    // draw option node
                    else if (data.m_isBranching && !data.isConditionalBranching)
                    {
                        DisplayOptionNodeProperties(data, node_id, asset);
                    }
                    else if (data.m_isEventNode)
                    {
                        DisplayEventNode(data);
                    }
                    // draw normal node
                    else
                    {
                        DisplayNormalNodeProperties(data, asset);
                    }
                }
            }
            else if (asset != null) // display asset properties
            {
                DisplayAssetProperties(asset);
                // cheat sheet for the tags in the markup so far
                {
                    DisplayMarkupCheatSheet();
                }
            }

            if (EditorGUI.EndChangeCheck())
            {
                Undo.RecordObject(asset.m_dialogueAsset, "");
            }
        }
        else
        {
            Label("Used in Scene :" + asset.m_dialogueAsset.SceneName, EditorStyles.boldLabel);
            Label("Asset locked and not editable because you are in the incorrect scene");

            Label("", EditorStyles.boldLabel);
            Label("", EditorStyles.boldLabel);
            Label("ONLY DO THIS IF YOU'RE SURE", EditorStyles.boldLabel);
            if (Button("Change Asset to Current Scene"))
            {
                asset.m_dialogueAsset.SceneName = SceneManager.GetActiveScene().name;
            }
        }
        EndScrollView();
        EndArea();
    }