public void ShowModifyDialog() { dialogID = EditorGUILayout.IntField("ID: ", dialogID, GUILayout.Width(295)); dialogOption = EditorGUILayout.TextField("Option: ", dialogOption, GUILayout.Width(295)); EditorGUILayout.LabelField("Dialog text:"); dialogOutput = EditorGUILayout.TextArea(dialogOutput, GUILayout.Width(350), GUILayout.MinHeight(90)); EditorGUILayout.Space(); // What the dialog links to... EditorGUILayout.LabelField("Dialog links to..."); for (int i = 0; i < dialogNext.Count; i++) { EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("X", GUILayout.Width(50))) { dialogNext.RemoveAt(i); break; } string label = string.Format("#{0}: ", dialogNext[i].ToString()); if (selectedNPC != null) { if (selectedNPC.HasDialogWithID(dialogNext[i])) { label += selectedNPC.GetDialogWithID(dialogNext[i]).DialogOption; } } EditorGUILayout.LabelField(label, GUILayout.ExpandHeight(true)); EditorGUILayout.EndHorizontal(); } EditorGUILayout.BeginHorizontal(); dialogNextID = EditorGUILayout.IntField("New Link: ", dialogNextID, GUILayout.Width(295)); if (GUILayout.Button("+", GUILayout.Width(50))) { dialogNext.Add(dialogNextID); dialogNextID = 0; } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); // Dialog type, target item/quest... dialogType = (NPCDialogType)EditorGUILayout.EnumPopup("Type: ", dialogType, GUILayout.Width(480)); switch (dialogType) { case (NPCDialogType.Dialog): break; case (NPCDialogType.Player_GiveItem): case (NPCDialogType.Player_ReceiveItem): EditorGUILayout.BeginHorizontal(); string itemLabel = string.Format("#{0}: ", dialogTriggerID.ToString()); if (_itemDatabase.Contains(dialogTriggerID)) { itemLabel += _itemDatabase.Item(dialogTriggerID).ItemName; } EditorGUILayout.LabelField(itemLabel); EditorGUILayout.EndHorizontal(); break; case (NPCDialogType.Quest_Start): case (NPCDialogType.Quest_Advance): case (NPCDialogType.Quest_Finish): EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("X", GUILayout.Width(50))) { dialogTriggerID = -1; break; } string questLabel = string.Format("#{0}: ", dialogTriggerID.ToString()); if (_questDatabase.Contains(dialogTriggerID)) { questLabel += _questDatabase.quest(dialogTriggerID); } EditorGUILayout.LabelField(questLabel); EditorGUILayout.EndHorizontal(); break; } dialogTriggerOnFinish = EditorGUILayout.Toggle("Trigger on Finish: ", dialogTriggerOnFinish); dialogTriggerID = EditorGUILayout.IntField("Item/NPC ID: ", dialogTriggerID, GUILayout.Width(295)); if (showEditDialog) { if (GUILayout.Button("Save Dialog", GUILayout.Width(300))) { if (selectedNPC.HasDialogWithID(dialogID) && selectedDialog.DialogID != dialogID) { Debug.LogWarning("NPC already contains a dialog with ID " + dialogID); return; } selectedDialog.DialogID = dialogID; selectedDialog.DialogOption = dialogOption; selectedDialog.DialogOutput = dialogOutput; selectedDialog.DialogType = dialogType; selectedDialog.DialogTriggerOnFinish = dialogTriggerOnFinish; selectedDialog.DialogTriggerID = dialogTriggerID; List <int> _next = new List <int>(); for (int i = 0; i < dialogNext.Count; i++) { _next.Add(dialogNext[i]); } selectedDialog.SetDialogLinks(_next); // Sorts the list by dialog number then resets the fields. // npcDialog = npcDialog.OrderBy(o => o.DialogID).ToList(); ResetDialogFields(); selectedDialog = null; showEditDialog = false; } if (GUILayout.Button("Cancel", GUILayout.Width(300))) { ResetDialogFields(); selectedDialog = null; showEditDialog = false; } } else if (showAddDialog) { if (GUILayout.Button("Save Dialog", GUILayout.Width(300))) { if (selectedNPC != null) { if (selectedNPC.HasDialogWithID(dialogID)) { Debug.LogWarning("NPC already contains a dialog with ID " + dialogID); return; } } NPCDialog _dialog = new NPCDialog(); _dialog.DialogID = dialogID; _dialog.DialogOption = dialogOption; _dialog.DialogOutput = dialogOutput; _dialog.DialogType = dialogType; _dialog.DialogTriggerOnFinish = dialogTriggerOnFinish; _dialog.DialogTriggerID = dialogTriggerID; List <int> _next = new List <int>(); for (int i = 0; i < dialogNext.Count; i++) { _next.Add(dialogNext[i]); } _dialog.SetDialogLinks(_next); npcDialog.Add(_dialog); // Sorts the list by dialog number then resets the fields. //npcDialog = npcDialog.OrderBy(o => o.DialogID).ToList(); ResetDialogFields(); selectedDialog = null; showEditDialog = false; } } EditorGUILayout.Space(); }