using UnityEngine; using UnityEditor; using System; using System.IO; using System.Collections.Generic; using UnityEngine.ProBuilder; namespace UnityEditor.ProBuilder { /// /// Describes icon styles for pro and basic skin, or default (whatever the editor is currently using). /// enum IconSkin { Default, Light, Pro }; static class IconUtility { static Dictionary s_Icons = new Dictionary(); static string s_IconFolderPath = "Content/Icons/"; /// /// Load an icon from the ProBuilder/Icons folder. IconName must *not* include the extension or `_Light` mode suffix. /// /// /// /// public static Texture2D GetIcon(string iconName, IconSkin skin = IconSkin.Default) { #if PB_DEBUG if (iconName.EndsWith(".png")) pb_Log.Error("GetIcon(string) called with .png suffix!"); if (iconName.EndsWith("_Light")) pb_Log.Error("GetIcon(string) called with _Light suffix!"); #endif bool isDarkSkin = skin == IconSkin.Default ? EditorGUIUtility.isProSkin : skin == IconSkin.Pro; string name = isDarkSkin ? iconName : iconName + "_Light"; Texture2D icon = null; if (!s_Icons.TryGetValue(name, out icon)) { int i = 0; do { // if in light mode: // - do one lap searching for light // - if nothing found, next searching for default string fullPath = string.Format("{0}{1}.png", s_IconFolderPath, i == 0 ? name : iconName); icon = FileUtility.LoadInternalAsset(fullPath); } while (!isDarkSkin && ++i < 2 && icon == null); s_Icons.Add(name, icon); } return icon; } } }