99 lines
4.1 KiB
C#
99 lines
4.1 KiB
C#
#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<MainToolbarElement> Draw()
|
|
{
|
|
Styles.Initialize();
|
|
|
|
return new List<MainToolbarElement>(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
|