CapersProject/Assets/StylizedWater2/Editor/UI.cs

1059 lines
173 KiB
C#
Raw Normal View History

2024-08-06 07:37:03 +00:00
//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;
using UnityEngine.Rendering;
#if URP
using UnityEngine.Rendering.Universal;
#endif
namespace StylizedWater2
{
public class UI
{
private const string AssetIconData = "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAgAElEQVR4Aey9aZBtWXWYec695843M18Obx5rpCZqAIpBooyQWqYRCIGNLeMflkMhS1Z4jv4hqe0/HdEOyz8cLbsVLautULslt4iOljUZhG2EZEBMZiiqKKii6lH15sx8OWfeefT3rZP5VAwFVUUBJUfv927ee8/ZZw9rXmuvvW86nIyTF1t643HSGY2S9niU9HgfTSZJWkiTLMuSelpIysViUitmSYP3j2ysJYeK5eRsvZ7MlkrJI9ubyW0zs8lMVkqudTvJ0WotudJpJyfrjWSl10lO1OrJznCYzJfLif147UytmfQZ7zL1zvHseDJNtof95DDP+nmSTJMBY9ji2tZokOyOhklrOEr2xoOky+feaJz0aXNAvT7jTYaTZETbCWOuFrKkXCgw9iLjzZIac2gy3plylsxVKoyjlizyXmJehZQ58lrp95L5Ujkp8fyjO7vJrc1GUisUky/t7iY3NxpJgzZWer1kiecutlrJaa5dabeTM81mstbrJseZY4txPdnaS+6bm0/ajOlav5OsdHvJQ0tH4vsu458mwHgwTKaMdcoYC46v5PiKSZ3PFV4vthRe7IP//3P/fUDgxZPOy2v+RYZT4eV86rxu4nUzr+O8jvE6ymuB1zyvGV4NXlVeB/NHHCQ9Xm1ee7y2eG3yWuW1wmuZ19O8nuHV4WX9Pq8XLz55+OVQDgDwchjLCx2DCPd1+gvbG/etdnt3bvU6t6/2unfuDnsnx+O0XChOCsO0WJwWpkXEdnFcRG7vFyR1Mi5Mk/GomBRRG+PCINkZJEkKaqk0HafpmGfGBf5Ni+NJoZgO5or1q4u1yuNL5fqTRyq1x0/V64/Q3GVeEoOvP3flzxsByLVNXvd/eOXqG1ZarVdf7bQfaE+Gh5MpaJpOs6kafSqeweQY5MKkaQmMDtME9ZlMeBXQ2WMooJgVkrRSSCpjvov2IjdpYDqZpulkkiXFNBtCJNMR14fj5EraWrjY6949GG+PhijkrFhcO1NtPnxupvnZO5uzn6DTz/Nq8VKa/Lkofx4IQPE+x+veD61effOFvd03rU56948Gk9q4MCmPSxhFICi1VlIAZ3Bw4BGsU6Zw92TK9fI0SUFuOaR2MZlQrzDFbMSonPLwFMooZXwfQQy8p1SYTsehI0YQywSDrkBbw8Go0ErT8vXBJBmMB2ceb3XOTNbW30pz3Vc0m59/7aH5D79uYf5P6PpRXju8XtZq4uVMAHL7iU9srP/wk+3ttz7Tab0Rj+UQYrs4AfhlIQump7I8XCxyRxMuUkAGnA/yvQdXZ7wm8UXK4DuEgixAzk+SDET3uVdK+d6VWGgETTHgWampg1ooJHgOXO+Pp3gksDceR2k4TfZ4X6ZimgzL1C2vD3be9KmdnTf+q4tX/s5bl+b+9KGFxQ+8ZmHhg7R0jdfLUiq8HAlAA+3OP1q59vYv7my8bbnfvxd5Wy6WQIzuzmAEfkAgGJ6C8dQXn8V9NoYgYDhxl7Mdn+DcyXQQBFP0OQRDiQdAN7UoEECD+0PUgG3qFepSFnBtux1blRggEohlVJwmeGU0AcqRDmeguhZDWhmkSR3pUC9Qf5AUV5Ph4u9f7f7YF5EMt8w2H31wfun9bzi89D4ae5yXhubLprycCKAGVO77wysX3/XozsY71rqdV6CqU+BO0V9Pk+K4D+j5B6K6IkJGRo8P4Uw8c159GVxFEOhVEkgw6n7aQkrQGLGAwXSoaAgOl1CGSgSsv3G/kKABiDVQbZolU1TBAALDCkgyRE7GGHpFCAyVM0KqtJEUZ3nNF5VISBkaMw5yFPLr87k3npSf3G2/5tJe+9X/dXPtx1+/tPQHr188/Lt0qfHY5fU9Ly8HAgATyd3vu3rprzy8tfaXr3W7dxbBcEZgBhwHV/qWhQj30xiOBtBw8tAnQT4mW1Im8DMiiGM1eB5iQELw8h07LiSEHD7CtvNioUjr0yKcDsLhbGxIkBr0kQxB4hACkfiGJe6BzTbIx47ErkTKII2qEAZCgkBXPzmFlGlABB2+V2m+xAhKDGQERYwI4CCY0n5n744PPbN3x+evb/zoQ8cP//vXLB35/xjaF3lJg9+z8r0mgGMfvHb1PX+6eu09y+32a8B7qi6fgLH+SL5DFKdwIkDHDQsEo2oDWIF7EIRFAMDHaGHqAUpdOi7n0Tow1Ic4qJJUwPQEiknh9KLcD7ZxEnIi44lxocwlxD2ERddE4XJdnxBtK9RKyTbtaiBWiCoWQH6fKOIABLeoex3DYJiOI7BgNNQxD9Ul3CuiPmpAeRYxVC2Mku3uzp0futz+x5f2tt9y3+KR996/ePi9DNdYw/ekfK8IQP/9f/zNrzz1E59dX3vbsFAop1rZIgI9rajWgUtBvNIZEz04dzTAIuM6Bn2IempHvaESHI6z6hhjDvc/dPQEm4GqEEkxxDoCIqQB+AnMp+hsPTwEfISQR2C+A+I6EEgfApA1pyB8osiR45ECHa5OvecYqd/l6SmfU7TKFv1JfAMq1OirSgNMi8EVwh3Yo5+IOQzT9OmNnQc/tdO+78HtvYe+/+jh/5ta/5HXdz2W8L0ggJO/f+XSz/yXtdWf3BlNTk4qqH4UtxHvIiycyp1ikjIB0FN0tno+OEuOR2OHqEZHlwEoEXJsAzmeVxARqsMLyAWRq/j3m3aDxIBVAYbsAARCEbj39A0H02kvOLqQDPpIIJA5ZADID5BLJXROBtkWoLZOeZx0QyWMkgpjLxt3oMkx9V0rmGceI1QTtmGyzRzscuIAJxI1BmNpmCzwPpxMyh+/fuVd5/d2XvtDx4//+g8cOfarDOyqw/xule82AbzlNy5+5e9/YWfvrd1ReOJB8nX0MbwRwRl1eAlkATeYHXPOYA0AHCuX+U+UB27FV5/2QuTL1dbNAPwUoFMVAuA5AZ9iNEIoklfGPw1EXT+cfHx66rH4EhxLjT6qoYfkELGt8RB/nxeIBW3YGjyIaJ+hzUN0KGdXsRuKWpeBXcgEpFdH5ZA8o0kJhOtiGndgzKgfwpIskGEsQlhNniNOmezS1xZqadztn/ydy0//k2fa7Ve/5cTxf8Uj/4nXd6V8twhAn/6nf3P5yj/qTPvnxvjt5TpiF/jNAGF1sYjRyNLbw8WOokGA5MWPT+EsEG/Ax3v80Wgbw+kjLKwMAGtsFQCokqKYGekD8DxrG3L/CB5PEeVTjEvQkxObREdz9jEM20KVAiFAEOuKfT7XsSGmBn2oucelda7OaRcwVomvCtH0HCOihvAhxip2BFgPQ5C6FvQbLiJEApFWjVXyrC7sDP1k1VGyPigmvUGaPrJ9/UdWB927/uLRE/8bj/2fvL7jsYP0u7AcfPS/bC7/3Ic2t3+2n4yqOsEZLC54CwCti1p3mdPwrUyujhzC4cA9GWNoTUBqOhkG0iYsHetrAW+MuiyQjPqFuwQoSkTOhtMLQzwsxTd1dMtUA1K6z4G7kBQ8wvcCaEWp0FcLHS60CScnuw4OAmjxWh3A2Q6G52pQktJ+A7V0yu/UU/rYv0uzkpN9BFXxwQVqZYiCwslJiBYJAXswaWDMlHhOr8MxVpjblP5ZXu79wIkzv/L2s+f+OcvBq9/J5eDvtAS46/+6dul//cjW9rtuQgaMNaQwc4oYSX2AO8JHD2sZAI9BVhUp0AajEY0DUMBJ1gKScAhAylg7l320C0ZFtTY6FdGrywZI8RRAOAjKSuQH0FGRPqBw6gjCvEBLQWQabk4emz5UA95eEMAAPXGINiYg4zhdT0ppssYzTcY+h0zXLtElbNHmIjZHiq4Z4B2MaHikaKedMojWlOFvropspyohM3qeLyAFzDvA1AiSqWAbFJBaU9rrI+1gh+p/WFn5R8vD0bkfP3vun9DQl2ztO1G+kxLgofetXvrnD++039ABeHUmKIW3xhpXAEszGz3q6gwLbkTY0N8aTyBAvE/ApEgAF4qK/KW8liDCGJAUSuhh1YGgxk2DxYJejOYgEbTyU/rVbQvgS1H4hOIGVAU3Z
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 = "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";
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 DrawRenderGraphError()
{
#if UNITY_6000_0_OR_NEWER && URP
if (GraphicsSettings.GetRenderPipelineSettings<RenderGraphSettings>().enableRenderCompatibilityMode == false)
{
EditorGUILayout.HelpBox("Using Render Graph in Unity 6+ is not supported." +
"\n\nBackwards compatibility mode must be enabled.", MessageType.Error);
GUILayout.Space(-32);
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button(new GUIContent("Enable", EditorGUIUtility.IconContent("d_tab_next").image), GUILayout.Width(60)))
{
GraphicsSettings.GetRenderPipelineSettings<RenderGraphSettings>().enableRenderCompatibilityMode = true;
EditorUtility.DisplayDialog($"{AssetInfo.ASSET_NAME} v{AssetInfo.INSTALLED_VERSION}",
"Please note that this fallback option will be removed in a future Unity version, this version of Stylized Water will no longer be completely functional then." +
"\n\n" +
"A license upgrade for Unity 6+ supported version may be available, please check the documentation for current information.", "OK");
}
GUILayout.Space(8);
}
GUILayout.Space(11);
}
#endif
}
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.Width(20)))
{
value -= 0.1f;
}
if (GUILayout.Button(new GUIContent("", "-0.01"), EditorStyles.miniButtonMid, GUILayout.Width(20)))
{
value -= 0.01f;
}
value = EditorGUILayout.FloatField(value, GUILayout.MaxWidth(EditorGUIUtility.fieldWidth));
if (GUILayout.Button(new GUIContent("", "+0.01"), EditorStyles.miniButtonMid, GUILayout.Width(20)))
{
value += 0.01f;
}
if (GUILayout.Button(new GUIContent("»", "+0.1"), EditorStyles.miniButtonRight, GUILayout.Width(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 static void DrawVector2Ticker(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 = prop.vectorValue;
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.PrefixLabel(new GUIContent(label, tooltip));
if (GUILayout.Button(new GUIContent("«", "-0.1"), EditorStyles.miniButtonLeft, GUILayout.Width(20)))
{
value.x -= 0.1f;
value.y -= 0.1f;
}
if (GUILayout.Button(new GUIContent("", "-0.01"), EditorStyles.miniButtonMid, GUILayout.Width(20)))
{
value.x -= 0.01f;
value.y -= 0.01f;
}
value = EditorGUILayout.Vector2Field(new GUIContent("", null, tooltip), value, GUILayout.MaxWidth(EditorGUIUtility.fieldWidth * 2f));
if (GUILayout.Button(new GUIContent("", "+0.01"), EditorStyles.miniButtonMid, GUILayout.Width(20)))
{
value.x += 0.01f;
value.y += 0.01f;
}
if (GUILayout.Button(new GUIContent("»", "+0.1"), EditorStyles.miniButtonRight, GUILayout.Width(20)))
{
value.x += 0.1f;
value.y += 0.1f;
}
}
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 = 7,
right = 0,
top = 5,
bottom = 5
},
imagePosition = ImagePosition.ImageLeft
};
}
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, this commission helps to fund the purchase of new assets in order to 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;
}
}
}
}
}