#if UNITY_EDITOR using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using UnityEditor.ShortcutManagement; using System.Reflection; using System.Linq; using UnityEngine.UIElements; using UnityEngine.SceneManagement; using UnityEditor.SceneManagement; using UnityEditorInternal; using static VFolders.Libs.VUtils; using static VFolders.Libs.VGUI; namespace VFolders { public class VFoldersPalette : ScriptableObject { public List colors = new List(); public bool colorsEnabled; public void ResetColors() { colors.Clear(); for (int i = 0; i < colorsCount; i++) colors.Add(GetDefaultColor(i)); colorsEnabled = true; this.Dirty(); } public static Color GetDefaultColor(int colorIndex) { Color color = default; void grey() { if (colorIndex >= greyColorsCount) return; #if UNITY_2022_1_OR_NEWER color = Greyscale(EditorGUIUtility.isProSkin ? .16f : .9f); #else color = Greyscale(EditorGUIUtility.isProSkin ? .315f : .9f); #endif } void rainbowDarkTheme() { if (colorIndex < greyColorsCount) return; if (!isDarkTheme) return; var t = (colorIndex - greyColorsCount.ToFloat()) / rainbowColorsCount; if (colorIndex == 0) t += .01f; if (colorIndex == 1) t -= .02f; if (colorIndex == 2) t -= .015f; if (colorIndex == 3) t -= .01f; if (colorIndex == 4) t += .02f; if (colorIndex == 5) t += .01f; if (colorIndex == 8) t -= .01f; // color = HSLToRGB(t, .61f, .57f); color = HSLToRGB(t, .61f, .57f); if (colorIndex == 0) color *= 1.16f; if (colorIndex == 1) color *= 1.17f; if (colorIndex == 2) color *= 1.03f; if (colorIndex == 6) color *= 1.2f; if (colorIndex == 7) color *= 1.55f; if (colorIndex == 8) color *= 1.2f; if (colorIndex == 9) color *= 1.08f; color.a = .1f; } void rainbowLightTheme() { if (colorIndex < greyColorsCount) return; if (isDarkTheme) return; color = HSLToRGB((colorIndex - greyColorsCount.ToFloat()) / rainbowColorsCount, .62f, .8f); // color.a = .1f; color.a = 1f; } grey(); rainbowDarkTheme(); rainbowLightTheme(); return color; } public static int greyColorsCount = 0; public static int rainbowColorsCount = 10; public static int colorsCount => greyColorsCount + rainbowColorsCount; public List iconRows = new List(); [System.Serializable] public class IconRow { public List builtinIcons = new List(); // names public List customIcons = new List(); // guids public bool enabled = true; public bool isCustom => !builtinIcons.Any() || customIcons.Any(); public bool isEmpty => !builtinIcons.Any() && !customIcons.Any(); public int iconCount => builtinIcons.Count + customIcons.Count; public IconRow(string[] builtinIcons) => this.builtinIcons = builtinIcons.ToList(); public IconRow() { } } public void ResetIcons() { iconRows.Clear(); iconRows.Add(new IconRow(new[] { "SceneAsset Icon", "Prefab Icon", "PrefabModel Icon", "Material Icon", "Texture Icon", "Mesh Icon", "cs Script Icon", "Shader Icon", "ComputeShader Icon", "ScriptableObject Icon", })); iconRows.Add(new IconRow(new[] { "Light Icon", "LightProbes Icon", "LightmapParameters Icon", "LightingDataAsset Icon", "Cubemap Icon" })); iconRows.Add(new IconRow(new[] { "PhysicMaterial Icon", "BoxCollider Icon", "TerrainCollider Icon", "MeshCollider Icon", "WheelCollider Icon", "Rigidbody Icon", })); iconRows.Add(new IconRow(new[] { "AudioClip Icon", "AudioMixerController Icon", "AudioMixerGroup Icon", "AudioEchoFilter Icon", "AudioSource Icon", })); iconRows.Add(new IconRow(new[] { "TextAsset Icon", "AssemblyDefinitionAsset Icon", "TerrainData Icon", "Terrain Icon", "AnimatorController Icon", "AnimationClip Icon", "Font Icon", "RawImage Icon", "Settings Icon", })); this.Dirty(); } [ContextMenu("Export palette")] public void Export() { var packagePath = EditorUtility.SaveFilePanel("Export vHierarchy Palette", "", this.GetPath().GetFilename(withExtension: false), "unitypackage"); var iconPaths = iconRows.SelectMany(r => r.customIcons).Select(r => r.ToPath()).Where(r => !r.IsNullOrEmpty()); AssetDatabase.ExportPackage(iconPaths.Append(this.GetPath()).ToArray(), packagePath); EditorUtility.RevealInFinder(packagePath); } void Reset() { ResetColors(); ResetIcons(); } } } #endif