#if UNITY_6000_3_OR_NEWER using System; using System.Collections.Generic; using UnityEditor; using UnityEditor.Toolbars; using UnityEngine; using UnityEngine.Scripting; namespace Module.NavigationTool.Editor.Entities.Toolbar { internal static class MainToolbarEntitiesElement { [Preserve] [MainToolbarElement("Toolbar/Entities", ussName = "", defaultDockIndex = 0, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 500)] public static IEnumerable Draw() { Styles.Initialize(); return new List(5) { new MainToolbarButton(new MainToolbarContent(Styles.IconHierarchy, "Show/Hide entities hierarchy window"), () => ToggleWindow("HierarchyWindow")), #if !UNITY_6000_5_OR_NEWER new MainToolbarButton(new MainToolbarContent(Styles.IconComponents, "Show/Hide entities components window"), () => ToggleWindow("ComponentsWindow")), #endif new MainToolbarButton(new MainToolbarContent(Styles.IconSystems, "Show/Hide entities systems window"), () => ToggleWindow("SystemScheduleWindow")), #if !UNITY_6000_5_OR_NEWER new MainToolbarButton(new MainToolbarContent(Styles.IconArchetypes, "Show/Hide entities archetypes window"), () => ToggleWindow("ArchetypesWindow")), new MainToolbarButton(new MainToolbarContent(Styles.IconJournaling, "Show/Hide entities journaling window"), () => ToggleWindow("EntitiesJournalingWindow")) #endif }; } private static void ToggleWindow(string typeName) { var fullname = $"{nameof(Unity)}.Entities.Editor.{typeName}, Unity.Entities.Editor"; var type = Type.GetType(fullname, false, true); if (type != null) { var all = Resources.FindObjectsOfTypeAll(type); if (all.Length != 0) { for (var i = 0; i < all.Length; i++) { if (all[i] is EditorWindow window) window.Close(); } } else { EditorWindow.GetWindow(type); } } else { Debug.LogWarningFormat("Failed to find type with name: {0}", fullname); } } private static class Styles { public static Texture2D IconHierarchy; #if !UNITY_6000_5_OR_NEWER public static Texture2D IconComponents; #endif public static Texture2D IconSystems; #if !UNITY_6000_5_OR_NEWER public static Texture2D IconArchetypes; public static Texture2D IconJournaling; #endif private static bool _isInitialized; private const string EditorDefaultResourcesPath = "Packages/com.unity.entities/Editor Default Resources/"; private const string EditorIconsLightDirectory = EditorDefaultResourcesPath + "icons/light"; private const string EditorIconsDarkDirectory = EditorDefaultResourcesPath + "icons/dark"; public static void Initialize() { if (_isInitialized) return; IconHierarchy = LoadIcon("EntityGroup/EntityGroup"); #if !UNITY_6000_5_OR_NEWER IconComponents = LoadIcon("Component/Component"); #endif IconSystems = LoadIcon("System/System"); #if !UNITY_6000_5_OR_NEWER IconArchetypes = LoadIcon("Archetype/Archetype"); IconJournaling = LoadIcon("Journaling/Journaling"); #endif _isInitialized = true; } private static Texture2D LoadIcon(string name) { var iconsDirectory = EditorIconsLightDirectory; if (EditorGUIUtility.isProSkin) iconsDirectory = EditorIconsDarkDirectory; var obj = AssetDatabase.LoadAssetAtPath($"{iconsDirectory}/{name}.png", typeof(Texture2D)); return obj != null ? (Texture2D)obj : null; } } } } #endif