1059 lines
173 KiB
C#
1059 lines
173 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;
|
|||
|
using UnityEngine.Rendering;
|
|||
|
#if URP
|
|||
|
using UnityEngine.Rendering.Universal;
|
|||
|
#endif
|
|||
|
|
|||
|
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 = "iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAgAElEQVR4Aey9d7Bk2V3n+buZN71/+bwrX9Vl20vdklotg2i1BEIKGLESsJoZCBg2doeAjWAWs/vXxAbMBhMzEKHBrViCGDRohEYjkEO0mla7alNd1dVVXd68V8+bzJfeZ+7ne7KqNbMhGAFy7O7tzsrMm+ce8/PunOf95lc+bX/Xa392YI2AZxfbLWv3PLs3HLYFL28XA+Pm9du20AzZ+8d8+9Gpr9mnnn7R/vDswEKxiLXKbfv1Dz9sz4Xfb9XKlgUCZv3bk3DvA7OB+8+s6mXsvbEzNrb6J/bhP+vaWDxsu5Nmr643LZZN2k+/5YBVdn/Mbm1vWn/Ag573xnIavYAdTZv9ZOYL9rt/+az95smw1XodG8mZ/R8PN+2vXunZk1d9G0+Z7R9rWaMbtOlkzY4eP2GHDh+3/c0/tOXtit13z7h96ZmK/du/7Fk+FrC5fM8K7b5dWQpbvWGWSvWs2gxYj8/BkJk/6Fkg6lmtHrDJPHMeC9nFrQmb8WOWGXSs2+1bNDywQtXslWrcuiHPQmHW3OyZHxhYOE5fPNv1e3weWGb8kN37yIctm0pZLRCx+bWX7MbJ1+3q4pJtbe1Yp9d9Y81/2w+A/v+//r8MAf//JYsPso4IL60nzmsPr728pnhN8prgNcIL3jf43RK8orzurF8s1ORV41XhVeRV4LXOa43XKq/rvG7wqvNS+xavHq9/0NcdAPxDXIQQrtfcVOmZu6969xwOe82DNugfRgnMNPvBcCIaDzwaejL4/OsXg5+/Fg2OJvre/Yjju6f7tr3Ts43awGZyARtLdsxDD6UR2/VuzJ46eXFwX/xkr51P9H7n6UDvoeXt/njKb5cL3vKuPb0Lftwu7xT9C4z9Kq9bvEQMev2Du/6hEYC4FgvA7onE/IdD1r7/2TNfuzcxExhL3HVfsNMN+t6gj1pDp8KcvUDUrpbMltY27C274vbMtYD9y7cH7b49m7a02rMvvxa3+WzL0rG+LZc87Ja+pdG/46mu1wuP+zOzXf/4rG//4pMD+/7jPfuf398d+cy58NGrV4PdfsPr+X5vM+T3T1fqgVNewJ5nXmd4odmdNOHte//6h0AAEu8ZXic+ciLwzr9Y7D36ynL/npnxQawT9MKvbATt3XdNWjwStZ1W1YJwsodJ2QmELNqp2oO5gr3vkaD93Oe6lklGbMyv2Wefq1kuHbT3HuvYMxc8Kwx41QKWi3Wt1fVol7Qj82FbXl/HCOzaodmw3djx7CvXPGs0LdCue+EBBmcm2ZvH7p1f2/Aez44GGsGRwJnt5e5Tvm9PMt+zvCC/72018b1sBIrb93a6/Z+q+2Of2Dcz/ulmr/srhUrv0XBgkOl2LFyvtC2RSFs7Pmq9HhY0sl9OgBa13U3Z3njLpnvX7Ve/ZPaZiyE7OBK2uYmQnV307X/7bNACXt18P2CbNd9CsMJ4yrOpZNdWNpr2+q2uZaMhe3hP0A6MtK2DYLm4GbRGh/69vvV7AyzwgLU6QYtGLdytDzL9Tv/RXH7wK4mkfbrV8j7hB72f0hp4aS3fk9f3ogSQgXYYPv4BuOz98UD7RDU4G/7TxV32J+ev20QsbtmEZ6ulnsXjfQuDpE5o3DrYc0EQI/T3vKDFg54diyzhHtbtKzd9Rxxvn8W6g2gag4D5Ec9eXgzznSegmAiQKON6RTMhm0j0LDRoWwSJsbblWRL5nvAH5rUgmtTAegj5XjuAqzd8FhrC9MCVbSF52l6w2fXzgeDghyCMx0dSg7OtVvvzTOzPeclukKH5PXN9LxFADKjcDSw/hAz/AGGAQ23Qlgt07S3hU3YlsGqJUMhi+Nlgm89APOjbzk7VHm591brRH7RXanFLBDogOGY/M3PBJisn7WtLNZvFl94sEhOYHtiFlaI9dTVox2cGtg8D0Efvt7vYCxBFuelZF07/gfu7NpHqWqnQsWuVrlUY9z13te3TzxNHqIUtjA8/N9u1WKpva6uelcthyxATCYV71oAIEpGBzU4oktEP19veA53u4P77JxZ/dDSY/9yt9cx/YgUyHokafPcv4P1dv6TjTzCRX0Z6f4LXL/K6CyLwgtwsD5JW2rpo7526Zt+3N2pL1Q5+Wt+Ih1irMrBuL2zPXzxl49UXbSQu+xC64L/V7ojFvZJViNRsYe3/wttDduSuFgp5YMFOwNbQzqPptt03jyQJDSyfIDgT7NvGVt2WIJaF9ZbdWKraRx+KWDbp2RXEfTY5sCZOYJy2FuzZ5gY+YSViiHrZBlbFjugPWE7fs153YB3uNaoB+vc8iOuudLL3iwcm25/IxPu/rDW7qWrC38Xruy0BJj1v8BHE/UeAwQO8PGJ5ty/4h4hakghZIDJmL6GTk3haIeT1INi1Jl56AKUfxuC+tNWzucaM9dJxFEDJpqMt29u/bDe3WvbErahd2w7YDx5HdPPQ0xd7Fov6VoNTL6x3LAO+FMUbwP25uGdNDELp+XuOxa2A4XfyYhWR37Nbm4AKosuPdSyfReTTzuuHLJ0M2ejYjm0VghCAjzFqFkI6La4FrY6q2LcLW2KkR1QwYVsrKRtJ9Q9jPvxK3O8/1okGPonP8EkWvHZn1d/p9++WBABM9kN7Qpsfb/ZDvxbwBg9CCGha9CwkoHe5caV+0mKDlk3Fg/Z6KWufudRx1lTU71sEXRxE1AaIv2bHDllk7G6bDBaI0ODPg6u7I5fsiWtF++qlsL1tj28n9rXtz57q2x+8gJRArSTDfXx+z9bKA9tG96+X+zY34ts/fzxhbz4etiDuYKVRQQz17P79nqWYcRl7IUjYtlofWK3iWTTeA7llwyC1iXzA5meYV6RvKQgpn8NfzUJsPFeCkPZlMCQRac/fjFoy1PdGE70He8HBrxF9/rhgwUsw+Y5f3w0JMNPod3/mq6df/Kdz9x+dSUYnzQOCokSYyr0j/q3Rj9qboguWRKzvNBp2OFuwcCzq4ujtlmd4eYjaLuI3ZamJe+1o4Q9tnEDOWvgjttz17XR9zt48ddrePBeyR3eHbA3L/quv92x3roeODlkRVZKLoRC6IduGc9Mx9DaxwrsP0y+SZdBr2wuX+3YTMe9h7NX7A1SMT3vUD4hvNJAUbRz+mDg9ZBlsBkwS7gdt0BlYNoOBGvNsg/hCOtKxG8T8XyykbEAOoV7oQ6iejcUG4X3xzocul0NvwnX8BCP/Dq9lXt+x6zstAR7b6fV+d+Dbr37hRmcm3ithzIF4KXyQ7lw43oPo+Cq6/2B8047V/sjq9R0rddPWJVkSwNyWbdAoDqwN97Y7ITv/2pft0uW/gofGLRIgoRPasTQG2QkMsbun2/aOvWFbvNa1hWLfDk3TP1JGLl+h6tmD+zv2rsMdxDfiGiOxVWzZ2lqd3xrm4Vq+SPDoM8+hx1EV+WzXJkchVmRVHE8kEgpYYQsCQNdj7DnplcaNlEsgwEZRV32CxXGC051OxhoV30pIj9eKBKgqUTu7GUIVDSDi/gzi6FeD/cHv8thj3zHsM9B3igDkB//zW6XBb3dqg/eRdfMyWNJ9XK3WIOIQAt+4yWhCYdy5CLp9MXjEbmzW7De+eNI+cS4M93iG7rQ42bckWb5gGB883LZ28ZatNxO2EH3Aqv24TQVKdiR+zZ5ZCtip1bCNYsTFIIiJdN9Z+8o9BoJB59vnEw04u2tdOHN5s2urcHAVw3F9jWARxuGhebmBQZIJfebat1LHt+WVEAZg0EqNgLXrPYuGeoYzYTtw++aa51zOdLJvzQ7Bp3TXjs3F7CgE81iubMcyLcuigh7JN2wcSbJYlsToYzfIpPDe1w0Mfluw4iWYfduv74QKmMgESv8iFuv9bC8QiMZBNIa7FZotq1a3bN9s027ABTA+nK93LO1B2NJw19H+C1aNDuxaOW7r2wWbyfrW5369DhGATMN4a8FRI9GYJWIZ6zc2LU9MYHdsgb7XrNCK2k8/1LXdmbL9/gtN26z6locYcMtQK+hqiPCLZyNIESKE6Y5duFJ
|
|||
|
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;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|