974 lines
161 KiB
C#
974 lines
161 KiB
C#
![]() |
//Stylized Water 2
|
|||
|
//Staggart Creations (http://staggart.xyz)
|
|||
|
//Copyright protected under Unity Asset Store EULA
|
|||
|
|
|||
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using UnityEditor;
|
|||
|
using UnityEditor.AnimatedValues;
|
|||
|
using UnityEditor.Rendering;
|
|||
|
using UnityEngine;
|
|||
|
|
|||
|
namespace StylizedWater2
|
|||
|
{
|
|||
|
public class UI
|
|||
|
{
|
|||
|
private const string AssetIconData = "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
|
|||
|
private static Texture _AssetIcon;
|
|||
|
public static Texture AssetIcon
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_AssetIcon == null) _AssetIcon = CreateIcon(AssetIconData);
|
|||
|
return _AssetIcon;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private const string UnderwaterAssetIconData = "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
|
|||
|
private static Texture _UnderwaterAssetIcon;
|
|||
|
public static Texture UnderwaterAssetIcon
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_UnderwaterAssetIcon == null) _UnderwaterAssetIcon = CreateIcon(UnderwaterAssetIconData);
|
|||
|
return _UnderwaterAssetIcon;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private const string DynamicEffectsAssetIconData = "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
|
|||
|
private static Texture _DynamicEffectsAssetIcon;
|
|||
|
public static Texture DynamicEffectsAssetIcon
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_DynamicEffectsAssetIcon == null) _DynamicEffectsAssetIcon = CreateIcon(DynamicEffectsAssetIconData);
|
|||
|
return _DynamicEffectsAssetIcon;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private const string WarningIconData = "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";
|
|||
|
public static Texture WarningIcon;
|
|||
|
private const string ErrorIconData = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAD9klEQVR4Ae2bz2vUQBTHJ91S7FZ6EH/VY/GuRy8evHoVWnELgl68eBG8eNhfUPoXeOxB6B5WsGAPpZT+ISK46j/Q7MZiy2q75u04a35MkjeTl7fbrQMhmTcv8973k8nM0E2dQbslrIrj6G9rb+ntVNbVNbueBgPtfTNa6wUy/gdA/LCrfn8w1oo8IAZZoRwBVdHeapBlltSRjEEGgQoAj3gFhRACBQBe8cQQ8gIYj3hCCHkAjFc8EQRbADWWCU+JzDrnmBNsANTE+1Y9Kyf2dksIs4aJ2ou//6AlHq/hlq+PH16L/d0XhrmJ4aiUW+Um9l6TEWAvHrIplz2xs93xr9KPg72OWFjoYgXE/AxHAhZAPvHBLHe2g7Xw9cFeuG5bM4CAAUAnXgnSQaASr2IgIWQBoBevEgxCoBavYiAgpAEoTrxKECAUJV7FyICQBKB48SpBjrOEUNOF0gGYLvFKtdy7xCBEAUyn+BQIs/6uTjXDuR6sTOW1HAmjv1uY7gTtmZydRUeb7OvkRNfnZZ2xCBsfgB/eVQMBSwa+uVz5AHS7NwwyNfE16Dbuygeg55qIMvGNqzKw8AFw3SWxGZpwZZq6H1iePWF7BfQTkwFBtOvJMUxsZYT/vJC+CNf8LnwjAHJ1D+HJfslI+1ZGO2kzLwCvdx0BAHzYCi8AOQKyxLG9/5AIL4AuaiVgWwH4AfRQe4EpBuC6N7PGv9+O8UF0g3PhfQW8LmaCw/jg1CG8eAEcHmKWOIwPQhrOhReA17sWSqu6LquNN0Ez6whwBo8eBoPDhw3Flbm5Y387LHeDnheOs7go688rP0W/Px9uJK+NPnDi2wqDBinsr1KtqEUG8aHAvK8AhIaVoFSKPH7fDiPi9JR1BYB0+AF8/3pHLN/+DcFj5VvnbsxWsIF3DihYjEH3Y5oDDDLkcuWdBLlUGcS58ABmxUolyKs+kV9/BDPMe71SqQe7iK4CjSGQIj+Bede+Ekwgdr1e2xWfP92L2SkMUvzoRxHoUvcKAIQ6RTxtH09XXd+uPzaarpgp6ZdIbWcGRo14uFsHAOxFQ4AY4bLRDNcpa6trNeE4Df8Q0SMJAITng1C0eCES6aYBKBbC200hjo7k8fIV5fP+1xc8+RTx4JgFAHzoRwKIjxZqCAjxkAIGAPjRQdCJhwhQqCAgxUPI6DIItqQCEATBPmE5KcDQ/qt/KbU9q9FAPHTlWPzT1OR+RWIoHgBgXwHwVYXudVA9UpwtxEPYmei6iKw3hAxIkXr+PizFSwD24ZsTASGH+LwA4P7xQsgpngLA+CAQiKcCwA+BSDwlAD4IhOIhaZONEPhnlabvAMe5KTb7gHMjDpPohQfwB63ZMyXk5VWPAAAAAElFTkSuQmCC";
|
|||
|
public static Texture ErrorIcon;
|
|||
|
private const string InfoIconData = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAF4UlEQVR4Ae2aTWicRRjHdzebzSbZUKiKB0FEGnsSvVhREASp1puKRaH1AxUEL35eREm2KQgqgnjTUxU8FLWRFBX8qEEreNKL4MmDIIgULFuSbLLZzfp7Xt+J887Odt9935nZrTowmZnnnY/n/59nnvnYFDc3Nwsuw9bWlsvuevqamprqkeURlPI0/je0/Z8Ax7O4QH9dz1HGcBZcWsAC6/+YM836dBSP4YwEVwQEAa84cUmCCwKCgndNQl4CRgLeJQl5CBgpeFckZCVgMYTDUyAHpXl8QhYCBHx9kFKhv2clYVgCxhK8IjsLCWXVOEXqDXypVPqtUqm8NTExcRY9Njudzk2tVuuFnZ2d+RR6JaoICfF9YSnxoU+hmPIy5A18uVxenZ6evgf9GgCO1IQQSWsbGxtnhIxIOOQfSFikyUAS0hDgDXyxWDxXq9X2o+h5wacIkHwcbltfX/9GFYZN05AwaAl4Ay9gJicnT2CyEfi4XGAZ6Di/o9AiVnRh2nya5RDZWp8OvYKXMQH7kwBWUSwApSN1JE+UNfH3uoikw/8REmjV9+7QjwDv4AVKt9utEiWNogXe9ciqFvlQopgE8Qk9wUZAEPCiCQ7uLvxAod1u9yjGLiDW8FLPh4wC+qrTtIcEk4Bg4AXH9vb2vSRHJW8E8U2v8v0BQ56raCOh2Gg09E7lMSN06LIVniZ+ijVcYNnPA/wI6XUeFSmqvseBAKVLyHSXgEHboE+ldjjw/CJnAZzgHDO+j8GmfQ5o6zs0AWLuX7H/v0+6jEINTnuF2dlZ0a3GGj2O83vGpqgvWTAC2Ot/5GT2HEBWZduzhDWs4FmI2c+ucLfluxeRuQv4GKQL8OPM8gGAr8qhB5CJcWQblIhlSPww8dFzwTcBbS46RwC9APgrwPI4cU7HNDMzU5CzgBb/1L/7zienwu1oHcAfBdhJuj24trb2ASTsAfA5yiv6UJi+XrxKL/jOeyMA8E/g5U8C+o5ms/kx6QxgmljDWR2UzLweqHurXvad90JA/LhxAtA3A2glBi/r+xTvDwkThygd4wS+4JAu8J33QUATp/cioPexxZ1W4AUIxLxtAhLnp4U7qb9XK3vP+iCgyn7+CsfZ+wEjji8KLIefsYZvVVnSeP/fFWEdD+8WAmV8EFDkMPO0qT+z/44pM8p7IE2exoIGHwTYADRZ/++ZHwCsix6kkPvur3eYJh+EAMB/ZDo//ETiQMTyCG7+QlAQAlKY/zyPI0G3P2Ud3gmwOT9egtX4UYrTfCQhCFjwTkCK2S/hCx4KiDkxlG8CrM7P2Ptv5yh8dUKrgAWvBNhOftVqNXoGVxhxjo+q/ChSr7dBCHiXqK65UWqAnMMa7tNlXJVXIOkpXeYz780CuOT8DpgzpvLG3n+Y02L0HCT1qP8Ft8XD7Ag3mO18lb0RAJhP2Ns7uuJi/sh3RdwVHlMFbonfczGSk2CHZfGmkvtO/9HG8UgA/WxAl3uZ6VukjoBn5g9xhN7AIt4IeSYoy4lMC/X4xwNNlCkrj59fmy0Bp4vkZaiNj1jGMp5k3AbL5mVIkHdDbwG8db1z28/juX8d4vDzK4NcowaSZy959ZHIuUCJJa1ASgvgosfrgH9e/+g6H4M/pvdr2wXkPyzqeqVh8+D5gxi98xkPHgV+75ffBAvyHM4OID99X0b+1CjACy4bASLPRQKzerksLd3hSaeWcBBCfoAIr9dgdFlk7MTMK136ESDfM5OAqV9L+4s9bd3I92Vm/nPfp8AY/JIAsgWbDzDrZfIJLIF11vtrWMGX5M8D9EriAXn0UN7fHMh1eRB4GS8NAVIvEwnScFQhDXjR7WJLQNc983LQOwmVTwte9ElLgNS9JEgYBvywBIw9CcOCz0LA2JKQBXxWAhQJsreORcgKXpQfxgeYYJfigU150HIe8KJoHgKk/UhJyAveBQEjI8EFeFcEBCfBFXiXBAQjwSV4UTrtUVjqpgo8bKSql7USBGRtam2X1wlaO72UhP95Av4CjZqRyGFGUGEAAAAASUVORK5CYII=";
|
|||
|
public static Texture InfoIcon;
|
|||
|
|
|||
|
public static readonly Color RedColor = new Color(1f, 0.31f, 0.34f);
|
|||
|
public static readonly Color OrangeColor= new Color(1f, 0.68f, 0f);
|
|||
|
public static readonly Color GreenColor = new Color(0.33f, 1f, 0f);
|
|||
|
|
|||
|
private const float ANIM_SPEED = 12f;
|
|||
|
|
|||
|
public static bool ExpandTooltips
|
|||
|
{
|
|||
|
get => SessionState.GetBool("SW2_UI_TOOLTIPS", false);
|
|||
|
set => SessionState.SetBool("SW2_UI_TOOLTIPS", value);
|
|||
|
}
|
|||
|
|
|||
|
static UI()
|
|||
|
{
|
|||
|
WarningIcon = CreateIcon(WarningIconData);
|
|||
|
ErrorIcon = CreateIcon(ErrorIconData);
|
|||
|
InfoIcon = CreateIcon(InfoIconData);
|
|||
|
}
|
|||
|
|
|||
|
public static Texture CreateIcon(string data)
|
|||
|
{
|
|||
|
byte[] bytes = System.Convert.FromBase64String(data);
|
|||
|
|
|||
|
Texture2D icon = new Texture2D(32, 32, TextureFormat.RGBA32, false, false);
|
|||
|
icon.LoadImage(bytes, true);
|
|||
|
|
|||
|
return icon;
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawHeader()
|
|||
|
{
|
|||
|
EditorGUILayout.LabelField($"{AssetInfo.ASSET_NAME} (version {AssetInfo.INSTALLED_VERSION})", EditorStyles.centeredGreyMiniLabel);
|
|||
|
EditorGUILayout.Space();
|
|||
|
}
|
|||
|
|
|||
|
public static string iconPrefix => EditorGUIUtility.isProSkin ? "d_" : "";
|
|||
|
|
|||
|
public static void DrawRendererProperty(SerializedProperty property)
|
|||
|
{
|
|||
|
#if URP
|
|||
|
property.serializedObject.Update();
|
|||
|
int selectedRendererOption = property.intValue;
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
|
|||
|
Rect controlRect = EditorGUILayout.GetControlRect(true);
|
|||
|
EditorGUI.BeginProperty(controlRect, new GUIContent(property.displayName, null, tooltip:property.tooltip), property);
|
|||
|
|
|||
|
selectedRendererOption = EditorGUI.IntPopup(controlRect, new GUIContent(property.displayName, null, tooltip:property.tooltip), selectedRendererOption, PipelineUtilities.rendererDisplayList,PipelineUtilities.rendererIndexList);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
//Clamp to valid index
|
|||
|
selectedRendererOption = PipelineUtilities.ValidateRenderer(selectedRendererOption);
|
|||
|
|
|||
|
property.intValue = selectedRendererOption;
|
|||
|
property.serializedObject.ApplyModifiedProperties();
|
|||
|
}
|
|||
|
#else
|
|||
|
EditorGUILayout.PropertyField(property);
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
private static float Sin(float offset = 0f)
|
|||
|
{
|
|||
|
return Mathf.Sin(offset + (float)EditorApplication.timeSinceStartup * Mathf.PI * 2f) * 0.5f + 0.5f;
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawNotification(string text, MessageType messageType = MessageType.None)
|
|||
|
{
|
|||
|
DrawHelpbox(text, messageType);
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawNotification(bool condition, string text, string label, Action action, MessageType messageType = MessageType.None)
|
|||
|
{
|
|||
|
DrawHelpbox(text, messageType, condition, label, action);
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawNotification(bool condition, string text, MessageType messageType = MessageType.None)
|
|||
|
{
|
|||
|
DrawHelpbox(text, messageType, condition, null, null);
|
|||
|
}
|
|||
|
|
|||
|
private static void DrawHelpbox(string text, MessageType messageType = MessageType.None, bool condition = true, string buttonLabel = "", Action action = null)
|
|||
|
{
|
|||
|
if (!condition) return;
|
|||
|
|
|||
|
Rect r = EditorGUILayout.GetControlRect();
|
|||
|
r.width -= 10f;
|
|||
|
|
|||
|
Color sideColor = Color.gray;
|
|||
|
Texture icon = null;
|
|||
|
switch (messageType)
|
|||
|
{
|
|||
|
case (MessageType.None):
|
|||
|
{
|
|||
|
sideColor = Color.gray;
|
|||
|
}
|
|||
|
break;
|
|||
|
case (MessageType.Warning): //Warning
|
|||
|
{
|
|||
|
sideColor = Color.Lerp(OrangeColor, OrangeColor * 1.20f, Sin(r.y));
|
|||
|
icon = WarningIcon;
|
|||
|
}
|
|||
|
break;
|
|||
|
case (MessageType.Error): //Error
|
|||
|
{
|
|||
|
sideColor = Color.Lerp(RedColor, RedColor * 1.33f, Sin(r.y));
|
|||
|
icon = ErrorIcon;
|
|||
|
}
|
|||
|
break;
|
|||
|
case (MessageType.Info): //Info
|
|||
|
{
|
|||
|
sideColor = Color.Lerp(new Color(1f, 1f, 1f), new Color(0.9f, 0.9f, 0.9f), Sin(r.y));
|
|||
|
icon = InfoIcon;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
float width = r.width;
|
|||
|
//float rightPadding =
|
|||
|
float height = EditorStyles.helpBox.CalcHeight(new GUIContent(text), EditorGUIUtility.currentViewWidth) + (EditorStyles.label.lineHeight * 2f);
|
|||
|
r.height = height;
|
|||
|
|
|||
|
Rect btnRect = r;
|
|||
|
GUIContent btnContent = null;
|
|||
|
//Showing a button instead
|
|||
|
if (action != null)
|
|||
|
{
|
|||
|
icon = null;
|
|||
|
|
|||
|
btnContent = new GUIContent(" " + buttonLabel, EditorGUIUtility.IconContent("SceneLoadIn").image, "Execute suggested action");
|
|||
|
float size = EditorStyles.toolbarButton.CalcSize(btnContent).x + 5f;
|
|||
|
btnRect.width = size;
|
|||
|
btnRect.x = width - size;
|
|||
|
btnRect.height = EditorStyles.miniButtonMid.fixedHeight+5f;
|
|||
|
//Vertical center
|
|||
|
btnRect.y += (height * 0.5f) - (btnRect.height * 0.5f);
|
|||
|
}
|
|||
|
|
|||
|
Rect iconRect = r;
|
|||
|
if (icon != null)
|
|||
|
{
|
|||
|
float size = Mathf.Min(height * 0.75f, 50f);
|
|||
|
iconRect = r;
|
|||
|
iconRect.x = r.width - size;
|
|||
|
iconRect.width = size;
|
|||
|
iconRect.height = iconRect.width;
|
|||
|
//Vertical center
|
|||
|
iconRect.y += (height * 0.5f) - (iconRect.height * 0.5f);
|
|||
|
|
|||
|
//Recalculate text height
|
|||
|
height = EditorStyles.helpBox.CalcHeight(new GUIContent(text),
|
|||
|
EditorGUIUtility.currentViewWidth - size) + (EditorStyles.label.lineHeight * 2f);
|
|||
|
r.height = height;
|
|||
|
}
|
|||
|
|
|||
|
float backgroundTint = EditorGUIUtility.isProSkin ? 0.4f : 1f;
|
|||
|
EditorGUI.DrawRect(r, new Color(backgroundTint, backgroundTint, backgroundTint, 0.2f));
|
|||
|
|
|||
|
Rect colorRect = r;
|
|||
|
colorRect.width = 7f;
|
|||
|
|
|||
|
EditorGUI.DrawRect(colorRect, sideColor);
|
|||
|
|
|||
|
Rect textRect = r;
|
|||
|
textRect.x += colorRect.width + 10f;
|
|||
|
|
|||
|
//Shrink text area on right side to make room
|
|||
|
if (icon != null) textRect.width -= iconRect.width * 2f;
|
|||
|
if(action != null) textRect.width -= btnRect.width + 30f;
|
|||
|
|
|||
|
GUI.Label(textRect, new GUIContent(text), Styles.NotificationArea);
|
|||
|
|
|||
|
if (icon != null)
|
|||
|
{
|
|||
|
GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit);
|
|||
|
}
|
|||
|
|
|||
|
if (action != null)
|
|||
|
{
|
|||
|
if (GUI.Button(btnRect, btnContent))
|
|||
|
{
|
|||
|
action?.Invoke();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
GUILayout.Space(height - EditorStyles.label.lineHeight); //17=default line height
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawStatusBox(string prefix, string statusText, MessageType messageType = MessageType.None)
|
|||
|
{
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
EditorGUILayout.LabelField(prefix, GUILayout.MaxWidth(EditorGUIUtility.labelWidth));
|
|||
|
|
|||
|
Color defaultColor = GUI.contentColor;
|
|||
|
|
|||
|
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
|
|||
|
{
|
|||
|
switch (messageType)
|
|||
|
{
|
|||
|
case MessageType.Error: GUI.contentColor = RedColor;
|
|||
|
break;
|
|||
|
case MessageType.Warning : GUI.contentColor = OrangeColor;
|
|||
|
break;
|
|||
|
case MessageType.Info: GUI.contentColor = GreenColor;
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
EditorGUILayout.LabelField(statusText);
|
|||
|
GUI.contentColor = defaultColor;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
public static void DrawExtension(string name, string description, bool installed, string url, Texture icon)
|
|||
|
{
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
{
|
|||
|
Color defaultColor = GUI.contentColor;
|
|||
|
|
|||
|
GUILayout.Label(icon, GUILayout.MaxHeight(100f));
|
|||
|
|
|||
|
EditorGUILayout.BeginVertical();
|
|||
|
{
|
|||
|
EditorGUILayout.LabelField(name, Styles.BoldLabel, GUILayout.Height(20));
|
|||
|
|
|||
|
GUILayout.Space(5);
|
|||
|
EditorGUILayout.LabelField(description, Styles.WordWrapLabel);
|
|||
|
|
|||
|
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
|
|||
|
{
|
|||
|
if (installed) GUI.contentColor = UI.GreenColor;
|
|||
|
EditorGUILayout.LabelField(installed ? "Installed" : "Not Installed", GUILayout.MaxWidth((75f)));
|
|||
|
GUI.contentColor = defaultColor;
|
|||
|
|
|||
|
GUILayout.FlexibleSpace();
|
|||
|
|
|||
|
if (GUILayout.Button(UI.Styles.AssetStoreBtnContent))
|
|||
|
{
|
|||
|
Application.OpenURL(url);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
EditorGUILayout.EndVertical();
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawIntegration(ShaderConfigurator.Fog.Integration integration)
|
|||
|
{
|
|||
|
EditorGUILayout.LabelField(integration.name, EditorStyles.boldLabel);
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
{
|
|||
|
Color defaultColor = GUI.contentColor;
|
|||
|
|
|||
|
GUILayout.Label(integration.thumbnail, GUILayout.Height(50f), GUILayout.Width(50f));
|
|||
|
|
|||
|
EditorGUILayout.BeginVertical();
|
|||
|
{
|
|||
|
GUILayout.Space(5);
|
|||
|
|
|||
|
if (integration.asset != ShaderConfigurator.Fog.Assets.None && integration.asset != ShaderConfigurator.Fog.Assets.UnityFog)
|
|||
|
{
|
|||
|
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
|
|||
|
{
|
|||
|
if (integration.installed) GUI.contentColor = GreenColor;
|
|||
|
if (!integration.installed) GUI.contentColor = UI.OrangeColor;
|
|||
|
EditorGUILayout.LabelField(integration.installed ? "Installed" : "Not Installed", GUILayout.MaxWidth((75f)));
|
|||
|
GUI.contentColor = defaultColor;
|
|||
|
|
|||
|
GUILayout.FlexibleSpace();
|
|||
|
|
|||
|
if (GUILayout.Button(UI.Styles.AssetStoreBtnContent))
|
|||
|
{
|
|||
|
AssetInfo.OpenAssetStore(integration.url);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
GUILayout.Space(5);
|
|||
|
}
|
|||
|
|
|||
|
if (!integration.installed)
|
|||
|
{
|
|||
|
//UI.DrawNotification("Shader library for asset not found in project", MessageType.Error);
|
|||
|
}
|
|||
|
}
|
|||
|
EditorGUILayout.EndVertical();
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawH2(string text)
|
|||
|
{
|
|||
|
Rect backgroundRect = EditorGUILayout.GetControlRect();
|
|||
|
backgroundRect.height = 25f;
|
|||
|
|
|||
|
var labelRect = backgroundRect;
|
|||
|
|
|||
|
// Background rect should be full-width
|
|||
|
backgroundRect.xMin = 0f;
|
|||
|
|
|||
|
// Background
|
|||
|
float backgroundTint = (EditorGUIUtility.isProSkin ? 0.1f : 1f);
|
|||
|
EditorGUI.DrawRect(backgroundRect, new Color(backgroundTint, backgroundTint, backgroundTint, 0.2f));
|
|||
|
|
|||
|
// Title
|
|||
|
EditorGUI.LabelField(labelRect, new GUIContent(text), Styles.H2);
|
|||
|
|
|||
|
EditorGUILayout.Space(backgroundRect.height * 0.5f);
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawFooter()
|
|||
|
{
|
|||
|
GUILayout.Space(5f);
|
|||
|
|
|||
|
Rect rect = EditorGUILayout.GetControlRect();
|
|||
|
|
|||
|
if (rect.Contains(Event.current.mousePosition))
|
|||
|
{
|
|||
|
EditorGUIUtility.AddCursorRect(new Rect(Event.current.mousePosition.x, Event.current.mousePosition.y, 27, 27), MouseCursor.Link);
|
|||
|
EditorGUI.DrawRect(rect, Color.gray * (EditorGUIUtility.isProSkin ? 0.66f : 0.20f));
|
|||
|
}
|
|||
|
|
|||
|
if (GUI.Button(rect,new GUIContent("- Staggart Creations -", "Open website"), EditorStyles.centeredGreyMiniLabel))
|
|||
|
{
|
|||
|
Application.OpenURL("http://staggart.xyz");
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static class Material
|
|||
|
{
|
|||
|
//Section toggles
|
|||
|
public class Section
|
|||
|
{
|
|||
|
public bool Expanded
|
|||
|
{
|
|||
|
get { return SessionState.GetBool(id, false); }
|
|||
|
set { SessionState.SetBool(id, value); }
|
|||
|
}
|
|||
|
public AnimBool anim;
|
|||
|
|
|||
|
public readonly string id;
|
|||
|
public GUIContent title;
|
|||
|
|
|||
|
public Section(MaterialEditor owner, string id, GUIContent title)
|
|||
|
{
|
|||
|
this.id = AssetInfo.ASSET_ABRV + "_" + id + "_SECTION";
|
|||
|
this.title = title;
|
|||
|
|
|||
|
anim = new AnimBool(true);
|
|||
|
anim.valueChanged.AddListener(owner.Repaint);
|
|||
|
anim.speed = ANIM_SPEED;
|
|||
|
anim.target = Expanded;
|
|||
|
}
|
|||
|
|
|||
|
public void DrawHeader(Action clickAction)
|
|||
|
{
|
|||
|
UI.Material.DrawHeader(title, Expanded, clickAction);
|
|||
|
anim.target = Expanded;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private const float HeaderHeight = 25f;
|
|||
|
|
|||
|
//https://github.com/Unity-Technologies/Graphics/blob/d0473769091ff202422ad13b7b764c7b6a7ef0be/com.unity.render-pipelines.core/Editor/CoreEditorUtils.cs#L460
|
|||
|
public static bool DrawHeader(GUIContent content, bool isExpanded, Action clickAction = null)
|
|||
|
{
|
|||
|
#if URP
|
|||
|
CoreEditorUtils.DrawSplitter();
|
|||
|
#endif
|
|||
|
|
|||
|
Rect backgroundRect = GUILayoutUtility.GetRect(1f, HeaderHeight);
|
|||
|
|
|||
|
#if UNITY_2022_2_OR_NEWER
|
|||
|
//Negate room made for parameter locking (material variants functionality)
|
|||
|
backgroundRect.xMin -= 15f;
|
|||
|
#endif
|
|||
|
|
|||
|
var labelRect = backgroundRect;
|
|||
|
labelRect.xMin += 8f;
|
|||
|
labelRect.xMax -= 20f + 16 + 5;
|
|||
|
|
|||
|
var foldoutRect = backgroundRect;
|
|||
|
foldoutRect.xMin -= 8f;
|
|||
|
foldoutRect.y += 0f;
|
|||
|
foldoutRect.width = HeaderHeight;
|
|||
|
foldoutRect.height = HeaderHeight;
|
|||
|
|
|||
|
// Background rect should be full-width
|
|||
|
backgroundRect.xMin = 0f;
|
|||
|
backgroundRect.width += 4f;
|
|||
|
|
|||
|
// Background
|
|||
|
float backgroundTint = (EditorGUIUtility.isProSkin ? 0.1f : 1f);
|
|||
|
if (backgroundRect.Contains(Event.current.mousePosition)) backgroundTint *= EditorGUIUtility.isProSkin ? 1.5f : 0.9f;
|
|||
|
|
|||
|
EditorGUI.DrawRect(backgroundRect, new Color(backgroundTint, backgroundTint, backgroundTint, 0.2f));
|
|||
|
|
|||
|
// Title
|
|||
|
EditorGUI.LabelField(labelRect, content, EditorStyles.boldLabel);
|
|||
|
|
|||
|
// Foldout
|
|||
|
GUI.Label(foldoutRect, new GUIContent(isExpanded ? "−" : "≡"), EditorStyles.boldLabel);
|
|||
|
|
|||
|
// Handle events
|
|||
|
var e = Event.current;
|
|||
|
|
|||
|
if (e.type == EventType.MouseDown)
|
|||
|
{
|
|||
|
if (backgroundRect.Contains(e.mousePosition))
|
|||
|
{
|
|||
|
if (e.button == 0)
|
|||
|
{
|
|||
|
isExpanded = !isExpanded;
|
|||
|
if(clickAction != null) clickAction.Invoke();
|
|||
|
}
|
|||
|
|
|||
|
e.Use();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return isExpanded;
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawIntSlider(MaterialProperty prop, string label = null, string tooltip = null)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
float value = (float)EditorGUILayout.IntSlider(new GUIContent(label ?? prop.displayName, null, tooltip), (int)prop.floatValue, (int)prop.rangeLimits.x, (int)prop.rangeLimits.y);
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != string.Empty) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
prop.floatValue = value;
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawFloatField(MaterialProperty prop, string label = null, string tooltip = null)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
float value = EditorGUILayout.FloatField(new GUIContent(label ?? prop.displayName, null, tooltip), prop.floatValue, GUILayout.MaxWidth(EditorGUIUtility.labelWidth + 50f));
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != null) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
prop.floatValue = value;
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawFloatTicker(MaterialProperty prop, string label = null, string tooltip = null, bool showReverse = false)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
float value = m_DrawFloatTicker(prop.floatValue, label ?? prop.displayName, tooltip, showReverse);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
prop.floatValue = value;
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
private static float m_DrawFloatTicker(float value, string label = null, string tooltip = null, bool showReverse = false)
|
|||
|
{
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
EditorGUILayout.PrefixLabel(new GUIContent(label, null, tooltip));
|
|||
|
if (GUILayout.Button(new GUIContent("«", "-0.1"), EditorStyles.miniButtonLeft, GUILayout.MaxWidth(20)))
|
|||
|
{
|
|||
|
value -= 0.1f;
|
|||
|
}
|
|||
|
if (GUILayout.Button(new GUIContent("‹", "-0.01"), EditorStyles.miniButtonMid, GUILayout.MaxWidth(17)))
|
|||
|
{
|
|||
|
value -= 0.01f;
|
|||
|
}
|
|||
|
|
|||
|
value = EditorGUILayout.FloatField(value, GUILayout.MaxWidth(EditorGUIUtility.fieldWidth));
|
|||
|
|
|||
|
if (GUILayout.Button(new GUIContent("›", "+0.01"), EditorStyles.miniButtonMid, GUILayout.MaxWidth(17)))
|
|||
|
{
|
|||
|
value += 0.01f;
|
|||
|
}
|
|||
|
if (GUILayout.Button(new GUIContent("»", "+0.1"), EditorStyles.miniButtonRight, GUILayout.MaxWidth(20)))
|
|||
|
{
|
|||
|
value += 0.1f;
|
|||
|
}
|
|||
|
|
|||
|
if (showReverse)
|
|||
|
{
|
|||
|
if (GUILayout.Button("Reverse", EditorStyles.miniButton, GUILayout.MaxWidth(70f)))
|
|||
|
{
|
|||
|
value = -value;
|
|||
|
}
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != null) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
return value;
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawMinMaxSlider(MaterialProperty prop, float min, float max, string label = null, string tooltip = null)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
float minVal = prop.vectorValue.x;
|
|||
|
float maxVal = prop.vectorValue.y;
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
EditorGUILayout.LabelField(new GUIContent(label, null, tooltip), GUILayout.MaxWidth(EditorGUIUtility.labelWidth));
|
|||
|
minVal = EditorGUILayout.FloatField(minVal, GUILayout.Width(EditorGUIUtility.fieldWidth));
|
|||
|
EditorGUILayout.MinMaxSlider(ref minVal, ref maxVal, min, max);
|
|||
|
maxVal = EditorGUILayout.FloatField(maxVal, GUILayout.Width(EditorGUIUtility.fieldWidth));
|
|||
|
}
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != null) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
{
|
|||
|
prop.vectorValue = new Vector4(minVal, maxVal);
|
|||
|
}
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawColorField(MaterialProperty prop, bool hdr, string name = null, string tooltip = null)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
Color color;
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
EditorGUILayout.PrefixLabel(new GUIContent(name ?? prop.displayName, tooltip));
|
|||
|
color = EditorGUILayout.ColorField(new GUIContent("", null, tooltip), prop.colorValue, true, true, hdr, GUILayout.MaxWidth(60f));
|
|||
|
|
|||
|
EditorGUILayout.LabelField($"Opacity: {Math.Round(prop.colorValue.a * 100f, 2)}%", EditorStyles.miniLabel);
|
|||
|
}
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != null) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
prop.colorValue = color;
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void DrawVector2(MaterialProperty prop, string label, string tooltip = null)
|
|||
|
{
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.BeginProperty(prop);
|
|||
|
#endif
|
|||
|
|
|||
|
EditorGUI.BeginChangeCheck();
|
|||
|
EditorGUI.showMixedValue = prop.hasMixedValue;
|
|||
|
|
|||
|
Vector2 value;
|
|||
|
using (new EditorGUILayout.HorizontalScope())
|
|||
|
{
|
|||
|
EditorGUILayout.PrefixLabel(new GUIContent(label, tooltip));
|
|||
|
value = EditorGUILayout.Vector2Field(new GUIContent("", null, tooltip), prop.vectorValue);
|
|||
|
}
|
|||
|
|
|||
|
if (ExpandTooltips && tooltip != null) EditorGUILayout.HelpBox(tooltip, MessageType.None);
|
|||
|
|
|||
|
if (EditorGUI.EndChangeCheck())
|
|||
|
prop.vectorValue = value;
|
|||
|
EditorGUI.showMixedValue = false;
|
|||
|
|
|||
|
#if UNITY_2022_1_OR_NEWER
|
|||
|
MaterialEditor.EndProperty();
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public class Styles
|
|||
|
{
|
|||
|
public static GUIStyle _NotificationArea;
|
|||
|
public static GUIStyle NotificationArea
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_NotificationArea == null)
|
|||
|
{
|
|||
|
_NotificationArea = new GUIStyle(EditorStyles.label)
|
|||
|
{
|
|||
|
//margin = new RectOffset(15, 0, 15, 0),
|
|||
|
//padding = new RectOffset(5, 5, 5, 5),
|
|||
|
richText = true,
|
|||
|
wordWrap = true,
|
|||
|
clipping = TextClipping.Overflow,
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _NotificationArea;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static Texture2D _smallGreenDot;
|
|||
|
public static Texture2D SmallGreenDot
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_smallGreenDot == null)
|
|||
|
{
|
|||
|
_smallGreenDot = EditorGUIUtility.FindTexture("d_winbtn_mac_max");
|
|||
|
}
|
|||
|
|
|||
|
return _smallGreenDot;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static Texture2D _smallOrangeDot;
|
|||
|
public static Texture2D SmallOrangeDot
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_smallOrangeDot == null)
|
|||
|
{
|
|||
|
_smallOrangeDot = EditorGUIUtility.FindTexture("d_winbtn_mac_min");
|
|||
|
}
|
|||
|
|
|||
|
return _smallOrangeDot;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static Texture2D _smallRedDot;
|
|||
|
public static Texture2D SmallRedDot
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_smallRedDot == null)
|
|||
|
{
|
|||
|
_smallRedDot = EditorGUIUtility.FindTexture("d_winbtn_mac_close_h");
|
|||
|
}
|
|||
|
|
|||
|
return _smallRedDot;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _UpdateText;
|
|||
|
public static GUIStyle UpdateText
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_UpdateText == null)
|
|||
|
{
|
|||
|
_UpdateText = new GUIStyle("Button")
|
|||
|
{
|
|||
|
//fontSize = 10,
|
|||
|
alignment = TextAnchor.MiddleLeft,
|
|||
|
stretchWidth = false,
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _UpdateText;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _Footer;
|
|||
|
public static GUIStyle Footer
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_Footer == null)
|
|||
|
{
|
|||
|
_Footer = new GUIStyle(EditorStyles.centeredGreyMiniLabel)
|
|||
|
{
|
|||
|
richText = true,
|
|||
|
alignment = TextAnchor.MiddleCenter,
|
|||
|
wordWrap = true,
|
|||
|
fontSize = 12
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _Footer;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _Button;
|
|||
|
public static GUIStyle Button
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_Button == null)
|
|||
|
{
|
|||
|
_Button = new GUIStyle(GUI.skin.button)
|
|||
|
{
|
|||
|
alignment = TextAnchor.MiddleLeft,
|
|||
|
stretchWidth = true,
|
|||
|
richText = true,
|
|||
|
wordWrap = true,
|
|||
|
padding = new RectOffset()
|
|||
|
{
|
|||
|
left = 14,
|
|||
|
right = 14,
|
|||
|
top = 8,
|
|||
|
bottom = 8
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _Button;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIContent _AssetStoreBtnContent;
|
|||
|
public static GUIContent AssetStoreBtnContent
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_AssetStoreBtnContent == null)
|
|||
|
{
|
|||
|
_AssetStoreBtnContent = new GUIContent(" View on Asset Store ", EditorGUIUtility.IconContent("Asset Store").image, "Open web page.\n\nURL may contain an affiliate ID to fund the purchase of new assets and investigate/develop integrations for them.");
|
|||
|
}
|
|||
|
|
|||
|
return _AssetStoreBtnContent;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _H1;
|
|||
|
public static GUIStyle H1
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_H1 == null)
|
|||
|
{
|
|||
|
_H1 = new GUIStyle(GUI.skin.label)
|
|||
|
{
|
|||
|
richText = true,
|
|||
|
alignment = TextAnchor.MiddleCenter,
|
|||
|
wordWrap = true,
|
|||
|
fontSize = 18,
|
|||
|
fontStyle = FontStyle.Normal
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _H1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _H2;
|
|||
|
public static GUIStyle H2
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_H2 == null)
|
|||
|
{
|
|||
|
_H2 = new GUIStyle(GUI.skin.label)
|
|||
|
{
|
|||
|
richText = true,
|
|||
|
alignment = TextAnchor.MiddleLeft,
|
|||
|
wordWrap = true,
|
|||
|
fontSize = 14,
|
|||
|
fontStyle = FontStyle.Bold
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _H2;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _Section;
|
|||
|
public static GUIStyle Section
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_Section == null)
|
|||
|
{
|
|||
|
_Section = new GUIStyle(EditorStyles.helpBox)
|
|||
|
{
|
|||
|
margin = new RectOffset(0, 0, -5, 5),
|
|||
|
padding = new RectOffset(10, 10, 5, 5),
|
|||
|
clipping = TextClipping.Clip,
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _Section;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _WordWrapLabel;
|
|||
|
public static GUIStyle WordWrapLabel
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_WordWrapLabel == null)
|
|||
|
{
|
|||
|
_WordWrapLabel = new GUIStyle(EditorStyles.label);
|
|||
|
_WordWrapLabel.wordWrap = true;
|
|||
|
_WordWrapLabel.richText = true;
|
|||
|
}
|
|||
|
|
|||
|
return _WordWrapLabel;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _BoldLabel;
|
|||
|
public static GUIStyle BoldLabel
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_BoldLabel == null)
|
|||
|
{
|
|||
|
_BoldLabel = new GUIStyle(EditorStyles.largeLabel);
|
|||
|
_BoldLabel.fontStyle = FontStyle.Bold;
|
|||
|
}
|
|||
|
|
|||
|
return _BoldLabel;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle _Tab;
|
|||
|
public static GUIStyle Tab
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (_Tab == null)
|
|||
|
{
|
|||
|
_Tab = new GUIStyle(EditorStyles.miniButtonMid)
|
|||
|
{
|
|||
|
alignment = TextAnchor.MiddleCenter,
|
|||
|
stretchWidth = true,
|
|||
|
richText = true,
|
|||
|
wordWrap = true,
|
|||
|
fontSize = 16,
|
|||
|
fixedHeight = 27.5f,
|
|||
|
fontStyle = FontStyle.Bold,
|
|||
|
padding = new RectOffset()
|
|||
|
{
|
|||
|
left = 14,
|
|||
|
right = 14,
|
|||
|
top = 3,
|
|||
|
bottom = 3
|
|||
|
}
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
return _Tab;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle s_CenterBoldLabel;
|
|||
|
public static GUIStyle CenterBoldLabel
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (s_CenterBoldLabel == null) {
|
|||
|
s_CenterBoldLabel = new GUIStyle(EditorStyles.largeLabel);
|
|||
|
s_CenterBoldLabel.alignment = TextAnchor.UpperCenter;
|
|||
|
s_CenterBoldLabel.padding = new RectOffset();
|
|||
|
s_CenterBoldLabel.fontStyle = FontStyle.Bold;
|
|||
|
}
|
|||
|
return s_CenterBoldLabel;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private static GUIStyle s_AddOnTitle;
|
|||
|
private static GUIStyle AddOnTitle
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (s_AddOnTitle == null) {
|
|||
|
s_AddOnTitle = new GUIStyle(CenterBoldLabel);
|
|||
|
s_AddOnTitle.fontSize = 14;
|
|||
|
s_AddOnTitle.alignment = TextAnchor.MiddleLeft;
|
|||
|
}
|
|||
|
return s_AddOnTitle;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|