public override void OnInspectorGUI()
 {
     var engine = target as ConversationEngine;
     if (!engine) return;
     var dialogs = serializedObject.FindProperty("_savedDialogs");
     if (dialogs == null)
     {
         EditorGUILayout.HelpBox("Property not found!", MessageType.Error);
         return;
     }
     EditorGUI.BeginChangeCheck();
     EditorGUILayout.BeginHorizontal();
     EditorGUILayout.PropertyField(dialogs, new GUIContent("Dialogs"), false);
     if (EditorGUI.EndChangeCheck())
     {
         serializedObject.ApplyModifiedProperties();
     }
     if (dialogs.objectReferenceValue != null && GUILayout.Button("Edit", EditorStyles.miniButton, GUILayout.ExpandWidth(false)))
     {
         DialogEditor.OpenEdit(dialogs.objectReferenceValue as DialogCollection);
     }
     EditorGUILayout.EndHorizontal();
     engine.Fallback = (LocalizationFallback) EditorGUILayout.EnumPopup("Fallback:", engine.Fallback);
     if (engine.Fallback == LocalizationFallback.Language)
     {
         engine.FallbackLanguage = (DialogLanguage) EditorGUILayout.EnumPopup("Fallback language:", engine.FallbackLanguage);
     }
     GUILayout.BeginHorizontal();
     GUILayout.Label(
         new GUIContent("EndConversation fallback",
             "if no dialogoptions are available because of requirements for example, inject a default one, to end the conversation"), GUILayout.Width(150));
     engine.UseEndConversationfallback = EditorGUILayout.Toggle(engine.UseEndConversationfallback, GUILayout.Width(15));
     if (engine.UseEndConversationfallback)
     {
         var fInfo = typeof (ConversationEngine).GetField("_endConversationFallback", BindingFlags.Instance | BindingFlags.NonPublic);
         if (fInfo == null)
         {
             EditorGUILayout.HelpBox("Property not found", MessageType.Error);
         }
         else
         {
             var fallbackString = fInfo.GetValue(engine) as LocalizedString;
             if (GUILayout.Button("Edit text", EditorStyles.miniButton))
             {
                 _activeStringEditor = new LocalizedStringEditor(fallbackString, "Fallback option text", false);
             }
         }
     }
     GUILayout.EndHorizontal();
     if (_activeStringEditor == null || _activeStringEditor.DrawGui()) return;
     _activeStringEditor.EndEdit();
     _activeStringEditor = null;
 }
Beispiel #2
0
 public void Cleanup()
 {
     if (SourceCollection != null)
     {
         EditorUtility.SetDirty(SourceCollection);
         AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(SourceCollection));
     }
     if (_activeStringEditor != null)
     {
         _activeStringEditor.EndEdit();
         _activeStringEditor = null;
     }
 }
Beispiel #3
0
 // ReSharper disable once UnusedMember.Local
 void OnGUI()
 {
     if (SourceCollection == null)
     {
         return;
     }
     if (_activeStringEditor != null)
     {
         GUI.enabled = false;
     }
     else
     {
         GUI.enabled = _activeOptionNode == null && _activeSubDialog == null;
     }
     var left = new Rect(0, 0, LeftColumnWidth, position.height);
     var prev = GUI.color;
     GUI.color = _inspectorColor;
     GUI.BeginGroup(left, EditorStyles.textField);
     GUI.color = prev;
     DisplayDialogTools(left);
     GUI.EndGroup();
     DisplayDialogEditor(new Rect(LeftColumnWidth, 0, position.width - LeftColumnWidth, position.height));
     if (_activeOptionNode != null)
     {
         GUI.enabled = true & _activeStringEditor == null;
         DisplayOptionNodeInspector(new Rect(position.width - RightColumnoverlayWidth, 0, RightColumnoverlayWidth, position.height), _activeOptionNode);
     }
     else if (_activeSubDialog != null)
     {
         GUI.enabled = true & _activeStringEditor == null;
         DisplayDialogNodeInspector(new Rect(position.width - RightColumnoverlayWidth, 0, RightColumnoverlayWidth, position.height), _activeSubDialog);
     }
     if (_activeStringEditor != null)
     {
         GUI.enabled = true;
         if (_activeStringEditor.DrawGui()) return;
         _activeStringEditor.EndEdit();
         _activeStringEditor = null;
     }
 }
Beispiel #4
0
 void DisplayOptionNodeInspector(Rect r, DialogOption dOption)
 {
     var prev = GUI.color;
     GUI.color = _inspectorColor;
     GUILayout.BeginArea(r, EditorStyles.textArea);
     GUI.color = prev;
     GUILayout.Space(5);
     GUILayout.Label("Text", _headerStyle);
     GUILayout.Space(5);
     GUILayout.BeginHorizontal();
     var tText = GetFormattedTitleString(dOption.Text.Description, dOption.Text.GetString);
     GUILayout.Label(tText, _lblStyle, GUILayout.MaxWidth(154));
     if (GUILayout.Button("Edit", _buttonStyle, GUILayout.Width(40)))
     {
         _activeStringEditor = new LocalizedStringEditor(dOption.Text, "Option text");
     }
     GUILayout.EndHorizontal();
     GUILayout.Space(5);
     GUILayout.Label(new GUIContent("Tag", "User data"), _headerStyle);
     GUILayout.Space(5);
     dOption.Tag = GUILayout.TextField(dOption.Tag);
     GUILayout.Space(10);
     GUILayout.Label("Connection", _headerStyle);
     GUILayout.Space(5);
     if (GUILayout.Button("New Sub-Dialog", _buttonStyle))
     {
         var d = CreateInstance<Dialog>();
         d.ID = GetUniqueId();
         AddToAsset(d);
         dOption.NextDialog = d;
         dOption.IsRedirection = false;
         CloseSubInspector();
     }
     GUILayout.Label(new GUIContent("Or link to existing: ", "Use with care, can result in infinite loops!"));
     _scrollbar = GUILayout.BeginScrollView(_scrollbar);
     var ddialogs = new List<Dialog>();
     ddialogs = GetAllDialogsInChain(ddialogs, _activeDialog);
     for (var i = 0; i < ddialogs.Count; i++)
     {
         if (ddialogs[i].Options.Contains(dOption))
         {
             continue;
         }
         var dTitle = GetFormattedTitleString(ddialogs[i].Title.Description, ddialogs[i].Title.GetString);
         if (GUILayout.Button(dTitle, _buttonStyle))
         {
             dOption.NextDialog = ddialogs[i];
             dOption.IsRedirection = true;
             CloseSubInspector();
             break;
         }
     }
     GUILayout.EndScrollView();
     dOption.IgnoreRequirements = GUILayout.Toggle(dOption.IgnoreRequirements, "Ignore Requirements");
     GUILayout.Label("Actions", _headerStyle);
     GUILayout.BeginHorizontal();
     var prevEnabled = GUI.enabled;
     if (dOption.Actions.Count >= 6)
     {
         GUI.enabled = false;
     }
     var index = EditorGUILayout.Popup(0, _usableActionNames.ToArray());
     if (index > 0)
     {
         var tr = CreateInstance(_usableActionTypes[index]) as DialogOptionAction;
         AddToAsset(tr);
         dOption.Actions.Add(tr);
     }
     GUI.enabled = prevEnabled;
     if (GUILayout.Button("Remove all", _buttonStyle))
     {
         for (var i = dOption.Actions.Count; i-- > 0;)
         {
             DestroyImmediate(dOption.Actions[i], true);
             dOption.Actions.RemoveAt(i);
         }
     }
     GUILayout.EndHorizontal();
     _scrollbar2 = GUILayout.BeginScrollView(_scrollbar2);
     for (var i = dOption.Actions.Count; i-- > 0;)
     {
         if (dOption.Actions[i] == null)
         {
             dOption.Actions.RemoveAt(i);
             continue;
         }
         if (!InlineDisplayOptionActionEditor(dOption.Actions[i]))
         {
             DestroyImmediate(dOption.Actions[i], true);
             dOption.Actions.RemoveAt(i);
         }
     }
     GUILayout.EndScrollView();
     if (GUILayout.Button("Close", _buttonStyle))
     {
         CloseSubInspector();
     }
     GUILayout.EndArea();
 }
Beispiel #5
0
 void DisplayDialogNodeInspector(Rect r, Dialog d)
 {
     var prev = GUI.color;
     GUI.color = _inspectorColor;
     GUILayout.BeginArea(r, EditorStyles.textArea);
     GUI.color = prev;
     GUILayout.Space(5);
     GUILayout.Label("Title", _headerStyle);
     GUILayout.Space(5);
     GUILayout.BeginHorizontal();
     var dTitle = GetFormattedTitleString(d.Title.Description, d.Title.GetString);
     GUILayout.Label(dTitle, _lblStyle, GUILayout.MaxWidth(154));
     if (GUILayout.Button("Edit", _buttonStyle, GUILayout.Width(40)))
     {
         _activeStringEditor = new LocalizedStringEditor(d.Title, "Dialog title");
     }
     GUILayout.EndHorizontal();
     GUILayout.Space(5);
     GUILayout.Label("Text" + (d.Texts.Count > 1 ? " (random)" : ""), _headerStyle);
     GUILayout.Space(5);
     for (var i = 0; i < d.Texts.Count; i++)
     {
         var dtextsT = GetFormattedTitleString(d.Texts[i].Description, d.Texts[i].GetString, 22);
         GUILayout.BeginHorizontal();
         GUILayout.Label(dtextsT, _lblStyle, GUILayout.MaxWidth(134));
         if (GUILayout.Button("Edit", _buttonStyle, GUILayout.Width(40)))
         {
             _activeStringEditor = new LocalizedStringEditor(d.Texts[i], "Dialog text");
         }
         if (GUILayout.Button("x", _buttonStyle, GUILayout.Width(20)))
         {
             d.Texts.RemoveAt(i);
         }
         GUILayout.EndHorizontal();
         GUILayout.Space(5);
     }
     if (d.Texts.Count < 3)
     {
         if (GUILayout.Button("Add Variation", _buttonStyle))
         {
             d.Texts.Add(new LocalizedString(""));
         }
         GUILayout.Space(5);
     }
     GUILayout.Label(new GUIContent("Tag", "User data"), _headerStyle);
     GUILayout.Space(5);
     d.Tag = GUILayout.TextField(d.Tag);
     GUILayout.Space(10);
     GUILayout.Label("Requirements", _headerStyle);
     if (d.Requirements.Count > 1)
     {
         d.RequirementMode = (DialogRequirementMode) EditorGUILayout.EnumPopup("Mode:", d.RequirementMode);
     }
     GUILayout.BeginHorizontal();
     var prevEnabled = GUI.enabled;
     if (d.Requirements.Count >= 6)
     {
         GUI.enabled = false;
     }
     var index = EditorGUILayout.Popup(0, _usableRequirementNames.ToArray());
     if (index > 0)
     {
         var bs = CreateInstance(_usableRequirementTypes[index]) as DialogRequirement;
         AddToAsset(bs);
         d.Requirements.Add(bs);
     }
     GUI.enabled = prevEnabled;
     if (GUILayout.Button("Remove all", _buttonStyle))
     {
         for (var i = d.Requirements.Count; i-- > 0;)
         {
             DestroyImmediate(d.Requirements[i], true);
             d.Requirements.RemoveAt(i);
         }
     }
     GUILayout.EndHorizontal();
     _scrollbar = GUILayout.BeginScrollView(_scrollbar, false, true);
     for (var i = d.Requirements.Count; i-- > 0;)
     {
         if (d.Requirements[i] == null)
         {
             d.Requirements.RemoveAt(i);
             continue;
         }
         if (!DrawInlineRequirement(d.Requirements[i]))
         {
             DestroyImmediate(d.Requirements[i], true);
             d.Requirements.RemoveAt(i);
         }
     }
     GUILayout.EndScrollView();
     if (GUILayout.Button("Close", _buttonStyle))
     {
         CloseSubInspector();
     }
     GUILayout.EndArea();
 }
Beispiel #6
0
 void CloseSubInspector()
 {
     _activeSubDialog = null;
     _activeOptionNode = null;
     _activeStringEditor = null;
 }