// PUBLIC METHODS: ------------------------------------------------------------------------ public static Quests GetQuestsRoot() { string path = QuestUtilities.GetQuestsRootPath(); Quests quests = AssetDatabase.LoadAssetAtPath <Quests>(path); if (quests == null) { quests = CreateAsset <Quests>( ROOT_PATH, ROOT_NAME ); } return(quests); }
public T CreateItem <T>() where T : IQuest { T instance = QuestUtilities.CreateIQuest <T>(); instance.children = new List <IQuest>(); this.questsInstances.Add(instance.GetInstanceID(), instance); int index = this.spList.arraySize; this.spList.InsertArrayElementAtIndex(index); this.spList.GetArrayElementAtIndex(index).objectReferenceValue = instance; serializedObject.ApplyModifiedPropertiesWithoutUndo(); serializedObject.Update(); return(instance); }
// INITIALIZE: ---------------------------------------------------------------------------- private void OnEnable() { if (target == null || serializedObject == null) { return; } this.databaseQuests = (DatabaseQuests)this.target; this.spQuests = serializedObject.FindProperty(PROP_QUESTS); this.spList = serializedObject.FindProperty(PROP_LIST); this.spSettings = serializedObject.FindProperty(PROP_SETTINGS); if (this.spQuests.objectReferenceValue == null) { this.spQuests.objectReferenceValue = QuestUtilities.GetQuestsRoot(); serializedObject.ApplyModifiedPropertiesWithoutUndo(); serializedObject.Update(); } Quests quests = (Quests)this.spQuests.objectReferenceValue; this.questsInstances = new Dictionary <int, IQuest>(); this.questsInstances.Add(QuestsTreeView.ROOT_ID, quests); this.editorRoot = IQuestEditor.CreateEditor(quests); this.questsEditors = new Dictionary <int, IQuestEditor>(); this.questsEditors.Add(quests.GetInstanceID(), this.editorRoot); for (int i = 0; i < this.databaseQuests.list.Count; ++i) { IQuest item = this.databaseQuests.list[i]; if (!this.questsInstances.ContainsKey(item.GetInstanceID())) { this.questsInstances.Add(item.GetInstanceID(), item); } IQuestEditor editor = IQuestEditor.CreateEditor(item); this.questsEditors.Add(item.GetInstanceID(), editor); } this.questsTree = new QuestsTreeView(this.databaseQuests.questsTreeState, this); this.searchField = new SearchField(); this.searchField.downOrUpArrowKeyPressed += this.questsTree.SetFocusAndEnsureSelectedItem; }
public static T CreateIQuest <T>() where T : IQuest { T iquest = ScriptableObject.CreateInstance <T>(); string uniqueID = Guid.NewGuid().ToString("N"); iquest.name = uniqueID; iquest.uniqueID = uniqueID; iquest.internalName = QuestUtilities.GetInternalName(); iquest.reactions = CreateReaction( string.Format(REACTIONS_NAME, iquest.name), REACTIONS_PATH ); Quests root = QuestUtilities.GetQuestsRoot(); AssetDatabase.AddObjectToAsset(iquest, root); AssetDatabase.SaveAssets(); AssetDatabase.ImportAsset(Path.Combine(ROOT_PATH, ROOT_NAME)); return(iquest); }
private void PaintQuestToolbar() { bool hasSelection = this.questsTree.HasSelection(); int selectionCount = (hasSelection ? this.questsTree.GetSelection().Count : 0); bool selectionRoot = ( selectionCount > 0 && this.questsTree.GetSelection().Contains(QuestsTreeView.ROOT_ID) ); System.Type selectionType = null; if (selectionCount == 1) { int instanceID = this.questsTree.GetSelection()[0]; IQuest instance = this.InstanceIDToObject(instanceID); selectionType = (instance != null ? instance.GetType() : null); } QuestToolbarUtils.ContentStyle contentStyle = QuestToolbarUtils.ContentStyle.IconOnly; GUIContent gcQuest = QuestToolbarUtils.GetContent(QuestToolbarUtils.ContentType.Quest, contentStyle); GUIContent gcTask = QuestToolbarUtils.GetContent(QuestToolbarUtils.ContentType.Task, contentStyle); GUIContent gcDelete = QuestToolbarUtils.GetContent(QuestToolbarUtils.ContentType.Delete, contentStyle); EditorGUILayout.BeginHorizontal(); GUILayoutOption height = GUILayout.Height(18f); EditorGUI.BeginDisabledGroup(!QuestEditor.CanAddElement(selectionCount, selectionType)); if (GUILayout.Button(gcQuest, this.styleBtnLeft, height)) { QuestEditor.AddElement(this); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(!TaskEditor.CanAddElement(selectionCount, selectionType)); if (GUILayout.Button(gcTask, this.styleBtnMid, height)) { TaskEditor.AddElement(this); } EditorGUI.EndDisabledGroup(); EditorGUI.BeginDisabledGroup(!hasSelection || selectionRoot); if (GUILayout.Button(gcDelete, this.styleBtnRight, height) && this.questsTree.HasSelection()) { List <int> items = new List <int>(this.questsTree.GetSelection()); this.DeleteItems(items); AssetDatabase.ImportAsset(QuestUtilities.GetQuestsRootPath()); this.questsTree.Reload(); } EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); this.questsTree.searchString = this.searchField.OnGUI(this.questsTree.searchString); EditorGUILayout.Space(); if (GUILayout.Button(SETTINGS, this.styleBtn)) { QuestsSettingsWindow settings = new QuestsSettingsWindow(this.spSettings); PopupWindow.Show(this.settingsRect, settings); } if (UnityEngine.Event.current.type == EventType.Repaint) { this.settingsRect = GUILayoutUtility.GetLastRect(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); }