Ejemplo n.º 1
0
 private void AddItemCreated()
 {
     AddItem(addItem);
     addItem       = null;
     inAddItem     = false;
     addItemDrawer = null;
 }
        private void DrawAddItem()
        {
            GUILayout.BeginVertical("box");
            if (addItem != null)
            {
                if (addItemDrawer == null || addItemDrawer.item == null || addItemDrawer.item != addItem)
                {
                    addItemDrawer = new vItemDrawer(addItem);
                }
                bool isValid = true;
                if (addItemDrawer != null)
                {
                    GUILayout.Box("Create Item Window");
                    addItemDrawer.DrawItem(ref itemList.items, false, true);
                }

                if (string.IsNullOrEmpty(addItem.name))
                {
                    isValid = false;
                    EditorGUILayout.HelpBox("This item name cant be null or empty,please type a name", MessageType.Error);
                }

                if (itemList.items.FindAll(item => item.name.Equals(addItemDrawer.item.name)).Count > 0)
                {
                    isValid = false;
                    EditorGUILayout.HelpBox("This item name already exists", MessageType.Error);
                }
                GUILayout.BeginHorizontal("box", GUILayout.ExpandWidth(false));

                if (isValid && GUILayout.Button("Create"))
                {
                    AssetDatabase.AddObjectToAsset(addItem, AssetDatabase.GetAssetPath(itemList));
                    addItem.hideFlags = HideFlags.HideInHierarchy;
                    addItem.id        = GetUniqueID();
                    itemList.items.Add(addItem);
                    OrderByID();
                    addItem       = null;
                    inAddItem     = false;
                    addItemDrawer = null;
                    serializedObject.ApplyModifiedProperties();
                    EditorUtility.SetDirty(itemList);
                    AssetDatabase.SaveAssets();
                }

                if (GUILayout.Button("Cancel"))
                {
                    addItem       = null;
                    inAddItem     = false;
                    addItemDrawer = null;
                    serializedObject.ApplyModifiedProperties();
                    EditorUtility.SetDirty(itemList);
                }
                GUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.HelpBox("Error", MessageType.Error);
            }
            GUILayout.EndVertical();
        }
Ejemplo n.º 3
0
        protected virtual void DrawAddItem()
        {
            GUILayout.BeginVertical("box");

            if (addItem != null)
            {
                addItemScroolView = EditorGUILayout.BeginScrollView(addItemScroolView, false, false);
                if (addItemDrawer == null || addItemDrawer.item == null || addItemDrawer.item != addItem)
                {
                    addItemDrawer = new vItemDrawer(addItem);
                }
                bool isValid = true;
                if (addItemDrawer != null)
                {
                    GUILayout.Box("Create Item Window");
                    addItemDrawer.DrawItem(ref itemList.items, false, true);
                }

                if (string.IsNullOrEmpty(addItem.name))
                {
                    isValid = false;
                    EditorGUILayout.HelpBox("This item name cant be null or empty,please type a name", MessageType.Error);
                }

                if (itemList.items.FindAll(item => item.name.Equals(addItemDrawer.item.name)).Count > 0)
                {
                    isValid = false;
                    EditorGUILayout.HelpBox("This item name already exists", MessageType.Error);
                }
                EditorGUILayout.EndScrollView();
                GUILayout.BeginHorizontal("box", GUILayout.ExpandWidth(false));

                if (isValid && GUILayout.Button("Create"))
                {
                    AddItemCreated();
                }

                if (GUILayout.Button("Cancel"))
                {
                    addItem       = null;
                    inAddItem     = false;
                    addItemDrawer = null;
                    serializedObject.ApplyModifiedProperties();
                    EditorUtility.SetDirty(itemList);
                }
                GUILayout.EndHorizontal();
            }
            else
            {
                EditorGUILayout.HelpBox("Error", MessageType.Error);
            }

            GUILayout.EndVertical();
        }
Ejemplo n.º 4
0
 void DuplicateItem(vItem targetItem)
 {
     addItem = Instantiate(targetItem);
     AssetDatabase.AddObjectToAsset(addItem, AssetDatabase.GetAssetPath(itemList));
     addItem.hideFlags = HideFlags.HideInHierarchy;
     addItem.id        = GetUniqueID();
     itemList.items.Add(addItem);
     OrderByID();
     addItem       = null;
     inAddItem     = false;
     addItemDrawer = null;
     serializedObject.ApplyModifiedProperties();
     EditorUtility.SetDirty(itemList);
     AssetDatabase.SaveAssets();
 }
Ejemplo n.º 5
0
        public void OnGUI()
        {
            if (skin)
            {
                GUI.skin = skin;
            }
            var _color = GUI.color;

            if (OnSelectItem != null)
            {
                GUI.color = Color.red;
            }
            GUILayout.BeginVertical("Item List", "window");
            GUI.color = _color;
            GUILayout.Label(m_Logo, GUILayout.MaxHeight(25));

            GUILayout.BeginVertical("box");

            GUI.enabled = !Application.isPlaying;
            itemList    = EditorGUILayout.ObjectField("ItemListData", itemList, typeof(vItemListData), false) as vItemListData;

            if (serializedObject == null && itemList != null)
            {
                serializedObject = new SerializedObject(itemList);
            }
            else if (itemList == null)
            {
                GUILayout.EndVertical();
                return;
            }

            serializedObject.Update();
            if (OnSelectItem == null)
            {
                if (!inAddItem && GUILayout.Button("Create New Item"))
                {
                    addItem      = ScriptableObject.CreateInstance <vItem>();
                    addItem.name = "New Item";

                    currentItemDrawer = null;
                    inAddItem         = true;
                }
                if (inAddItem)
                {
                    DrawAddItem();
                }
                if (GUILayout.Button("Open ItemEnums Editor"))
                {
                    vItemEnumsWindow.CreateWindow();
                }
            }

            GUILayout.Space(10);
            GUILayout.EndVertical();

            GUILayout.Box(itemList.items.Count.ToString("00") + " Items");
            scroolView = GUILayout.BeginScrollView(scroolView, GUILayout.ExpandWidth(true));
            for (int i = 0; i < itemList.items.Count; i++)
            {
                if (itemList.items[i] != null)
                {
                    Color color = GUI.color;
                    GUI.color = currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] ? Color.green : color;
                    GUILayout.BeginVertical("box");
                    {
                        GUI.color = color;
                        GUILayout.BeginHorizontal();
                        {
                            var      texture  = itemList.items[i].iconTexture;
                            var      name     = " ID " + itemList.items[i].id.ToString("00") + "\n - " + itemList.items[i].name + "\n - " + itemList.items[i].type.ToString();
                            var      content  = new GUIContent(name, texture, currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] ? "Click to Close" : "Click to Open");
                            GUIStyle boxStyle = new GUIStyle(GUI.skin.box);
                            GUI.skin.box.alignment = TextAnchor.UpperLeft;
                            GUI.skin.box.fontStyle = FontStyle.Italic;
                            GUI.skin.box.fontSize  = 11;

                            if (GUILayout.Button(content, "box", GUILayout.Height(50), GUILayout.MinWidth(50)))
                            {
                                if (OnSelectItem != null)
                                {
                                    OnSelectItem.Invoke(i);
                                    OnSelectItem = null;
                                    this.Close();
                                }
                                else
                                {
                                    GUI.FocusControl("clearFocus");
                                    scroolView.y      = 1 + i * 60;
                                    currentItemDrawer = currentItemDrawer != null ? currentItemDrawer.item == itemList.items[i] ? null : new vItemDrawer(itemList.items[i]) : new vItemDrawer(itemList.items[i]);
                                }
                            }

                            if (OnSelectItem == null)
                            {
                                EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);

                                GUI.skin.box = boxStyle;
                                var duplicateImage = Resources.Load("duplicate") as Texture;
                                if (GUILayout.Button(new GUIContent("", duplicateImage, "Duplicate Item"), GUILayout.MaxWidth(45), GUILayout.Height(45)))
                                {
                                    if (EditorUtility.DisplayDialog("Duplicate the " + itemList.items[i].name,
                                                                    "Are you sure you want to duplicate this item? ", "Duplicate", "Cancel"))
                                    {
                                        DuplicateItem(itemList.items[i]);
                                        GUILayout.EndHorizontal();
                                        Repaint();
                                        break;
                                    }
                                }
                                if (GUILayout.Button(new GUIContent("x", "Delete Item"), GUILayout.MaxWidth(20), GUILayout.Height(45)))
                                {
                                    if (EditorUtility.DisplayDialog("Delete the " + itemList.items[i].name,
                                                                    "Are you sure you want to delete this item? ", "Delete", "Cancel"))
                                    {
                                        var item = itemList.items[i];
                                        itemList.items.RemoveAt(i);
                                        DestroyImmediate(item, true);
                                        OrderByID();
                                        AssetDatabase.SaveAssets();
                                        serializedObject.ApplyModifiedProperties();
                                        EditorUtility.SetDirty(itemList);
                                        GUILayout.EndHorizontal();
                                        Repaint();
                                        break;
                                    }
                                }
                            }
                        }
                        GUILayout.EndHorizontal();

                        GUI.color = color;
                        if (currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] && itemList.items.Contains(currentItemDrawer.item))
                        {
                            currentItemDrawer.DrawItem(ref itemList.items, false);
                        }
                    }
                    GUILayout.EndVertical();
                }
            }
            GUILayout.EndScrollView();

            GUILayout.EndVertical();
            if (GUI.changed || serializedObject.ApplyModifiedProperties())
            {
                EditorUtility.SetDirty(itemList);
            }
        }
Ejemplo n.º 6
0
 protected virtual void GetItemDrawer(int itemListIndex)
 {
     currentItemDrawer = currentItemDrawer != null ? currentItemDrawer.item == itemList.items[itemListIndex] ? null : new vItemDrawer(itemList.items[itemListIndex]) : new vItemDrawer(itemList.items[itemListIndex]);
 }
Ejemplo n.º 7
0
        public virtual void OnGUI()
        {
            if (skin)
            {
                GUI.skin = skin;
            }
            var _color = GUI.color;

            if (OnSelectItem != null)
            {
                GUI.color = Color.red;
            }
            GUILayout.BeginVertical("Item List", "window");
            GUI.color = _color;
            GUILayout.Label(m_Logo, GUILayout.MaxHeight(25));

            GUILayout.BeginVertical("box");

            GUI.enabled  = !Application.isPlaying;
            itemList     = EditorGUILayout.ObjectField("ItemListData", itemList, typeof(vItemListData), false) as vItemListData;
            this.minSize = new Vector2(250, minSize.y);
            if (serializedObject == null && itemList != null)
            {
                serializedObject = new SerializedObject(itemList);
            }
            else if (itemList == null)
            {
                GUILayout.EndVertical();
                return;
            }

            serializedObject.Update();
            if (OnSelectItem == null)
            {
                if (!inDragItens && GUILayout.Button("Add Items"))
                {
                    inDragItens = true;
                }
                if (!inAddItem && GUILayout.Button("Create New Item"))
                {
                    addItem      = ScriptableObject.CreateInstance <vItem>();
                    addItem.name = "New Item";

                    currentItemDrawer = null;
                    inAddItem         = true;
                }
                if (inDragItens)
                {
                    GUILayout.BeginVertical("window");
                    EditorGUILayout.HelpBox("You can add items from other lists by selecting other lists in the ProjectWindow, click on 'Show items in Hierarchy' and drag & drop the item to the field bellow", MessageType.Info);
                    EditorGUILayout.HelpBox("New items will have their IDs modified if Same ID exits in Items List", MessageType.Warning);
                    DrawDragBox(ref newItems);
                    GUILayout.BeginVertical();
                    newItemsScrool = GUILayout.BeginScrollView(newItemsScrool, false, false, GUILayout.MaxHeight(Mathf.Clamp(newItems.Count * 25, 0, 500)));
                    OrderByID(ref newItems);
                    for (int i = 0; i < newItems.Count; i++)
                    {
                        GUILayout.BeginHorizontal();
                        if (itemList.items.Find(it => it.name.ToClearUpper().Equals(newItems[i].name.ToClearUpper())))
                        {
                            GUI.color = Color.red;
                            GUILayout.Label("EXIST"); EditorGUILayout.ObjectField(newItems[i], typeof(vItem), false);
                        }
                        else
                        {
                            GUI.color = Color.white;
                            EditorGUILayout.ObjectField(newItems[i], typeof(vItem), false);
                        }
                        GUI.color = Color.white;
                        if (GUILayout.Button("x", EditorStyles.miniButton, GUILayout.Width(20)))
                        {
                            newItems.RemoveAt(i);
                            i--;
                        }
                        GUILayout.EndHorizontal();
                    }
                    GUILayout.EndScrollView();
                    GUILayout.EndVertical();
                    GUILayout.BeginHorizontal();
                    GUI.enabled = newItems.Count > 0;
                    if (GUILayout.Button("ADD", GUILayout.MinWidth(50), GUILayout.MaxWidth(100)))
                    {
                        AddItem(newItems);
                        newItems.Clear();
                        inDragItens = false;
                    }
                    GUI.enabled = true;
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("CLEAR", GUILayout.MinWidth(50), GUILayout.MaxWidth(100)))
                    {
                        newItems.Clear();
                    }
                    GUILayout.FlexibleSpace();
                    if (GUILayout.Button("CANCEL", GUILayout.MinWidth(50), GUILayout.MaxWidth(100)))
                    {
                        inDragItens = false;
                    }
                    GUILayout.EndHorizontal();
                    GUILayout.EndVertical();
                }
                if (inAddItem)
                {
                    DrawAddItem();
                }
                if (GUILayout.Button("Open ItemEnums Editor"))
                {
                    vItemEnumsWindow.CreateWindow();
                }
            }

            GUILayout.Space(10);
            GUILayout.EndVertical();

            GUILayout.Box(itemList.items.Count.ToString("00") + " Items");
            DrawFilter();
            scroolView = GUILayout.BeginScrollView(scroolView, GUILayout.ExpandWidth(true));
            int count = 0;

            for (int i = 0; i < itemList.items.Count; i++)
            {
                if (itemList.items[i] != null && FilterItems(itemList.items[i]))
                {
                    Color color = GUI.color;
                    GUI.color = currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] ? Color.green : color;
                    GUILayout.BeginVertical("box");
                    {
                        GUI.color = color;
                        GUILayout.BeginHorizontal();
                        {
                            var      texture  = itemList.items[i].iconTexture;
                            var      name     = " ID " + itemList.items[i].id.ToString("00") + "\n - " + itemList.items[i].name + "\n - " + itemList.items[i].type.ToString();
                            var      content  = new GUIContent(name, texture, currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] ? "Click to Close" : "Click to Open");
                            GUIStyle boxStyle = new GUIStyle(GUI.skin.box);
                            GUI.skin.box.alignment = TextAnchor.UpperLeft;
                            GUI.skin.box.fontStyle = FontStyle.Italic;
                            GUI.skin.box.fontSize  = 11;

                            if (GUILayout.Button(content, "label", GUILayout.Height(60), GUILayout.MinWidth(60)))
                            {
                                if (OnSelectItem != null)
                                {
                                    OnSelectItem.Invoke(i);
                                    OnSelectItem = null;
                                    this.Close();
                                }
                                else
                                {
                                    GUI.FocusControl("clearFocus");
                                    scroolView.y = 1 + count * 60;
                                    GetItemDrawer(i);
                                }
                            }

                            if (OnSelectItem == null)
                            {
                                EditorGUIUtility.AddCursorRect(GUILayoutUtility.GetLastRect(), MouseCursor.Link);

                                GUI.skin.box = boxStyle;
                                var duplicateImage = Resources.Load("duplicate") as Texture;
                                if (GUILayout.Button(new GUIContent("", duplicateImage, "Duplicate Item"), GUILayout.MaxWidth(45), GUILayout.Height(45)))
                                {
                                    if (EditorUtility.DisplayDialog("Duplicate the " + itemList.items[i].name,
                                                                    "Are you sure you want to duplicate this item? ", "Duplicate", "Cancel"))
                                    {
                                        DuplicateItem(itemList.items[i]);
                                        GUILayout.EndHorizontal();
                                        Repaint();
                                        break;
                                    }
                                }
                                if (GUILayout.Button(new GUIContent("x", "Delete Item"), GUILayout.MaxWidth(20), GUILayout.Height(45)))
                                {
                                    if (EditorUtility.DisplayDialog("Delete the " + itemList.items[i].name,
                                                                    "Are you sure you want to delete this item? ", "Delete", "Cancel"))
                                    {
                                        var item = itemList.items[i];
                                        itemList.items.RemoveAt(i);
                                        DestroyImmediate(item, true);
                                        OrderByID(ref itemList.items);
                                        AssetDatabase.SaveAssets();
                                        serializedObject.ApplyModifiedProperties();
                                        EditorUtility.SetDirty(itemList);
                                        GUILayout.EndHorizontal();
                                        Repaint();
                                        break;
                                    }
                                }
                            }
                        }
                        GUILayout.EndHorizontal();

                        GUI.color = color;
                        if (currentItemDrawer != null && currentItemDrawer.item == itemList.items[i] && itemList.items.Contains(currentItemDrawer.item))
                        {
                            currentItemDrawer.DrawItem(ref itemList.items, false);
                        }
                    }
                    GUILayout.EndVertical();
                    count++;
                }
            }
            GUILayout.EndScrollView();

            GUILayout.EndVertical();
            if (GUI.changed || serializedObject.ApplyModifiedProperties())
            {
                EditorUtility.SetDirty(itemList);
            }
        }