#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")), new MainToolbarButton(new MainToolbarContent(Styles.IconComponents, "Show/Hide entities components window"), () => ToggleWindow("ComponentsWindow")), new MainToolbarButton(new MainToolbarContent(Styles.IconSystems, "Show/Hide entities systems window"), () => ToggleWindow("SystemScheduleWindow")), 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")) }; } 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; public static Texture2D IconComponents; public static Texture2D IconSystems; public static Texture2D IconArchetypes; public static Texture2D IconJournaling; 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"); IconComponents = LoadIcon("Component/Component"); IconSystems = LoadIcon("System/System"); IconArchetypes = LoadIcon("Archetype/Archetype"); IconJournaling = LoadIcon("Journaling/Journaling"); _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