public override void SetOutput(BaseNode output, Vector2 clickPos) { clickPos.x -= windowRect.x; clickPos.y -= windowRect.y; for (int i = 0; i < ChoiceRects.Count; i++) { if (ChoiceRects[i].Contains(clickPos)) { if (!ChoiceNodePair.ContainsKey(i)) { ChoiceNodePair.Add(i, output); dialogueType.choiceDialogueKeys.Add(i); dialogueType.choiceDialogueValues.Add(output.index); break; } ChoiceNodePair[i] = output; dialogueType.choiceDialogueValues[i] = output.index; } } for (int i = 0; i < outputs.Count; i++) { if (outputs[i].Equals(output)) { return; } } outputs.Add(output); outputRects.Add(output.windowRect); dialogueType.outputIndexes.Add(output.index); hasOutputs = true; }
public override void DrawWindow() { base.DrawWindow(); Event e = Event.current; EditorGUILayout.LabelField("Prompt:"); Prompt = EditorGUILayout.TextArea(Prompt); NumChoices = EditorGUILayout.IntField("Number of Choices", NumChoices); if (NumChoices < 0) { NumChoices = 0; } EditorGUILayout.LabelField("Choices:"); EditorGUILayout.Space(); int difference = Mathf.Abs(NumChoices - Choices.Count); if (Choices.Count < NumChoices) { for (int i = 0; i < difference; i++) { Choices.Add(""); ChoiceRects.Add(new Rect()); } } else if (Choices.Count > NumChoices) { if (NumChoices != 0) { Choices.RemoveRange(NumChoices - 1, difference); ChoiceRects.RemoveRange(NumChoices - 1, difference); for (int i = NumChoices; i < difference; i++) { if (ChoiceNodePair.ContainsKey(i)) { ChoiceNodePair.Remove(i); dialogueType.choiceDialogueKeys.Remove(i); dialogueType.choiceDialogueValues.RemoveAt(i); } } } else { Choices.Clear(); ChoiceRects.Clear(); ChoiceNodePair.Clear(); dialogueType.choiceDialogueKeys.Clear(); dialogueType.choiceDialogueValues.Clear(); } } for (int i = 0; i < inputRects.Count; i++) { if (e.type == EventType.Repaint) { inputRects[i] = GUILayoutUtility.GetLastRect(); } } for (int i = 0; i < outputRects.Count; i++) { if (e.type == EventType.Repaint) { outputRects[i] = GUILayoutUtility.GetLastRect(); } } scrollPos = EditorGUILayout.BeginScrollView(scrollPos, false, false); for (int i = 0; i < Choices.Count; i++) { EditorGUILayout.LabelField("Option " + (i + 1)); Choices[i] = EditorGUILayout.TextArea(Choices[i], GUILayout.Height(30)); } EditorGUILayout.EndScrollView(); // Location of TextAreas AddChoiceRects(); dialogueType.windowRect = windowRect; dialogueType.index = index; dialogueType.question = Prompt; dialogueType.choices = Choices; dialogueType.choiceNum = NumChoices; dialogueType.inputCount = inputs.Count; dialogueType.inputRects = inputRects; dialogueType.outputCount = outputs.Count; dialogueType.outputRects = outputRects; dialogueType.choiceRects = ChoiceRects; if (GUILayout.Button("Clear All", GUILayout.Height(20))) { NumChoices = 0; inputRects.Clear(); inputs.Clear(); outputs.Clear(); outputRects.Clear(); ChoiceNodePair.Clear(); } }