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(); }
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); } }
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(); }
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); }
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(); }
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(); }