コード例 #1
0
    public AudioClip Draw(Rect rect, AudioClip audio, bool readOnly = false)
    {
        if (audio != stored)
        {
            stored = audio;
        }
        Rect fieldRect   = new Rect(rect.position, rect.size - new Vector2(buttonWidth * 2 + buttonWidth * 0.25f, 0));
        Rect buttonRect  = new Rect(rect.position + new Vector2(rect.size.x - buttonWidth * 2 - buttonWidth * 0.25f, 0), new Vector2(buttonWidth, rect.height));
        Rect buttonRect2 = new Rect(rect.position + new Vector2(rect.size.x - buttonWidth, 0), new Vector2(buttonWidth, rect.height));

        if (readOnly)
        {
            GUI.enabled = false;
        }
        stored = EditorGUI.ObjectField(fieldRect, stored, typeof(AudioClip), false) as AudioClip;
        if (readOnly)
        {
            GUI.enabled = true;
        }
        if (stored == null)
        {
            GUI.enabled = false;
        }
        if (GUI.Button(buttonRect, playText))
        {
            PublicAudioUtil.PlayClip(stored);
            playing = true;
        }
        if (stored == null)
        {
            GUI.enabled = true;
        }
        if (!playing)
        {
            GUI.enabled = false;
        }
        if (GUI.Button(buttonRect2, stopText))
        {
            PublicAudioUtil.StopAllClips();
        }
        GUI.enabled = true;
        return(stored);
    }
コード例 #2
0
 public AudioClip DrawLayout(AudioClip audio, bool readOnly = false)
 {
     if (audio != stored)
     {
         stored = audio;
     }
     GUILayout.BeginHorizontal(GUILayout.ExpandHeight(true));
     if (readOnly)
     {
         GUI.enabled = false;
     }
     stored = EditorGUILayout.ObjectField(stored, typeof(AudioClip), false, GUILayout.ExpandHeight(true)) as AudioClip;
     if (readOnly)
     {
         GUI.enabled = true;
     }
     if (stored == null)
     {
         GUI.enabled = false;
     }
     if (GUILayout.Button(playText, GUILayout.ExpandWidth(false)))
     {
         PublicAudioUtil.PlayClip(stored);
         playing = true;
     }
     if (stored == null)
     {
         GUI.enabled = true;
     }
     if (!playing)
     {
         GUI.enabled = false;
     }
     if (GUILayout.Button(stopText, GUILayout.ExpandWidth(false)))
     {
         PublicAudioUtil.StopAllClips();
     }
     GUI.enabled = true;
     GUILayout.EndHorizontal();
     return(stored);
 }
コード例 #3
0
    public override void OnInspectorGUI()
    {
        EditorStyles.textArea.wordWrap  = true;
        EditorStyles.textField.wordWrap = true;
        GUI.backgroundColor             = dia.Color;

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField(dia.DialogueName, EditorStyles.boldLabel);
        dia.Color = EditorGUILayout.ColorField(dia.Color, GUILayout.Width(50));
        EditorGUILayout.EndHorizontal();


        EditorGUILayout.BeginHorizontal("Box");
        EditorGUILayout.LabelField("Dialogue Nr: ", GUILayout.Width(100));
        GUI.backgroundColor = Color.white;
        dia.DialogueName    = GUILayout.TextField(dia.DialogueName, GUILayout.Width(40));



        if (GUILayout.Button("Update", GUILayout.Width(80)))
        {
            var path = AssetDatabase.GetAssetPath(dia);
            var flds = path.Split('/');
            var nm   = flds[flds.Length - 2];



            string tx = "";
            if (dia.Lines.Count > 0)
            {
                tx = dia.Lines[0].Text.Substring(0, dia.Lines[0].Text.Length > 29? 30 : dia.Lines[0].Text.Length);
                tx = tx.Replace('?', ' ');
            }

            string fileName = nm + "_" + dia.DialogueName + "_" + tx;

            AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(dia), fileName);
            Debug.Log(fileName);
            Debug.Log(AssetDatabase.GetAssetPath(dia));
        }


        GUILayout.Space(Screen.width - 370);
        GUI.backgroundColor = dia.Color;

        EditorGUILayout.EndHorizontal();

        dia.GetCharacters();

        if (dia.Lines != null)
        {
            for (int i = 0; i < dia.Lines.Count; i++)
            {
                EditorGUILayout.BeginHorizontal("Box");

                EditorGUILayout.BeginVertical(GUILayout.Width(100));
                GUI.backgroundColor        = dia.Color;
                dia.Lines[i].SpeakerNumber = EditorGUILayout.IntPopup(dia.Lines[i].SpeakerNumber, dia.GetCharacterNames(), dia.getIntValues(), GUILayout.Width(80));
                dia.Lines[i].Speaker       = dia.Speakers.Speakers[dia.Lines[i].SpeakerNumber];

                if (dia.Lines[i].VoiceLine == null)
                {
                    GUI.backgroundColor = Color.cyan;
                }

                EditorGUILayout.BeginHorizontal();
                EditorGUI.BeginDisabledGroup(dia.Lines[i].VoiceLine == null);

                if (GUILayout.Button(">", GUILayout.Width(20)))
                {
                    PublicAudioUtil.PlayClip(dia.Lines[i].VoiceLine);
                }

                EditorGUI.EndDisabledGroup();

                dia.Lines[i].VoiceLine =
                    (AudioClip)EditorGUILayout.ObjectField(dia.Lines[i].VoiceLine, typeof(AudioClip), GUILayout.Width(76));

                GUI.backgroundColor = dia.Color;

                EditorGUILayout.EndHorizontal();

                dia.Lines[i].Event = (SceneEvent)EditorGUILayout.ObjectField(dia.Lines[i].Event, typeof(SceneEvent), GUILayout.Width(100));


                GUILayout.BeginHorizontal();
                GUILayout.Label("Automatic", GUILayout.Width(60));
                dia.Lines[i].AutomaticLine = EditorGUILayout.Toggle(dia.Lines[i].AutomaticLine);
                GUILayout.EndHorizontal();
                if (dia.Lines[i].AutomaticLine)
                {
                    EditorGUILayout.BeginHorizontal();

                    dia.Lines[i].TimeToNextLine = EditorGUILayout.FloatField(dia.Lines[i].TimeToNextLine, GUILayout.Width(60));

                    EditorGUILayout.EndHorizontal();
                }


                EditorGUILayout.EndVertical();
                GUI.backgroundColor = Color.white;
                dia.Lines[i].Text   = EditorGUILayout.TextArea(dia.Lines[i].Text, GUILayout.Height(45), GUILayout.Width(Screen.width - 180));

                GUI.backgroundColor = dia.Color;

                if (i > 0)
                {
                    if (GUILayout.Button("-", GUILayout.Width(20)) && i > 0)
                    {
                        dia.Lines.Remove(dia.Lines[i]);
                    }
                }
                else
                {
                    GUILayout.Space(24);
                }



                EditorGUILayout.EndHorizontal();
            }
        }



        if (dia.Choices != null)
        {
            for (int i = 0; i < dia.Choices.Count; i++)
            {
                //string[] names = new string[diaCol.Dialogues.Count];

                GUILayout.BeginHorizontal("Box");
                //GUILayout.FlexibleSpace();
                GUILayout.Label("Choice " + (i + 1).ToString(), GUILayout.Width(80));

                dia.Choices[i].ChoiceText = EditorGUILayout.TextField(dia.Choices[i].ChoiceText, GUILayout.Width(Screen.width - 343));

                if (dia.Choices[i].NextDialogue == null)
                {
                    GUI.backgroundColor = Color.cyan;
                }
                dia.Choices[i].NextDialogue =
                    (Dialogue)EditorGUILayout.ObjectField(dia.Choices[i].NextDialogue, typeof(Dialogue),
                                                          GUILayout.Width(100));

                GUI.backgroundColor = dia.Color;


                if (dia.Choices[i].NextDialogue != null)
                {
                    string[] nextDialogueTexts = new string[dia.Choices[i].NextDialogue.Lines.Count];
                    int[]    optValues         = new int[dia.Choices[i].NextDialogue.Lines.Count];

                    for (int j = 0; j < dia.Choices[i].NextDialogue.Lines.Count; j++)
                    {
                        nextDialogueTexts[j] = dia.Choices[i].NextDialogue.Lines[j].Text;
                        optValues[j]         = value;
                        value++;
                    }

                    value = 0;


                    GUI.backgroundColor = Color.white;


                    GUI.backgroundColor = dia.Choices[i].NextDialogue.Color;


                    dia.Choices[i].NextIndexInDialogue = EditorGUILayout.IntPopup(dia.Choices[i].NextIndexInDialogue, nextDialogueTexts, optValues, GUILayout.Width(100));
                }
                GUILayout.EndHorizontal();



                //int[] optValues = new int[diaCol.Dialogues.Count];
            }

            //dia.choices[i].nextDialogue = EditorGUILayout.TextField(dia.choices[i].nextDialogue, GUILayout.Width(100));

            GUI.backgroundColor = dia.Color;

            if (dia.Choices.Count > 0)
            {
                if (GUILayout.Button("Remove Choices", GUILayout.Width(130)))
                {
                    dia.Choices.Clear();
                }
            }
        }

        if (dia.Variable.Enabled)
        {
            GUILayout.BeginVertical("Box", GUILayout.Width(400));
            GUILayout.BeginHorizontal();
            GUI.backgroundColor = dia.Color;
            EditorGUILayout.LabelField("If ", GUILayout.Width(80));



            dia.Variable.BoolVariable =
                (BoolWithEvent)EditorGUILayout.ObjectField(dia.Variable.BoolVariable, typeof(BoolWithEvent), GUILayout.Width(200));

            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("True: ", GUILayout.Width(80));

            if (dia.Variable.NextDialogueTrue == null)
            {
                GUI.backgroundColor = Color.cyan;
            }
            dia.Variable.NextDialogueTrue = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueTrue, typeof(Dialogue), GUILayout.Width(200));

            GUI.backgroundColor = dia.Color;

            if (dia.Variable.NextDialogueTrue != null)
            {
                string[] nextDialogueTextsTrue = new string[dia.Variable.NextDialogueTrue.Lines.Count];
                int[]    optValues2            = new int[dia.Variable.NextDialogueTrue.Lines.Count];

                for (int j = 0; j < dia.Variable.NextDialogueTrue.Lines.Count; j++)
                {
                    nextDialogueTextsTrue[j] = dia.Variable.NextDialogueTrue.Lines[j].Text;
                    optValues2[j]            = value;
                    value++;
                }


                dia.Variable.NextIndexInDialogueTrue = EditorGUILayout.IntPopup(
                    dia.Variable.NextIndexInDialogueTrue, nextDialogueTextsTrue, optValues2, GUILayout.Width(100));
            }

            value = 0;

            EditorGUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("False: ", GUILayout.Width(80));

            if (dia.Variable.NextDialogueFalse == null)
            {
                GUI.backgroundColor = Color.cyan;
            }

            dia.Variable.NextDialogueFalse = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueFalse, typeof(Dialogue), GUILayout.Width(200));

            GUI.backgroundColor = dia.Color;

            if (dia.Variable.NextDialogueFalse != null)
            {
                string[] nextDialogueTextsFalse = new string[dia.Variable.NextDialogueFalse.Lines.Count];
                int[]    optValues3             = new int[dia.Variable.NextDialogueFalse.Lines.Count];

                for (int j = 0; j < dia.Variable.NextDialogueFalse.Lines.Count; j++)
                {
                    nextDialogueTextsFalse[j] = dia.Variable.NextDialogueFalse.Lines[j].Text;
                    optValues3[j]             = value;
                    value++;
                }

                dia.Variable.NextIndexInDialogueFalse = EditorGUILayout.IntPopup(
                    dia.Variable.NextIndexInDialogueFalse, nextDialogueTextsFalse, optValues3, GUILayout.Width(100));
            }

            value = 0;

            GUILayout.EndHorizontal();


            GUI.backgroundColor = dia.Color;


            if (GUILayout.Button("Remove Condition", GUILayout.Width(130)))
            {
                dia.Variable.BoolVariable = null;
                dia.Variable.Enabled      = false;
            }

            GUILayout.EndVertical();
        }



        if (dia.DirectTo.Enabled)
        {
            GUILayout.BeginVertical("Box", GUILayout.Width(400));
            GUILayout.BeginHorizontal();

            GUILayout.Label("Next Dialogue:", GUILayout.Width(90));

            if (dia.DirectTo.NewDialogue == null)
            {
                GUI.backgroundColor = Color.cyan;
            }


            dia.DirectTo.NewDialogue =
                (Dialogue)EditorGUILayout.ObjectField(dia.DirectTo.NewDialogue, typeof(Dialogue),
                                                      GUILayout.Width(180));
            GUI.backgroundColor = dia.Color;

            if (dia.DirectTo.NewDialogue != null)
            {
                string[] nextDialogueTexts = new string[dia.DirectTo.NewDialogue.Lines.Count];
                int[]    optValues         = new int[dia.DirectTo.NewDialogue.Lines.Count];

                for (int j = 0; j < dia.DirectTo.NewDialogue.Lines.Count; j++)
                {
                    nextDialogueTexts[j] = dia.DirectTo.NewDialogue.Lines[j].Text;
                    optValues[j]         = value;
                    value++;
                }


                dia.DirectTo.NewDialogueIndex = EditorGUILayout.IntPopup(
                    dia.DirectTo.NewDialogueIndex, nextDialogueTexts, optValues, GUILayout.Width(100));
            }

            value = 0;


            GUILayout.EndHorizontal();

            if (GUILayout.Button("Remove", GUILayout.Width(80)))
            {
                dia.DirectTo.NewDialogue = null;
                dia.DirectTo.Enabled     = false;
            }

            GUILayout.EndVertical();
        }



        GUILayout.BeginHorizontal();

        if (dia.Choices.Count == 0 && !dia.Variable.Enabled && !dia.DirectTo.Enabled)
        {
            if (GUILayout.Button("New Line", GUILayout.Width(100)))
            {
                dia.Lines.Add(new Line());
            }

            if (dia.Lines.Count > 0)
            {
                if (GUILayout.Button("Add Choice", GUILayout.Width(100)))
                {
                    dia.Choices.Add(new Choice());
                    dia.Choices.Add(new Choice());
                    dia.Choices.Add(new Choice());
                }
            }

            if (dia.Lines.Count > 0)
            {
                if (GUILayout.Button("Add Condition", GUILayout.Width(100)))
                {
                    dia.Variable.Enabled = true;
                }

                if (GUILayout.Button("Direct to...", GUILayout.Width(100)))
                {
                    dia.DirectTo.Enabled = true;
                }
            }
        }

        GUILayout.EndHorizontal();



        GUILayout.Space(30);


        EditorUtility.SetDirty(dia);
    }
コード例 #4
0
        void CreateForm()
        {
            if (dia.Speakers == null)
            {
                if (Resources.Load <CharacterDatabase>("Characters/CharacterDatabase"))
                {
                    dia.Speakers = Resources.Load <CharacterDatabase>("Characters/CharacterDatabase");
                }
                else
                {
                    using (new EditorGUILayout.VerticalScope())
                    {
                        EditorGUILayout.LabelField("CharacterDatabase is not set.");
                        EditorGUILayout.LabelField("Create a CharacterDatabase in Resources/Characters/CharacterDatabase.asset");
                    }
                    return;
                }
            }

            if (dia.Speakers.Characters == null)
            {
                EditorGUILayout.LabelField("Add at least one character in the CharacterDatabase.");
                return;
            }

            if (dia.Speakers.Characters.Count == 0)
            {
                EditorGUILayout.LabelField("Add at least one character in the CharacterDatabase.");
                return;
            }

            if (dia.Speakers.Characters.Count > 0)
            {
                foreach (var stu in dia.Speakers.Characters)
                {
                    if (stu == null)
                    {
                        EditorGUILayout.LabelField("Nullref in CharacterDatabase. Is an element empty?");
                        return;
                    }
                }
            }

            EditorStyles.textArea.wordWrap  = true;
            EditorStyles.textField.wordWrap = true;
            GUI.backgroundColor             = dia.Color;

            using (new EditorGUILayout.HorizontalScope())
            {
                EditorGUILayout.LabelField(dia.DialogueName, EditorStyles.boldLabel);
                dia.Color = EditorGUILayout.ColorField(dia.Color, GUILayout.Width(50));
            }

            using (new EditorGUILayout.HorizontalScope("Box"))
            {
                EditorGUILayout.LabelField("Dialogue Nr: ", GUILayout.Width(100));
                GUI.backgroundColor = Color.white;
                dia.DialogueName    = GUILayout.TextField(dia.DialogueName, GUILayout.Width(40));

                if (GUILayout.Button("Update", GUILayout.Width(80)))
                {
                    var path = AssetDatabase.GetAssetPath(dia);
                    var flds = path.Split('/');
                    var nm   = flds[flds.Length - 2];

                    string tx = "";
                    if (dia.Lines.Count > 0)
                    {
                        tx = dia.Lines[0].Text.Substring(0, dia.Lines[0].Text.Length > 29 ? 30 : dia.Lines[0].Text.Length);
                        tx = tx.Replace('?', ' ');
                    }

                    string fileName = nm + "_" + dia.DialogueName + "_" + tx;

                    AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(dia), fileName);
                    Debug.Log(fileName);
                    Debug.Log(AssetDatabase.GetAssetPath(dia));
                }
                GUILayout.Space(Screen.width - 370);
                GUI.backgroundColor = dia.Color;
            }

            if (dia.Lines != null)
            {
                for (int i = 0; i < dia.Lines.Count; i++)
                {
                    var currLine = dia.Lines[i];
                    var color    = Color.white;

                    if (dia.Lines[i].Speaker is Student)
                    {
                        var stu = dia.Lines[i].Speaker as Student;

                        float H, S, V;


                        color = stu.StudentCard.Color;
                        Color.RGBToHSV(color, out H, out S, out V);
                        S = 0.3f;
                        V = 0.95f;

                        color = Color.HSVToRGB(H, S, V);
                    }
                    else
                    {
                        GUI.backgroundColor = Color.white;
                    }

                    GUI.backgroundColor = color;
                    using (new EditorGUILayout.HorizontalScope("Box"))
                    {
                        using (new EditorGUILayout.VerticalScope(GUILayout.Width(120)))
                        {
                            GUI.backgroundColor = dia.Color;
                            var prependedArray = ContainerUtil.PrependedList(dia.GetCharacterNames(), "<No Character>");
                            currLine.SpeakerNumber = EditorGUILayout.IntPopup(currLine.SpeakerNumber, prependedArray,
                                                                              ContainerUtil.Iota(prependedArray.Length, -1), GUILayout.Width(130));
                            currLine.Speaker = currLine.SpeakerNumber == -1 ? null : dia.Speakers.Characters[currLine.SpeakerNumber];

                            if (dia.Lines[i].Speaker)
                            {
                                var aliasNames = new string[dia.Lines[i].Speaker.Aliases.Count + 1];
                                aliasNames[0] = "(No Alias)";

                                for (int j = 1; j < dia.Lines[i].Speaker.Aliases.Count + 1; j++)
                                {
                                    aliasNames[j] = dia.Lines[i].Speaker.Aliases[j - 1].Name;
                                }
                                dia.Lines[i].AliasNumber = EditorGUILayout.IntPopup(dia.Lines[i].AliasNumber,
                                                                                    aliasNames, dia.getAliasesIntValues(dia.Lines[i].Speaker),
                                                                                    GUILayout.Width(130));
                            }

                            using (new EditorGUILayout.HorizontalScope())
                            {
                                GUILayout.Label("Voice", GUILayout.Width(35));
                                dia.Lines[i].VoiceSFX =
                                    EditorGUILayout.ObjectField(dia.Lines[i].VoiceSFX, typeof(AudioClip), false,
                                                                GUILayout.Width(90)) as AudioClip;
                            }

                            if (dia.Lines[i].SFX != null)
                            {
                                for (var j = 0; j < dia.Lines[i].SFX.Count; j++)
                                {
                                    using (new EditorGUILayout.HorizontalScope())
                                    {
                                        EditorGUI.BeginDisabledGroup(dia.Lines[i].SFX[j] == null);

                                        if (GUILayout.Button(">", GUILayout.Width(20)))
                                        {
                                            PublicAudioUtil.PlayClip(dia.Lines[i].SFX[j]);
                                        }

                                        EditorGUI.EndDisabledGroup();

                                        dia.Lines[i].SFX[j] =
                                            (AudioClip)EditorGUILayout.ObjectField(dia.Lines[i].SFX[j], typeof(AudioClip), false,
                                                                                   GUILayout.Width(76));

                                        if (GUILayout.Button("x", GUILayout.Width(20)))
                                        {
                                            dia.Lines[i].SFX.Remove(dia.Lines[i].SFX[j]);
                                        }
                                    }
                                }
                            }

                            if (GUILayout.Button("Add Sound"))
                            {
                                dia.Lines[i].SFX.Add(_sfx);
                            }

                            if (dia.Lines[i].Events != null)
                            {
                                for (var j = 0; j < dia.Lines[i].Events.Count; j++)
                                {
                                    using (new EditorGUILayout.HorizontalScope())
                                    {
                                        dia.Lines[i].Events[j] = (SceneEvent)EditorGUILayout.ObjectField(dia.Lines[i].Events[j], typeof(SceneEvent), false, GUILayout.Width(100));
                                        if (GUILayout.Button("x", GUILayout.Width(20)))
                                        {
                                            dia.Lines[i].Events.Remove(dia.Lines[i].Events[j]);
                                        }
                                    }
                                }
                            }

                            if (GUILayout.Button("Add Event"))
                            {
                                dia.Lines[i].Events.Add(CreateInstance <SceneEvent>());
                            }

                            using (new EditorGUILayout.HorizontalScope())
                            {
                                GUILayout.Label("Automatic", GUILayout.Width(60));
                                dia.Lines[i].AutomaticLine = EditorGUILayout.Toggle(dia.Lines[i].AutomaticLine);
                            }
                            if (dia.Lines[i].AutomaticLine)
                            {
                                using (new EditorGUILayout.HorizontalScope())
                                {
                                    dia.Lines[i].TimeToNextLine = EditorGUILayout.FloatField(dia.Lines[i].TimeToNextLine, GUILayout.Width(60));
                                }
                            }
                        }

                        if (dia.Lines[i].Speaker != null && !IsProtagonist(dia.Lines[i].Speaker))
                        {
                            using (new EditorGUILayout.VerticalScope("Box"))
                            {
                                var exprs = dia.Lines[i].Speaker.Expressions.Count;

                                if (exprs < dia.Lines[i].ExpressionNumber)
                                {
                                    dia.Lines[i].ExpressionNumber = 0;
                                }

                                var expressionNames = new string[dia.Lines[i].Speaker.Expressions.Count + 1];
                                expressionNames[0] = "<No change>";

                                for (int j = 1; j < dia.Lines[i].Speaker.Expressions.Count + 1; j++)
                                {
                                    expressionNames[j] = dia.Lines[i].Speaker.Expressions[j - 1].Name;
                                }

                                if (dia.Lines[i].Expression != null)
                                {
                                    GUIStyle expr = new GUIStyle();
                                    if (dia.Lines[i].Expression.Sprite != null && dia.Lines[i].ExpressionNumber > 0)
                                    {
                                        var tex = dia.Lines[i].Expression.Sprite.GetTexture("_BaseMap") as Texture2D;
                                        if (tex)
                                        {
                                            expr.normal.background = tex;
                                        }
                                    }

                                    EditorGUILayout.LabelField(GUIContent.none, expr, GUILayout.Width(100),
                                                               GUILayout.Height(100));
                                }

                                dia.Lines[i].ExpressionNumber = EditorGUILayout.IntPopup(dia.Lines[i].ExpressionNumber,
                                                                                         expressionNames, dia.getExpressionIntValues(dia.Lines[i].Speaker), GUILayout.Width(100));


                                if (dia.Lines[i].ExpressionNumber > 0)
                                {
                                    dia.Lines[i].Expression =
                                        dia.Lines[i].Speaker.Expressions[dia.Lines[i].ExpressionNumber - 1];
                                }
                                else
                                {
                                    dia.Lines[i].Expression = new Expression();
                                }
                            }
                        }
                        else
                        {
                            EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(108),
                                                       GUILayout.Height(100));
                        }

                        GUI.backgroundColor = Color.white;
                        var propLine     = propLines.GetArrayElementAtIndex(i);
                        var propLineText = propLine.FindPropertyRelative("Text");
                        propLineText.stringValue = EditorGUILayout.TextArea(propLineText.stringValue, GUILayout.Height(125), GUILayout.Width(Screen.width - 310));

                        GUI.backgroundColor = dia.Color;

                        using (new EditorGUILayout.VerticalScope())
                        {
                            if (dia.Lines.Count > 1)
                            {
                                if (GUILayout.Button("-", GUILayout.Width(20)) && dia.Lines.Count > 1)
                                {
                                    GUI.FocusControl(null);
                                    dia.Lines.Remove(dia.Lines[i]);
                                }
                            }

                            if (i > 0)
                            {
                                if (GUILayout.Button("ʌ", GUILayout.Width(20)) && i > 0)
                                {
                                    {
                                        GUI.FocusControl(null);
                                        var line = dia.Lines[i - 1];

                                        dia.Lines[i - 1] = dia.Lines[i];
                                        dia.Lines[i]     = line;
                                    }
                                }
                            }

                            if (i < dia.Lines.Count - 1)
                            {
                                if (GUILayout.Button("v", GUILayout.Width(20)))
                                {
                                    GUI.FocusControl(null);
                                    var line = dia.Lines[i + 1];

                                    dia.Lines[i + 1] = dia.Lines[i];
                                    dia.Lines[i]     = line;
                                }
                            }

                            GUILayout.FlexibleSpace();

                            if (GUILayout.Button("+", GUILayout.Width(20)))
                            {
                                dia.Lines.Insert(i + 1, new Line());
                            }
                        }
                    }
                }
            }

            if (dia.Choices != null)
            {
                for (int i = 0; i < dia.Choices.Count; i++)
                {
                    using (new EditorGUILayout.HorizontalScope("Box"))
                    {
                        GUILayout.Label("Choice " + (i + 1).ToString(), GUILayout.Width(80));

                        dia.Choices[i].ChoiceText = EditorGUILayout.TextField(dia.Choices[i].ChoiceText, GUILayout.Width(Screen.width - 343));

                        if (dia.Choices[i].NextDialogue == null)
                        {
                            GUI.backgroundColor = Color.cyan;
                        }
                        dia.Choices[i].NextDialogue =
                            (Dialogue)EditorGUILayout.ObjectField(dia.Choices[i].NextDialogue, typeof(Dialogue), true,
                                                                  GUILayout.Width(100));

                        GUI.backgroundColor = dia.Color;
                        if (dia.Choices[i].NextDialogue != null)
                        {
                            string[] nextDialogueTexts = new string[dia.Choices[i].NextDialogue.Lines.Count];
                            int[]    optValues         = new int[dia.Choices[i].NextDialogue.Lines.Count];

                            for (int j = 0; j < dia.Choices[i].NextDialogue.Lines.Count; j++)
                            {
                                nextDialogueTexts[j] = dia.Choices[i].NextDialogue.Lines[j].Text;
                                optValues[j]         = value;
                                value++;
                            }

                            value = 0;
                            GUI.backgroundColor = Color.white;
                            GUI.backgroundColor = dia.Choices[i].NextDialogue.Color;
                            dia.Choices[i].NextIndexInDialogue = EditorGUILayout.IntPopup(dia.Choices[i].NextIndexInDialogue, nextDialogueTexts, optValues, GUILayout.Width(100));
                        }
                    }
                }

                GUI.backgroundColor = dia.Color;

                if (dia.Choices.Count > 0)
                {
                    if (GUILayout.Button("Remove Choices", GUILayout.Width(130)))
                    {
                        dia.Choices.Clear();
                    }
                }
            }

            if (dia.Variable.Enabled)
            {
                using (new EditorGUILayout.VerticalScope("Box", GUILayout.Width(400)))
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUI.backgroundColor = dia.Color;
                        EditorGUILayout.LabelField("If ", GUILayout.Width(80));

                        dia.Variable.BoolVariable =
                            (BoolWithEvent)EditorGUILayout.ObjectField(dia.Variable.BoolVariable, typeof(BoolWithEvent), false, GUILayout.Width(200));
                    }
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorGUILayout.LabelField("True: ", GUILayout.Width(80));

                        if (dia.Variable.NextDialogueTrue == null)
                        {
                            GUI.backgroundColor = Color.cyan;
                        }
                        dia.Variable.NextDialogueTrue = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueTrue, typeof(Dialogue), false, GUILayout.Width(200));

                        GUI.backgroundColor = dia.Color;

                        if (dia.Variable.NextDialogueTrue != null)
                        {
                            string[] nextDialogueTextsTrue = new string[dia.Variable.NextDialogueTrue.Lines.Count];
                            int[]    optValues2            = new int[dia.Variable.NextDialogueTrue.Lines.Count];

                            for (int j = 0; j < dia.Variable.NextDialogueTrue.Lines.Count; j++)
                            {
                                nextDialogueTextsTrue[j] = dia.Variable.NextDialogueTrue.Lines[j].Text;
                                optValues2[j]            = value;
                                value++;
                            }
                            dia.Variable.NextIndexInDialogueTrue = EditorGUILayout.IntPopup(
                                dia.Variable.NextIndexInDialogueTrue, nextDialogueTextsTrue, optValues2, GUILayout.Width(100));
                        }
                    }
                    value = 0;

                    using (new EditorGUILayout.HorizontalScope())
                    {
                        EditorGUILayout.LabelField("False: ", GUILayout.Width(80));

                        if (dia.Variable.NextDialogueFalse == null)
                        {
                            GUI.backgroundColor = Color.cyan;
                        }

                        dia.Variable.NextDialogueFalse = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueFalse, typeof(Dialogue), false, GUILayout.Width(200));

                        GUI.backgroundColor = dia.Color;

                        if (dia.Variable.NextDialogueFalse != null)
                        {
                            string[] nextDialogueTextsFalse = new string[dia.Variable.NextDialogueFalse.Lines.Count];
                            int[]    optValues3             = new int[dia.Variable.NextDialogueFalse.Lines.Count];

                            for (int j = 0; j < dia.Variable.NextDialogueFalse.Lines.Count; j++)
                            {
                                nextDialogueTextsFalse[j] = dia.Variable.NextDialogueFalse.Lines[j].Text;
                                optValues3[j]             = value;
                                value++;
                            }

                            dia.Variable.NextIndexInDialogueFalse = EditorGUILayout.IntPopup(
                                dia.Variable.NextIndexInDialogueFalse, nextDialogueTextsFalse, optValues3, GUILayout.Width(100));
                        }
                    }
                    value = 0;

                    GUI.backgroundColor = dia.Color;

                    if (GUILayout.Button("Remove Condition", GUILayout.Width(130)))
                    {
                        dia.Variable.BoolVariable = null;
                        dia.Variable.Enabled      = false;
                    }
                }
            }

            if (dia.DirectTo.Enabled)
            {
                using (new EditorGUILayout.VerticalScope("Box", GUILayout.Width(400)))
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("Next Dialogue:", GUILayout.Width(90));

                        if (dia.DirectTo.NewDialogue == null)
                        {
                            GUI.backgroundColor = Color.cyan;
                        }

                        dia.DirectTo.NewDialogue =
                            (Dialogue)EditorGUILayout.ObjectField(dia.DirectTo.NewDialogue, typeof(Dialogue), false,
                                                                  GUILayout.Width(180));
                        GUI.backgroundColor = dia.Color;

                        if (dia.DirectTo.NewDialogue != null)
                        {
                            string[] nextDialogueTexts = new string[dia.DirectTo.NewDialogue.Lines.Count];
                            int[]    optValues         = new int[dia.DirectTo.NewDialogue.Lines.Count];

                            for (int j = 0; j < dia.DirectTo.NewDialogue.Lines.Count; j++)
                            {
                                nextDialogueTexts[j] = dia.DirectTo.NewDialogue.Lines[j].Text;
                                optValues[j]         = value;
                                value++;
                            }


                            dia.DirectTo.NewDialogueIndex = EditorGUILayout.IntPopup(
                                dia.DirectTo.NewDialogueIndex, nextDialogueTexts, optValues, GUILayout.Width(100));
                        }
                    }
                    value = 0;

                    if (GUILayout.Button("Remove", GUILayout.Width(80)))
                    {
                        dia.DirectTo.NewDialogue = null;
                        dia.DirectTo.Enabled     = false;
                    }
                }
            }

            if (dia.SceneTransition.Enabled)
            {
                using (new EditorGUILayout.VerticalScope("Box", GUILayout.Width(400)))
                {
                    using (new EditorGUILayout.HorizontalScope())
                    {
                        GUILayout.Label("Name of next Scene:", GUILayout.Width(130));

                        dia.SceneTransition.Scene = GUILayout.TextField(dia.SceneTransition.Scene);
                    }
                    if (GUILayout.Button("Remove", GUILayout.Width(80)))
                    {
                        dia.SceneTransition.Scene   = string.Empty;
                        dia.SceneTransition.Enabled = false;
                    }
                }
            }

            using (new EditorGUILayout.HorizontalScope())
            {
                if (dia.Choices.Count == 0 && !dia.Variable.Enabled && !dia.DirectTo.Enabled && !dia.SceneTransition.Enabled)
                {
                    if (dia.Speakers == null)
                    {
                        if (Resources.Load <CharacterDatabase>("Characters/CharacterDatabase"))
                        {
                            dia.Speakers = Resources.Load <CharacterDatabase>("Characters/CharacterDatabase");
                        }
                        else
                        {
                            using (new EditorGUILayout.VerticalScope())
                            {
                                EditorGUILayout.LabelField("CharacterDatabase is not set.");
                                EditorGUILayout.LabelField("Create a CharacterDatabase in Resources/Characters/CharacterDatabase.asset");
                            }
                        }
                    }
                    else
                    {
                        if (GUILayout.Button("New Line", GUILayout.Width(100)))
                        {
                            dia.Lines.Add(new Line());
                        }
                    }

                    if (dia.Lines.Count > 0)
                    {
                        if (GUILayout.Button("Add Choice", GUILayout.Width(100)))
                        {
                            dia.Choices.Add(new Choice());
                            dia.Choices.Add(new Choice());
                            dia.Choices.Add(new Choice());
                        }
                    }

                    if (dia.Lines.Count > 0)
                    {
                        if (GUILayout.Button("Add Condition", GUILayout.Width(100)))
                        {
                            dia.Variable.Enabled = true;
                        }

                        if (GUILayout.Button("Direct to...", GUILayout.Width(100)))
                        {
                            dia.DirectTo.Enabled = true;
                        }

                        if (GUILayout.Button("Enter Scene", GUILayout.Width(100)))
                        {
                            dia.SceneTransition.Enabled = true;
                        }
                    }
                }
            }
            GUILayout.Space(30);
        }
コード例 #5
0
    public override void OnInspectorGUI()
    {
        if (dia.Speakers == null)
        {
            if (Resources.Load <CharacterDatabase>("Characters/CharacterDatabase"))
            {
                dia.Speakers = Resources.Load <CharacterDatabase>("Characters/CharacterDatabase");
            }
            else
            {
                GUILayout.BeginVertical();
                EditorGUILayout.LabelField("CharacterDatabase is not set.");
                EditorGUILayout.LabelField("Create a CharacterDatabase in Resources/Characters/CharacterDatabase.asset");
                GUILayout.EndVertical();
                return;
            }
        }

        if (dia.Speakers.Students == null)
        {
            EditorGUILayout.LabelField("Add at least one character in the CharacterDatabase.");
            return;
        }

        if (dia.Speakers.Students.Length == 0)
        {
            EditorGUILayout.LabelField("Add at least one character in the CharacterDatabase.");
            return;
        }

        if (dia.Speakers.Students.Length > 0)
        {
            foreach (var stu in dia.Speakers.Students)
            {
                if (stu == null)
                {
                    EditorGUILayout.LabelField("Nullref in CharacterDatabase. Is an element empty?");
                    return;
                }
            }
        }



        EditorStyles.textArea.wordWrap  = true;
        EditorStyles.textField.wordWrap = true;
        GUI.backgroundColor             = dia.Color;

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField(dia.DialogueName, EditorStyles.boldLabel);
        dia.Color = EditorGUILayout.ColorField(dia.Color, GUILayout.Width(50));
        EditorGUILayout.EndHorizontal();


        EditorGUILayout.BeginHorizontal("Box");
        EditorGUILayout.LabelField("Dialogue Nr: ", GUILayout.Width(100));
        GUI.backgroundColor = Color.white;
        dia.DialogueName    = GUILayout.TextField(dia.DialogueName, GUILayout.Width(40));



        if (GUILayout.Button("Update", GUILayout.Width(80)))
        {
            var path = AssetDatabase.GetAssetPath(dia);
            var flds = path.Split('/');
            var nm   = flds[flds.Length - 2];



            string tx = "";
            if (dia.Lines.Count > 0)
            {
                tx = dia.Lines[0].Text.Substring(0, dia.Lines[0].Text.Length > 29? 30 : dia.Lines[0].Text.Length);
                tx = tx.Replace('?', ' ');
            }

            string fileName = nm + "_" + dia.DialogueName + "_" + tx;

            AssetDatabase.RenameAsset(AssetDatabase.GetAssetPath(dia), fileName);
            Debug.Log(fileName);
            Debug.Log(AssetDatabase.GetAssetPath(dia));
        }
        GUILayout.Space(Screen.width - 370);
        GUI.backgroundColor = dia.Color;

        EditorGUILayout.EndHorizontal();

        //dia.GetCharacters();

        if (dia.Lines != null)
        {
            for (int i = 0; i < dia.Lines.Count; i++)
            {
                EditorGUILayout.BeginHorizontal("Box");

                EditorGUILayout.BeginVertical(GUILayout.Width(120));
                GUI.backgroundColor        = dia.Color;
                dia.Lines[i].SpeakerNumber = EditorGUILayout.IntPopup(dia.Lines[i].SpeakerNumber, dia.GetCharacterNames(), dia.getNamesIntValues(), GUILayout.Width(130));
                dia.Lines[i].Speaker       = dia.Speakers.Students[dia.Lines[i].SpeakerNumber];


                if (dia.Lines[i].SFX != null)
                {
                    for (var j = 0; j < dia.Lines[i].SFX.Count; j++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        EditorGUI.BeginDisabledGroup(dia.Lines[i].SFX[j] == null);

                        if (GUILayout.Button(">", GUILayout.Width(20)))
                        {
                            PublicAudioUtil.PlayClip(dia.Lines[i].SFX[j]);
                        }

                        EditorGUI.EndDisabledGroup();

                        dia.Lines[i].SFX[j] =
                            (AudioClip)EditorGUILayout.ObjectField(dia.Lines[i].SFX[j], typeof(AudioClip), false,
                                                                   GUILayout.Width(76));



                        if (GUILayout.Button("x", GUILayout.Width(20)))
                        {
                            dia.Lines[i].SFX.Remove(dia.Lines[i].SFX[j]);
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }

                if (GUILayout.Button("Add Sound"))
                {
                    dia.Lines[i].SFX.Add(_sfx);
                }

                if (dia.Lines[i].Events != null)
                {
                    for (var j = 0; j < dia.Lines[i].Events.Count; j++)
                    {
                        EditorGUILayout.BeginHorizontal();
                        dia.Lines[i].Events[j] = (SceneEvent)EditorGUILayout.ObjectField(dia.Lines[i].Events[j], typeof(SceneEvent), false, GUILayout.Width(100));


                        if (GUILayout.Button("x", GUILayout.Width(20)))
                        {
                            dia.Lines[i].Events.Remove(dia.Lines[i].Events[j]);
                        }
                        EditorGUILayout.EndHorizontal();
                    }
                }

                if (GUILayout.Button("Add Event"))
                {
                    dia.Lines[i].Events.Add(CreateInstance <SceneEvent>());
                }



                GUILayout.BeginHorizontal();
                GUILayout.Label("Automatic", GUILayout.Width(60));
                dia.Lines[i].AutomaticLine = EditorGUILayout.Toggle(dia.Lines[i].AutomaticLine);
                GUILayout.EndHorizontal();
                if (dia.Lines[i].AutomaticLine)
                {
                    EditorGUILayout.BeginHorizontal();

                    dia.Lines[i].TimeToNextLine = EditorGUILayout.FloatField(dia.Lines[i].TimeToNextLine, GUILayout.Width(60));

                    EditorGUILayout.EndHorizontal();
                }


                EditorGUILayout.EndVertical();


                EditorGUILayout.BeginVertical("Box");

                var exprs = dia.Lines[i].Speaker.Expressions.Count;

                if (exprs < dia.Lines[i].ExpressionNumber)
                {
                    dia.Lines[i].ExpressionNumber = 0;
                }



                if (dia.Lines[i].Expression != null)
                {
                    GUIStyle expr = new GUIStyle();
                    if (dia.Lines[i].ExpressionNumber > 0)
                    {
                        expr.normal.background = dia.Lines[i].Expression.Sprite
                                    ? dia.Lines[i].Expression.Sprite
                                    : BaseExpression;
                    }
                    EditorGUILayout.LabelField(GUIContent.none, expr, GUILayout.Width(100), GUILayout.Height(100));
                }



                var expressionNames = new string[dia.Lines[i].Speaker.Expressions.Count + 1];
                expressionNames[0] = "<No change>";

                for (int j = 1; j < dia.Lines[i].Speaker.Expressions.Count + 1; j++)
                {
                    expressionNames[j] = dia.Lines[i].Speaker.Expressions[j - 1].Name;
                }

                dia.Lines[i].ExpressionNumber = EditorGUILayout.IntPopup(dia.Lines[i].ExpressionNumber,
                                                                         expressionNames, dia.getExpressionIntValues(dia.Lines[i].Speaker), GUILayout.Width(100));


                if (dia.Lines[i].ExpressionNumber > 0)
                {
                    dia.Lines[i].Expression = dia.Lines[i].Speaker.Expressions[dia.Lines[i].ExpressionNumber - 1];
                }
                else
                {
                }


                EditorGUILayout.EndVertical();


                GUI.backgroundColor = Color.white;
                dia.Lines[i].Text   = EditorGUILayout.TextArea(dia.Lines[i].Text, GUILayout.Height(125), GUILayout.Width(Screen.width - 310));

                GUI.backgroundColor = dia.Color;

                if (i > 0)
                {
                    if (GUILayout.Button("-", GUILayout.Width(20)) && i > 0)
                    {
                        dia.Lines.Remove(dia.Lines[i]);
                    }
                }
                else
                {
                    GUILayout.Space(24);
                }



                EditorGUILayout.EndHorizontal();
            }
        }



        if (dia.Choices != null)
        {
            for (int i = 0; i < dia.Choices.Count; i++)
            {
                //string[] names = new string[diaCol.Dialogues.Count];

                GUILayout.BeginHorizontal("Box");
                //GUILayout.FlexibleSpace();
                GUILayout.Label("Choice " + (i + 1).ToString(), GUILayout.Width(80));

                dia.Choices[i].ChoiceText = EditorGUILayout.TextField(dia.Choices[i].ChoiceText, GUILayout.Width(Screen.width - 343));

                if (dia.Choices[i].NextDialogue == null)
                {
                    GUI.backgroundColor = Color.cyan;
                }
                dia.Choices[i].NextDialogue =
                    (Dialogue)EditorGUILayout.ObjectField(dia.Choices[i].NextDialogue, typeof(Dialogue), true,
                                                          GUILayout.Width(100));

                GUI.backgroundColor = dia.Color;


                if (dia.Choices[i].NextDialogue != null)
                {
                    string[] nextDialogueTexts = new string[dia.Choices[i].NextDialogue.Lines.Count];
                    int[]    optValues         = new int[dia.Choices[i].NextDialogue.Lines.Count];

                    for (int j = 0; j < dia.Choices[i].NextDialogue.Lines.Count; j++)
                    {
                        nextDialogueTexts[j] = dia.Choices[i].NextDialogue.Lines[j].Text;
                        optValues[j]         = value;
                        value++;
                    }

                    value = 0;


                    GUI.backgroundColor = Color.white;


                    GUI.backgroundColor = dia.Choices[i].NextDialogue.Color;


                    dia.Choices[i].NextIndexInDialogue = EditorGUILayout.IntPopup(dia.Choices[i].NextIndexInDialogue, nextDialogueTexts, optValues, GUILayout.Width(100));
                }
                GUILayout.EndHorizontal();



                //int[] optValues = new int[diaCol.Dialogues.Count];
            }

            //dia.choices[i].nextDialogue = EditorGUILayout.TextField(dia.choices[i].nextDialogue, GUILayout.Width(100));

            GUI.backgroundColor = dia.Color;

            if (dia.Choices.Count > 0)
            {
                if (GUILayout.Button("Remove Choices", GUILayout.Width(130)))
                {
                    dia.Choices.Clear();
                }
            }
        }

        if (dia.Variable.Enabled)
        {
            GUILayout.BeginVertical("Box", GUILayout.Width(400));
            GUILayout.BeginHorizontal();
            GUI.backgroundColor = dia.Color;
            EditorGUILayout.LabelField("If ", GUILayout.Width(80));



            dia.Variable.BoolVariable =
                (BoolWithEvent)EditorGUILayout.ObjectField(dia.Variable.BoolVariable, typeof(BoolWithEvent), false, GUILayout.Width(200));

            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("True: ", GUILayout.Width(80));

            if (dia.Variable.NextDialogueTrue == null)
            {
                GUI.backgroundColor = Color.cyan;
            }
            dia.Variable.NextDialogueTrue = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueTrue, typeof(Dialogue), false, GUILayout.Width(200));

            GUI.backgroundColor = dia.Color;

            if (dia.Variable.NextDialogueTrue != null)
            {
                string[] nextDialogueTextsTrue = new string[dia.Variable.NextDialogueTrue.Lines.Count];
                int[]    optValues2            = new int[dia.Variable.NextDialogueTrue.Lines.Count];

                for (int j = 0; j < dia.Variable.NextDialogueTrue.Lines.Count; j++)
                {
                    nextDialogueTextsTrue[j] = dia.Variable.NextDialogueTrue.Lines[j].Text;
                    optValues2[j]            = value;
                    value++;
                }


                dia.Variable.NextIndexInDialogueTrue = EditorGUILayout.IntPopup(
                    dia.Variable.NextIndexInDialogueTrue, nextDialogueTextsTrue, optValues2, GUILayout.Width(100));
            }

            value = 0;

            EditorGUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("False: ", GUILayout.Width(80));

            if (dia.Variable.NextDialogueFalse == null)
            {
                GUI.backgroundColor = Color.cyan;
            }

            dia.Variable.NextDialogueFalse = (Dialogue)EditorGUILayout.ObjectField(dia.Variable.NextDialogueFalse, typeof(Dialogue), false, GUILayout.Width(200));

            GUI.backgroundColor = dia.Color;

            if (dia.Variable.NextDialogueFalse != null)
            {
                string[] nextDialogueTextsFalse = new string[dia.Variable.NextDialogueFalse.Lines.Count];
                int[]    optValues3             = new int[dia.Variable.NextDialogueFalse.Lines.Count];

                for (int j = 0; j < dia.Variable.NextDialogueFalse.Lines.Count; j++)
                {
                    nextDialogueTextsFalse[j] = dia.Variable.NextDialogueFalse.Lines[j].Text;
                    optValues3[j]             = value;
                    value++;
                }

                dia.Variable.NextIndexInDialogueFalse = EditorGUILayout.IntPopup(
                    dia.Variable.NextIndexInDialogueFalse, nextDialogueTextsFalse, optValues3, GUILayout.Width(100));
            }

            value = 0;

            GUILayout.EndHorizontal();


            GUI.backgroundColor = dia.Color;


            if (GUILayout.Button("Remove Condition", GUILayout.Width(130)))
            {
                dia.Variable.BoolVariable = null;
                dia.Variable.Enabled      = false;
            }

            GUILayout.EndVertical();
        }



        if (dia.DirectTo.Enabled)
        {
            GUILayout.BeginVertical("Box", GUILayout.Width(400));
            GUILayout.BeginHorizontal();

            GUILayout.Label("Next Dialogue:", GUILayout.Width(90));

            if (dia.DirectTo.NewDialogue == null)
            {
                GUI.backgroundColor = Color.cyan;
            }


            dia.DirectTo.NewDialogue =
                (Dialogue)EditorGUILayout.ObjectField(dia.DirectTo.NewDialogue, typeof(Dialogue), false,
                                                      GUILayout.Width(180));
            GUI.backgroundColor = dia.Color;

            if (dia.DirectTo.NewDialogue != null)
            {
                string[] nextDialogueTexts = new string[dia.DirectTo.NewDialogue.Lines.Count];
                int[]    optValues         = new int[dia.DirectTo.NewDialogue.Lines.Count];

                for (int j = 0; j < dia.DirectTo.NewDialogue.Lines.Count; j++)
                {
                    nextDialogueTexts[j] = dia.DirectTo.NewDialogue.Lines[j].Text;
                    optValues[j]         = value;
                    value++;
                }


                dia.DirectTo.NewDialogueIndex = EditorGUILayout.IntPopup(
                    dia.DirectTo.NewDialogueIndex, nextDialogueTexts, optValues, GUILayout.Width(100));
            }

            value = 0;


            GUILayout.EndHorizontal();

            if (GUILayout.Button("Remove", GUILayout.Width(80)))
            {
                dia.DirectTo.NewDialogue = null;
                dia.DirectTo.Enabled     = false;
            }

            GUILayout.EndVertical();
        }



        GUILayout.BeginHorizontal();

        if (dia.Choices.Count == 0 && !dia.Variable.Enabled && !dia.DirectTo.Enabled)
        {
            if (dia.Speakers == null)
            {
                if (Resources.Load <CharacterDatabase>("Characters/CharacterDatabase"))
                {
                    dia.Speakers = Resources.Load <CharacterDatabase>("Characters/CharacterDatabase");
                }
                else
                {
                    GUILayout.BeginVertical();
                    EditorGUILayout.LabelField("CharacterDatabase is not set.");
                    EditorGUILayout.LabelField("Create a CharacterDatabase in Resources/Characters/CharacterDatabase.asset");
                    GUILayout.EndVertical();
                }
            }
            else
            {
                if (GUILayout.Button("New Line", GUILayout.Width(100)))
                {
                    dia.Lines.Add(new Line());
                }
            }



            if (dia.Lines.Count > 0)
            {
                if (GUILayout.Button("Add Choice", GUILayout.Width(100)))
                {
                    dia.Choices.Add(new Choice());
                    dia.Choices.Add(new Choice());
                    dia.Choices.Add(new Choice());
                }
            }

            if (dia.Lines.Count > 0)
            {
                if (GUILayout.Button("Add Condition", GUILayout.Width(100)))
                {
                    dia.Variable.Enabled = true;
                }

                if (GUILayout.Button("Direct to...", GUILayout.Width(100)))
                {
                    dia.DirectTo.Enabled = true;
                }
            }
        }

        GUILayout.EndHorizontal();



        GUILayout.Space(30);


        EditorUtility.SetDirty(dia);
    }