Esempio n. 1
0
        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();
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        // 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);
        }
Esempio n. 6
0
        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);
                }
            }
        }
Esempio n. 7
0
        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();
        }
Esempio n. 9
0
 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));
 }