public DialogueNodeData() { node = "tempnode"; answers = new DialogueAnswerData[1]; answers[0] = new DialogueAnswerData(); dialogue = new string[1]; dialogue[0] = "dialogue"; }
void DrawEndWindow(int id) { GUILayout.TextField("END"); if (GUILayout.Button("-> To")) { if (connectFrom != -1) { DialogueAnswerData newAnswer = new DialogueAnswerData(); newAnswer.target = "END"; ArrayUtility.Add(ref dialogueData.nodes[connectFrom].answers, newAnswer); } updateDataStructures(); } GUI.DragWindow(); }
void DrawNodeWindow(int id) { // Resize buttons GUILayout.BeginHorizontal("box"); if (GUILayout.Button("<-")) { dialogueData.nodes[id].pos.width -= 10f; } if (GUILayout.Button("->")) { dialogueData.nodes[id].pos.width += 10f; } if (GUILayout.Button("^")) { dialogueData.nodes[id].pos.height -= 10f; } if (GUILayout.Button("v")) { dialogueData.nodes[id].pos.height += 10f; } GUILayout.EndHorizontal(); // Node name label and textfield GUILayout.BeginHorizontal("box"); GUILayout.Label("Name"); string oldName = dialogueData.nodes[id].node; dialogueData.nodes[id].node = GUILayout.TextField(dialogueData.nodes[id].node); if (oldName != dialogueData.nodes[id].node) { //ToDo: rename nodes Debug.Log("Old:" + oldName + " New:" + dialogueData.nodes[id].node); } GUILayout.EndHorizontal(); // All different dialogue textareas, usually only one used for (int i = 0; i < dialogueData.nodes[id].dialogue.Length; i++) { dialogueData.nodes[id].dialogue[i] = GUILayout.TextArea(dialogueData.nodes[id].dialogue[i]); } // All the answers and target states for (int i = 0; i < dialogueData.nodes[id].answers.Length; i++) { GUILayout.BeginHorizontal("box"); dialogueData.nodes[id].answers[i].option = GUILayout.TextField(dialogueData.nodes[id].answers[i].option); dialogueData.nodes[id].answers[i].target = GUILayout.TextField(dialogueData.nodes[id].answers[i].target); if (GUILayout.Button("X")) { ArrayUtility.RemoveAt(ref dialogueData.nodes[id].answers, i); updateDataStructures(); } GUILayout.EndHorizontal(); } // Button for adding new answer/target if (GUILayout.Button("+")) { ArrayUtility.Add(ref dialogueData.nodes[id].answers, new DialogueAnswerData()); updateDataStructures(); } // Easy connector buttons GUILayout.BeginHorizontal("box"); { GUIStyle selectedStyle = new GUIStyle(GUI.skin.button); // Highlight the currently selected "from" field if (connectFrom == id) { selectedStyle.normal.textColor = Color.red; } if (GUILayout.Button("From ->", selectedStyle)) { connectFrom = id; } if (GUILayout.Button("-> To")) { if (connectFrom != -1) { DialogueAnswerData newAnswer = new DialogueAnswerData(); newAnswer.target = dialogueData.nodes[id].node; ArrayUtility.Add(ref dialogueData.nodes[connectFrom].answers, newAnswer); } updateDataStructures(); } } GUILayout.EndHorizontal(); // Expand main window to fit all the node windows if (dialogueData.nodes[id].pos.x + dialogueData.nodes[id].pos.width > maxHorizontal) { maxHorizontal = (int)(dialogueData.nodes[id].pos.x + dialogueData.nodes[id].pos.width); } if (dialogueData.nodes[id].pos.y + dialogueData.nodes[id].pos.height > maxVertical) { maxVertical = (int)(dialogueData.nodes[id].pos.y + dialogueData.nodes[id].pos.height); } GUI.DragWindow(); }