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; }
public void Cleanup() { if (SourceCollection != null) { EditorUtility.SetDirty(SourceCollection); AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(SourceCollection)); } if (_activeStringEditor != null) { _activeStringEditor.EndEdit(); _activeStringEditor = null; } }
// 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; } }
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(); }
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(); }
void CloseSubInspector() { _activeSubDialog = null; _activeOptionNode = null; _activeStringEditor = null; }