Example #1
0
    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();
    }