namespace Fusion.Editor { using System; using System.Collections.Generic; using UnityEditor; using UnityEngine; #if FUSION_DEV [CreateAssetMenu(menuName = "Fusion/Editor Skin")] #endif partial class FusionEditorSkin : ScriptableObject { private static FusionEditorSkin s_Instance; public static FusionEditorSkin instance { get { if (s_Instance == null) { s_Instance = CreateInstance(); s_Instance.hideFlags = HideFlags.HideAndDontSave; } return s_Instance; } } public GUISkin Skin; public static GUIStyle HelpButtonStyle => instance.Skin.GetStyle(EditorGUIUtility.isProSkin ? "dark-help-button" : "light-help-button"); public static GUIStyle InlineBoxFullWidthStyle => instance.Skin.GetStyle("inline-box-full-width"); public static GUIStyle InlineBoxFullWidthScopeStyle => instance.Skin.GetStyle("inline-box-full-width-scope"); public static GUIStyle ScriptHeaderBackgroundStyle => instance.Skin.GetStyle("script-header-bg"); public static GUIStyle ScriptHeaderIconStyle => instance.Skin.GetStyle("script-header-icon"); public static GUIStyle ScriptHeaderLabelStyle => instance.Skin.GetStyle("script-header-label"); public static GUIStyle RichLabelStyle => instance.Skin.GetStyle(EditorGUIUtility.isProSkin ? "dark-rich-label" : "light-rich-label"); public static GUIStyle InlineSelectorStyle => instance.Skin.GetStyle("inline-selector"); public static GUIStyle OutlineBoxStyle => instance.Skin.GetStyle("outline-box"); public static Color HelpInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.317f, 0.337f, 0.352f, 1.000f) : new Color(0.686f, 0.776f, 0.859f); public static Color WarningInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.36f, 0.33f, 0.22f, 1.00f) : new Color(0.98f, 0.94f, 0.80f, 0.90f); public static Color ErrorInlineBoxColor => EditorGUIUtility.isProSkin ? new Color(0.40f, 0.15f, 0.10f, 1.00f) : new Color(0.9f, 0.70f, 0.70f, 1.00f); public static readonly LazyAsset InfoIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.infoicon.sml@2x" : "console.infoicon.sml@2x")); public static readonly LazyAsset WarningIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.warnicon.sml@2x" : "console.warnicon.sml@2x")); public static readonly LazyAsset ErrorIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_console.erroricon.sml@2x" : "console.erroricon.sml@2x")); public static readonly LazyAsset LoadStateIcon = LazyAsset.Create(() => FindTextureOrThrow("blendSampler")); public static readonly LazyAsset RefreshIcon = LazyAsset.Create(() => FindTextureOrThrow(EditorGUIUtility.isProSkin ? "d_Refresh@2x" : "Refresh@2x")); public static readonly LazyGUIStyle OverlayLabelStyle = LazyGUIStyle.Create(_ => { var result = new GUIStyle(EditorStyles.miniLabel); result.alignment = TextAnchor.MiddleRight; result.contentOffset = new Vector2(-2, 0); result.normal.textColor = EditorGUIUtility.isProSkin ? new Color(255f / 255f, 221 / 255f, 0 / 255f, 1f) : Color.blue; return result; }); public static readonly LazyGUIStyle RawDataStyle = LazyGUIStyle.Create(_ => new GUIStyle(EditorStyles.textArea) { wordWrap = true }); private static Texture2D FindTextureOrThrow(string id) { return EditorGUIUtility.FindTexture(id) ?? throw new ArgumentOutOfRangeException($"Could not find texture with id {id}"); } private Dictionary _scriptHeaderStyles = new() { { ScriptHeaderBackColor.None, new Color() }, { ScriptHeaderBackColor.Gray, new Color(0.35f, 0.35f, 0.35f) }, { ScriptHeaderBackColor.Blue, new Color(0.15f, 0.25f, 0.6f) }, { ScriptHeaderBackColor.Red, new Color(0.5f, 0.1f, 0.1f) }, { ScriptHeaderBackColor.Green, new Color(0.1f, 0.4f, 0.1f) }, { ScriptHeaderBackColor.Orange, new Color(0.6f, 0.35f, 0.1f) }, { ScriptHeaderBackColor.Black, new Color(0.1f, 0.1f, 0.1f) }, { ScriptHeaderBackColor.Steel, new Color(0.32f, 0.35f, 0.38f) }, { ScriptHeaderBackColor.Sand, new Color(0.38f, 0.35f, 0.32f) }, { ScriptHeaderBackColor.Olive, new Color(0.25f, 0.33f, 0.15f) }, { ScriptHeaderBackColor.Cyan, new Color(0.25f, 0.5f, 0.5f) }, { ScriptHeaderBackColor.Violet, new Color(0.35f, 0.2f, 0.4f) }, }; public static Color GetScriptHeaderColor(ScriptHeaderBackColor settingsBackColor) { if (instance._scriptHeaderStyles.TryGetValue(settingsBackColor, out var color)) { return color; } return default; } } }