public List <IQuest> GetSubTasks(IQuest parent, int statusFilter) { List <IQuest> subTasksList = new List <IQuest>(); for (int i = 0; i < parent.children.Count; ++i) { IQuest child = this.GetQuest(parent.children[i].uniqueID); if (((1 << (int)child.status) & statusFilter) != 0) { subTasksList.Add(child); } subTasksList.AddRange(this.GetSubTasks(child, statusFilter)); } return(subTasksList); }
// 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 void AddSibling(IQuest item, IQuest sibling, int siblingID = -1) { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); if (sibling == null || sibling.parent == null) { Debug.LogError("Adding null parent or sibling"); return; } SerializedObject itemSerializedObject = new SerializedObject(item); itemSerializedObject.FindProperty(PROP_PARENT).objectReferenceValue = sibling.parent; itemSerializedObject.ApplyModifiedProperties(); itemSerializedObject.Update(); SerializedObject soParent = new SerializedObject(sibling.parent); SerializedProperty spParentChildren = soParent.FindProperty(PROP_CHILDREN); int index = spParentChildren.arraySize; if (siblingID != -1) { int childrenCount = item.parent.children.Count; for (int i = 0; i < childrenCount; ++i) { if (item.parent.children[i].GetInstanceID() == siblingID) { index = i + 1; break; } } } spParentChildren.InsertArrayElementAtIndex(index); spParentChildren.GetArrayElementAtIndex(index).objectReferenceValue = item; soParent.ApplyModifiedProperties(); soParent.Update(); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); }
public List <IQuest> GetSubTasks(IQuest parent, int statusFilter, bool includeHidden = false) { List <IQuest> subTasksList = new List <IQuest>(); for (int i = 0; i < parent.children.Count; ++i) { IQuest child = this.GetQuest(parent.children[i].uniqueID); bool visible = !child.isHidden || includeHidden; bool filter = ((1 << (int)child.status) & statusFilter) != 0; if (visible && filter) { subTasksList.Add(child); } subTasksList.AddRange(this.GetSubTasks(child, statusFilter, includeHidden)); } return(subTasksList); }
// INITIALIZERS: -------------------------------------------------------------------------- protected void OnEnableBase() { this.iquest = (IQuest)this.target; this.spChildren = serializedObject.FindProperty(PROP_CHILDREN); this.spParent = serializedObject.FindProperty(PROP_PARENT); this.spInternalName = serializedObject.FindProperty(PROP_INTERNAL_NAME); this.spTitle = serializedObject.FindProperty(PROP_TITLE); this.spDescription = serializedObject.FindProperty(PROP_DESCR); this.spSprite = serializedObject.FindProperty(PROP_SPRITE); this.spStatus = serializedObject.FindProperty(PROP_STATUS); this.spType = serializedObject.FindProperty(PROP_TYPE); this.spProgress = serializedObject.FindProperty(PROP_PROGRESS); UnityEngine.Object reactions = serializedObject.FindProperty(PROP_REACTION).objectReferenceValue; this.editorQuestReactions = (QuestReactionEditor)Editor.CreateEditor(reactions); }
private void LoadQuests() { DatabaseQuests database = DatabaseQuests.Load(); this.collection = new Dictionary <string, IQuest>(); this.quests = new Dictionary <string, Quest>(); int questsCount = database.list.Count; for (int i = 0; i < questsCount; ++i) { IQuest reference = database.list[i]; IQuest instance = Instantiate(reference); this.collection.Add(instance.uniqueID, instance); if (instance.IsQuestRoot()) { this.quests.Add(instance.uniqueID, (Quest)instance); } } }
public override Texture2D GetIcon() { if (Application.isPlaying) { if (RUNTIME_ICONS == null) { this.InitializeIcons(ref RUNTIME_ICONS, "Quest"); } IQuest quest = QuestsManager.Instance.GetQuest(this.target.name); if (quest != null) { return(RUNTIME_ICONS[(int)quest.status]); } } if (TEXTURE_ICON == null) { TEXTURE_ICON = AssetDatabase.LoadAssetAtPath <Texture2D>(TEXTURE_PATH); } return(TEXTURE_ICON); }
public void AddChild(IQuest item, IQuest parent) { serializedObject.ApplyModifiedProperties(); serializedObject.Update(); if (parent == null) { Debug.LogError("Adding null parent"); return; } SerializedProperty children = serializedObject.FindProperty(PROP_CHILDREN); SerializedObject itemSerializedObject = new SerializedObject(item); itemSerializedObject.FindProperty(PROP_PARENT).objectReferenceValue = parent; itemSerializedObject.ApplyModifiedProperties(); itemSerializedObject.Update(); children.AddToObjectArray <IQuest>(item); serializedObject.ApplyModifiedProperties(); serializedObject.Update(); }
public override bool CanHaveParent(IQuest parent) { return(parent.GetType() == typeof(Quests)); }
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(); }
public virtual bool CanHaveParent(IQuest parent) { return(true); }
public static IQuestEditor CreateEditor(IQuest instance) { return((IQuestEditor)Editor.CreateEditor(instance)); }