246 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C#
		
	
	
	
| #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<Color> colors = new List<Color>();
 | |
| 
 | |
|         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<IconRow> iconRows = new List<IconRow>();
 | |
| 
 | |
|         [System.Serializable]
 | |
|         public class IconRow
 | |
|         {
 | |
|             public List<string> builtinIcons = new List<string>(); // names
 | |
|             public List<string> customIcons = new List<string>(); // 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 |