public static void AddElement(DialogueEditor dialogueEditor) { List <int> selections = new List <int> { dialogueEditor.editorRoot.target.GetInstanceID() }; List <int> nextSelections = new List <int>(); if (dialogueEditor.dialogueTree.HasSelection()) { selections = new List <int>(dialogueEditor.dialogueTree.GetSelection()); } for (int i = 0; i < selections.Count; ++i) { int selectionID = selections[i]; UnityEngine.Object instance = dialogueEditor.InstanceIDToObject(selectionID); dialogueEditor.dialogueTree.SetExpandedRecursive(selectionID, true); IDialogueItem itemInstance = dialogueEditor.CreateDialogueItem <DialogueItemChoice>(); nextSelections.Add(itemInstance.GetInstanceID()); if (instance != null && instance.GetType() == typeof(DialogueItemChoiceGroup)) { dialogueEditor.itemsEditors[selectionID].AddChild( itemInstance, (IDialogueItem)instance, dialogueEditor.targetDialogue ); } else if (instance != null && instance.GetType() == typeof(DialogueItemChoice)) { dialogueEditor.itemsEditors[selectionID].AddSibling( itemInstance, (IDialogueItem)instance, dialogueEditor.targetDialogue, selectionID ); } else { Debug.LogError("Forbidden or Unknown type: " + instance.GetType()); } dialogueEditor.itemsEditors.Add( itemInstance.GetInstanceID(), IDialogueItemEditor.CreateEditor(itemInstance) ); dialogueEditor.dialogueTree.Reload(); dialogueEditor.serializedObject.ApplyModifiedPropertiesWithoutUndo(); dialogueEditor.serializedObject.Update(); } dialogueEditor.dialogueTree.SetFocusAndEnsureSelectedItem(); dialogueEditor.dialogueTree.SetSelection(nextSelections, TreeViewSelectionOptions.RevealAndFrame); }
// INITIALIZE METHODS: -------------------------------------------------------------------- private void OnEnable() { if (target == null || serializedObject == null) { return; } this.targetDialogue = (Dialogue)target; this.spDialogue = serializedObject.FindProperty(PROP_DIALOGUE); this.spItemInstances = serializedObject.FindProperty(PROP_ITEM_INSTANCES); this.itemInstances = new Dictionary <int, Object>(); if (this.spDialogue.objectReferenceValue == null) { DialogueItemRoot root = this.CreateDialogueItem <DialogueItemRoot>(); this.spDialogue.objectReferenceValue = root; serializedObject.ApplyModifiedProperties(); serializedObject.Update(); SerializedObject rootSO = new SerializedObject(root); rootSO.FindProperty(PROP_DIALOGUE).objectReferenceValue = this.targetDialogue; rootSO.ApplyModifiedProperties(); rootSO.Update(); } this.itemInstances.Add(DialogueTreeView.ROOT_ID, this.spDialogue.objectReferenceValue); this.itemsEditors = new Dictionary <int, IDialogueItemEditor>(); Object[] items = this.targetDialogue.itemInstances; for (int i = 0; i < items.Length; ++i) { if (!this.itemInstances.ContainsKey(items[i].GetInstanceID())) { this.itemInstances.Add(items[i].GetInstanceID(), items[i]); } IDialogueItemEditor editor = IDialogueItemEditor.CreateEditor(items[i]); this.itemsEditors.Add(items[i].GetInstanceID(), editor); if (items[i].GetInstanceID() == this.targetDialogue.dialogue.GetInstanceID()) { this.editorRoot = editor; } } this.dialogueTree = new DialogueTreeView(this.targetDialogue.dialogueTreeState, this); this.inspectorResizing = false; this.textureResize = AssetDatabase.LoadAssetAtPath <Texture2D>(TEXTURE_RESIZE_PATH); this.searchField = new SearchField(); this.searchField.downOrUpArrowKeyPressed += this.dialogueTree.SetFocusAndEnsureSelectedItem; this.spOverrideConfig = this.serializedObject.FindProperty("overrideConfig"); this.spConfig = this.serializedObject.FindProperty("config"); }