OvertakingLegend/Assets/Plugins/vFolders/VFoldersPalette.cs

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