void MenuBar(Rect rect)
        {
#if UMA_ADDRESSABLES
            if (AddressablesMenu.GetItemCount() == 1)
            {
                SetupMenus();
            }
#endif
            Rect MenuRect = new Rect(rect);
            MenuRect.width = 60;


            if (EditorGUI.DropdownButton(MenuRect, new GUIContent("File"), FocusType.Passive, EditorStyles.toolbarDropDown))
            {
                FileMenu.DropDown(new Rect(MenuRect));
            }
            MenuRect.x    += 60;
            MenuRect.width = 100;
            if (EditorGUI.DropdownButton(MenuRect, new GUIContent("Addressables"), FocusType.Passive, EditorStyles.toolbarDropDown))
            {
                AddressablesMenu.DropDown(new Rect(MenuRect));
            }

            MenuRect.x    += 100;
            MenuRect.width = 70;

            if (EditorGUI.DropdownButton(MenuRect, new GUIContent("Items"), FocusType.Passive, EditorStyles.toolbarDropDown))
            {
                ItemsMenu.DropDown(new Rect(MenuRect));
            }


            MenuRect.x    += 70;
            MenuRect.width = 100;

            if (GUI.Button(MenuRect, new GUIContent("Collapse All"), EditorStyles.toolbarButton))
            {
                treeView.CollapseAll();
            }

            MenuRect.x    += 100;
            MenuRect.width = 100;

            if (GUI.Button(MenuRect, new GUIContent("Expand All"), EditorStyles.toolbarButton))
            {
                treeView.ExpandAll();
            }

            MenuRect.x    += 100;
            MenuRect.width = 100;

            bool newShowUtilities = GUI.Toggle(MenuRect, ShowUtilities, "Show Utilities", EditorStyles.toolbarButton);

            if (newShowUtilities != ShowUtilities)
            {
                ShowUtilities = newShowUtilities;
                Repaint();
            }

            Rect FillRect = new Rect(rect);
            FillRect.x     += 530;
            FillRect.width -= 530;
            GUI.Box(FillRect, "", EditorStyles.toolbar);

            if (ShowUtilities)
            {
                rect.y += rect.height;
                GUI.Box(rect, "");
                GUILayout.BeginArea(rect);
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("Apply UMAMaterials to Selection", GUILayout.Width(259)))
                {
                    UpdateMaterials();
                    AssetDatabase.SaveAssets();
                }
                Replacement = EditorGUILayout.ObjectField("", Replacement, typeof(UMAMaterial), false, GUILayout.Width(250)) as UMAMaterial;
                GUILayout.EndHorizontal();
                GUILayout.EndArea();
            }
        }
示例#2
0
        private void SetupMenus()
        {
            _FileMenu         = new GenericMenu();
            _AddressablesMenu = new GenericMenu();
            _ItemsMenu        = new GenericMenu();

            AddPlugins(GetAddressablePlugins());

            // ***********************************************************************************
            // File Menu items
            // ***********************************************************************************
            AddMenuItemWithCallback(FileMenu, "Rebuild From Project", () =>
            {
                UAI.Clear();
                UAI.AddEverything(false);
                Resources.UnloadUnusedAssets();
                m_Initialized = false;
                Repaint();
            });

            AddMenuItemWithCallback(FileMenu, "Rebuild From Project (include text assets)", () =>
            {
                UAI.Clear();
                UAI.AddEverything(true);
                Resources.UnloadUnusedAssets();
                m_Initialized = false;
                Repaint();
            });

            AddMenuItemWithCallback(FileMenu, "Repair and remove invalid items", () =>
            {
                UAI.RepairAndCleanup();
                Resources.UnloadUnusedAssets();
                m_Initialized = false;
                Repaint();
                EditorUtility.DisplayDialog("Repair", "AssetIndex successfully repaired", "OK");
            });

            /* AddMenuItemWithCallback(FileMenu, "Add Build refs to all non-addressables", () =>
             * {
             *      UAI.AddReferences();
             *      RecountTypes();
             *      Resources.UnloadUnusedAssets();
             *      Repaint();
             * });
             * AddMenuItemWithCallback(FileMenu, "Clear build refs from all items", () =>
             * {
             *      UAI.ClearReferences();
             *      Resources.UnloadUnusedAssets();
             *      RecountTypes();
             *      Repaint();
             * }); */
            FileMenu.AddSeparator("");
            AddMenuItemWithCallback(FileMenu, "Toggle Utilities Panel", () =>
            {
                ShowUtilities = !ShowUtilities;
                Repaint();
            });
            FileMenu.AddSeparator("");

            AddMenuItemWithCallback(FileMenu, "Empty Index", () =>
            {
                UAI.Clear();
                m_Initialized = false;
                Repaint();
            });

#if UMA_ADDRESSABLES
            foreach (IUMAAddressablePlugin plugin in addressablePlugins)
            {
                AddMenuItemWithCallbackParm(AddressablesMenu, "Generators/" + plugin.Menu, (object o) =>
                {
                    IUMAAddressablePlugin addrplug = o as IUMAAddressablePlugin;
                    UAI.GenerateAddressables(addrplug);
                    Resources.UnloadUnusedAssets();
                    m_Initialized = false;
                    Repaint();
                }, plugin);
            }

            AddressablesMenu.AddSeparator("Generators/");

            // ***********************************************************************************
            // Addressables Menu items
            // ***********************************************************************************
            AddMenuItemWithCallback(AddressablesMenu, "Generators/Generate Groups (optimized)", () =>
            {
                UAI.CleanupAddressables();
                UAI.GenerateAddressables();
                Resources.UnloadUnusedAssets();
                m_Initialized = false;
                Repaint();
            });

            /* AddMenuItemWithCallback(AddressablesMenu, "Generators/Generate Shared Group (fast)", () =>
             * {
             *      UAI.CleanupAddressables();
             *      UAI.GenerateSingleGroup();
             *      Resources.UnloadUnusedAssets();
             *      m_Initialized = false;
             *      Repaint();
             * });
             *
             * AddMenuItemWithCallback(AddressablesMenu, "Generators/Generate Shared Group (incl recipes)", () =>
             * {
             *      UAI.CleanupAddressables();
             *      UAI.GenerateSingleGroup(true);
             *      Resources.UnloadUnusedAssets();
             *      m_Initialized = false;
             *      Repaint();
             * }); */

            AddMenuItemWithCallback(AddressablesMenu, "Remove Addressables", () =>
            {
                UAI.CleanupAddressables(false, true);
                m_Initialized = false;
                Repaint();
            });
            AddMenuItemWithCallback(AddressablesMenu, "Delete Empty Groups", () =>
            {
                UAI.CleanupAddressables(true);
            });

            /*
             * AddMenuItemWithCallback(AddressablesMenu, "Force Add Refs (Bad!!)", () =>
             * {
             *      UAI.AddReferences(true);
             *      RecountTypes();
             *      Resources.UnloadUnusedAssets();
             *      Repaint();
             * }); */

            AddMenuItemWithCallback(AddressablesMenu, "Remove Orphaned Slots", () =>
            {
                if (EditorUtility.DisplayDialog("Warning!", "You *must* build the addressable groups, and mark any slots you want to keep as 'keep' before running this!", "OK", "Cancel"))
                {
                    UAI.CleanupOrphans(typeof(SlotDataAsset));
                    m_Initialized = false;
                    Repaint();
                }
            });
            AddMenuItemWithCallback(AddressablesMenu, "Remove Orphaned Overlays", () =>
            {
                if (EditorUtility.DisplayDialog("Warning!", "You *must* build the addressable groups, and mark any slots you want to keep as 'keep' before running this!", "OK", "Cancel"))
                {
                    UAI.CleanupOrphans(typeof(OverlayDataAsset));
                    m_Initialized = false;
                    Repaint();
                }
            });
#endif
            // ***********************************************************************************
            // Items Menu items
            // ***********************************************************************************
            AddMenuItemWithCallback(ItemsMenu, "Select All", () =>
            {
                var treeElements = new List <AssetTreeElement>();
                TreeElementUtility.TreeToList <AssetTreeElement>(treeView.treeModel.root, treeElements);
                foreach (AssetTreeElement ate in treeElements)
                {
                    ate.Checked = true;
                }
                treeView.RecalcTypeChecks();
                Repaint();
                return;
            });

            AddMenuItemWithCallback(ItemsMenu, "Clear Selection", () =>
            {
                var treeElements = new List <AssetTreeElement>();
                TreeElementUtility.TreeToList <AssetTreeElement>(treeView.treeModel.root, treeElements);
                foreach (AssetTreeElement ate in treeElements)
                {
                    ate.Checked = false;
                }
                treeView.RecalcTypeChecks();
                Repaint();
                return;
            });

            foreach (RaceData rc in UAI.GetAllAssets <RaceData>())
            {
                if (rc != null)
                {
                    AddMenuItemWithCallbackParm(ItemsMenu, "Select Slots + Overlays By Race/" + rc.raceName, SelectByRace, rc);
                    AddMenuItemWithCallbackParm(ItemsMenu, "Select Slots By Race/" + rc.raceName, SelectSlotsByRace, rc);
                    AddMenuItemWithCallbackParm(ItemsMenu, "Select Overlays By Race/" + rc.raceName, SelectOverlaysByRace, rc);
                }
            }

            ItemsMenu.AddSeparator("");

            AddMenuItemWithCallback(ItemsMenu, "Add Keep Flag to Selected Items", () =>
            {
                MarkKeep(true);
                Repaint();
                return;
            });

            AddMenuItemWithCallback(ItemsMenu, "Clear Keep Flag from Selected Items", () =>
            {
                MarkKeep(false);
                Repaint();
                return;
            });

            ItemsMenu.AddSeparator("");

            AddMenuItemWithCallback(ItemsMenu, "Remove Selected", () =>
            {
                RemoveSelected();
                m_Initialized = false;
                Repaint();
                return;
            });
            AddMenuItemWithCallback(ItemsMenu, "Force Selected Items to Save", () =>
            {
                ForceSave();
                m_Initialized = false;
                Repaint();
                return;
            });
        }