ProjectDDD/Assets/External/StylizedWater2/Editor/HelpWindow.cs

804 lines
118 KiB
C#
Raw Normal View History

//Stylized Water 2
//Staggart Creations (http://staggart.xyz)
//Copyright protected under Unity Asset Store EULA
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using UnityEditor;
using UnityEditor.Build;
using UnityEditor.Rendering;
using UnityEngine;
using UnityEngine.Rendering;
#if URP
using UnityEngine.Rendering.Universal;
#endif
namespace StylizedWater2
{
public class HelpWindow : EditorWindow
{
//Window properties
private static readonly int width = 600;
private static readonly int height = 620;
[SerializeField]
private Changelog changelog;
private bool underwaterExtensionInstalled;
private bool dynamicEffectsInstalled;
[NonSerialized] private string projectDetails;
private Vector2 projectDetailsScrollPos;
[MenuItem("Window/Stylized Water 2/Hub Window", false, 1001)]
public static void ShowWindow()
{
HelpWindow editorWindow = EditorWindow.GetWindow<HelpWindow>(true, AssetInfo.ASSET_NAME, true);
//Open somewhat in the center of the screen
editorWindow.position = new Rect((Screen.currentResolution.width / 2f) - (width * 0.5f), (Screen.currentResolution.height / 2f) - (height * 0.5f), (width * 2), height);
//Fixed size
editorWindow.maxSize = new Vector2(width, height);
editorWindow.minSize = new Vector2(width, height);
editorWindow.Show();
}
[MenuItem("Window/Stylized Water 2/Forum", false, 1002)]
public static void OpenForum()
{
AssetInfo.OpenForumPage();
}
private class Constants
{
public readonly GUIStyle sectionScrollView = "PreferencesSectionBox";
public readonly GUIStyle sectionElement = "PreferencesSection";
public readonly GUIStyle selected = "OL SelectedRow";
public readonly GUIStyle sectionHeader = new GUIStyle(EditorStyles.largeLabel);
public Constants()
{
sectionScrollView = new GUIStyle(sectionScrollView);
sectionScrollView.overflow.bottom += 1;
sectionHeader.fontStyle = FontStyle.Bold;
sectionHeader.fontSize = 18;
sectionHeader.margin.top = 10;
sectionHeader.margin.left += 1;
if (!EditorGUIUtility.isProSkin)
sectionHeader.normal.textColor = new Color(0.4f, 0.4f, 0.4f, 1.0f);
else
sectionHeader.normal.textColor = new Color(0.7f, 0.7f, 0.7f, 1.0f);
}
}
static Constants constants = null;
private void OnEnable()
{
AssetInfo.VersionChecking.CheckForUpdate(false);
AssetInfo.VersionChecking.CheckUnityVersion();
underwaterExtensionInstalled = StylizedWaterEditor.UnderwaterRenderingInstalled();
dynamicEffectsInstalled = StylizedWaterEditor.DynamicEffectsInstalled();
sections = new List<Section>();
sections.Add(new Section("Home", DrawHome));
sections.Add(new Section("Installation", DrawInstallation));
sections.Add(new Section("Integrations", DrawIntegrations));
//sections.Add(new Section("Extensions", DrawExtensions));
sections.Add(new Section("Support", DrawSupport));
}
private Texture m_HeaderImg;
private Texture HeaderImg
{
get
{
if (m_HeaderImg == null)
m_HeaderImg = UI.CreateIcon("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
return m_HeaderImg;
}
}
private Texture m_ReviewIcon;
private Texture ReviewIcon
{
get
{
if (m_ReviewIcon == null)
m_ReviewIcon = UI.CreateIcon("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAD0ElEQVRYCb1XaWxMURT+ph2GqUpF2libNtQyQlClIQSR1JYgokSkPyxVS/1C/KA/CJFUxBaRWEIJIVEk+FGSirYSZUgItYWOEkuVGqP7tL7zdKZ3xps3ozPpSb73zj33nu/cd+57595naruDiIhpemg0ajzxMamG0Ci8o9KolRE1hOgfiP8W8397dDgcoNqN6Ff0AGUZWzCBenVHt76mPnA4GZhO+mI1xLRN2Mf2FtWm6ncPAW1tTLlJtQKdzUCuLw2QlYHMNfnYT/sn/z5P2z94ZzMwnoR2D6nnXtcAd2o2trItk/CRioK/zUhlYJMPe3vD2gPRGxYhJ/cgjtP0S29MJDKQSGKHHrnYqmvRmJiJHKqnpS1SX/T3Lle9DER1dIekrTMaFR8Hy+al2NjQhCgCAlXCzcAgkr0ieqqk/nrlZ9QlL8MS2m+qn5yM08uAXiGSAMnEYGIoMbZdl++8LxFUPtXA2b8vznDgS+I1UUW8IxoIr3i+Agst6cQ2Io6wEb2JiEprK5xcgmdEJYm/ETJBu2RgJ5W1RALRZeKqhzN2DtLkJaz+7kRLl0VuD1T1FSaqe6LLK1BeWALXwqnI6G5GdFdM5MsPNE7MwSMWL4fpQp435KQFU1Da09Lp8uwlMlJqnGgauwoPP1Rru+cq7/fKb/b+xWLMbGqG24ggnL5aF5pT12jBZb+Q984VZbUACkqulmJ2ixut4QTS8/1Vh+bJG2B3fMFX9mcTtTJOzYBWuZiJ2+dvY4EUjUhJfSPc6ethr3Bo5wWppt893FEWHil0cP1SMRZ7BoVz55K2Ts2F/XklfpBH0v5Z5TNPkrKjL4Usq8eS+mmbi/6IEKyHC+Gwv9LSLZuUrL2PmBnASGTWYUlTi/Y+yYngvR6RFCIjCZwfIy+lz5aEGDYDFrpgExiicHVKTUxADzomBXI2OhPK4owK5BiqPbk/Ynhakp1VV4wyMJIeUq/Dkrhe6JZug41l10zAH0YTSAkW+elbOF+81z//qb5DBmg7bbJq8+hGExjtGeR///kbzavz8WzMSjwamYWCvFO4wycLWMJHJMJKjgH+PNI2msA/6y8levdZvImbh7KTN/CG/rKVbdxVgBkxszH3yBXtyCa8PjIuBbE06L4HRhOIV1nO3cLHPvNRuv0kKmk/SiwkSgjsyJIrig5dxvBhK5Bzrcy32sVatW1+uDbK/yIHxwDYRntb6RF8GzoQ9+gnv2LyR2QhgknMrFTkPz6BWuHgX9MTOvzzwxKMRPqXExJ4L+GTEba90p4BpPDcLFBEWvwr1DgmK3av+gf86jED3McCCAAAAABJRU5ErkJggg==");
return m_ReviewIcon;
}
}
private Texture m_DocIcon;
private Texture DocIcon
{
get
{
if (m_DocIcon == null)
m_DocIcon = UI.CreateIcon("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAEzklEQVRYCbVXTUhjVxR+L8nExtHEn6KtadMZ7DCLQVtShC5MRYrVYkFEQUUQxYWLrkRdjGhVxFIcLUPp1k0XrlwquKiVUFroDJV2OiJjFVRSicaf4kz+TGLmO7fvPl7eezeNZXrhcs89f/fknPPd+yLv7+9LZiOdTjO2LMtmYgOP63N/DocjQ2dtbS1jzzcyN+AMZf0eDutB4/ycIngOfRv0/ZifKj5yWsjIbLyJcy3RaDR5dXVFUZjpMB4OTttstpt5eXkWMJr29vYCWN8SGugEogBeJz2v1/tzJBJ5AfIKUxjF9PT0uz09PXeXlpYCDQ0NZeFw+AT6zAfWrEMUQJSshoeHPV1dXQ/z8/MzC6pxiezsIUudYN1dX18/Gxoa+gpl/fbo6Ohv8Io0qqakDRk0E7ygtPf399+C8KGZAueRPS+R2+3OA/8R9nfKy8v/PDk5ucDeyXXNVlEGmNHc3Nx2MBi8dLlcIj1pZ2cn2tvb666vry+zWCxUpjKPx/N4YGDg/dHR0d9CoVDWIGw8el109EukhYWFIHrga5CnmIXEMxsTExPN4H+u+GK9gv75fXV1tbqpqenJ8fHxc8hN7WV0rZnPp3B2z0xwTV4QJXLAl2txcfEJbN/T24syQJCSUMNYKpWSkFq9nbqntBNcz8/PE8XFxXZcQFY0JWusRCLhQgPLRUVFUjKZdI6Pj/fA8DvVGISotqWk5PP5HqEEQZApTHEU//ghuJ5jlmDexExiSlNTU3fQI15kgkpjJZ52iAKIkNLY2Nittra21dcwtEZEwyEdgOzKeqfUdHz8BT3qJ6/CMNwlIhiG4Vjq7u72wPBL7k27kjyXwfUQCJXFgHlRBtgFMjg4+Mfh4eElaqvqAVaJyspKx+zs7D30SBwIeFZYWGi12+2GEm1vb0f6+vrcjY2NbyAQitgYAI9Q92tu0B4wOkcP3AdJV6sKI9wLdDVvxGKx5PLy8jPQDzDzMZkdVnXMzMx8gs2IwjCkTVSCEAIr29ra+giGP6nedMTFxQX1AfXLY52IbRWIf6CRGQMQZICl8/T0NK5/DamUVqtVLikpsSs3H3U/G4I7hYtNV7W2OimDYW1t7S8oQQiyDBiWlpZaNzY2WgsKClQEZDmcyiUcogAYDNFgt1tbW39Ag9m5B2QsDJqwLjmdTvv8/Lyvvb39ATKjBqPRPQZNZRQOUQ8wGHZ2dr4Ny0mRNQK4gcOrIa8WlFI1/U8wxPfA00AgEEfKDd3Nr1ulD9SDtMTm5mZ4ZGTknebm5goEeH0YrqysEAxH4TQDhppDOK4N3c11ampqPgP9hbI36IlKwGHog+GP3FkO6yVSza5oRZcakD3tSgmMAQhqxxrq4OAgjBctDdhlPRvOJbya6YqKCgdeP7qQRMOACBEKWJfjCv0VJdiFN/pV2aPANYtbsaGqqsojOt2MLwqAwXBycvJ2S0uLH4+hCkMzJ8gA/TJ6ij80k2fjiXqAwbCjo4NgOJ7NAckEZfw3MyY3vGA5Wb1CJdEnWYzOiMfjqVdwlkz/mvBJxiGb4dIGQQZD2XxcV1f3Db71KnHRxM0UrsPDXzf57OyMmtjwgwy41Dim7zpqUgN0NDrXISkAekcSWiN5d3dX3eNXS36/n+3x1aPy/0/iJfpMtnfwrhsgAAAAAElFTkSuQmCC");
return m_DocIcon;
}
}
private Texture m_FaqIcon;
private Texture FaqIcon
{
get
{
if (m_FaqIcon == null)
m_FaqIcon = UI.CreateIcon("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFRklEQVRYCa1XXyykVxT/vjEo1qKxSUuxiSUxTUtS3T5oMgm7NmM3EtKkL0v6sjw0G2lVmj548lCLCtG0kRINb4ZGttXSbiTYJbPjT2xaFqNhsBjs6CzKjD/9nc93ufPNmD/Sk5w5/++937nnnntHnJ+fFwgSEhIkyn7MZrMgiqIkHh0dCUFBQcLBwYFAvBKY3/HxsaBSqYSdnR0hNDRUcqOYmZkZp5CRkZFTWaSJ4uLihIWFBWkRPCUvGlCtVhN7BYPdwQK04DXAGGAI8BAL2ASdwwIM8O8Bb6TFrK+vC1FRURAFobe3V6Lsp6KiQmJFcmSwuLgoLYZk4mW4hkm/AH8XE4UxpSe6u7s7igw8gI+ez0BnZ6dTWHl5uSDSFlD6+S9nMry/BH6NiU/2wincu4AMGJGBj+BpPs/bKQOcUwC25mfIOk53IRYZcKAG7iK43d0AUgbcGAz46Otu9BdWdXd3f4bgOuUAIqVeAX9AvqHQOYlra2t7JpPp1crKyj7gKCIiQp2cnHwJeNnJUSGg8D6GyikTygV8DodvFHGSaLPZHIODg+sdHR2Wvr6+LShXgCbgGtAODNfpdBmlpaU3k5KSwiG7AGpiPz09PQmG0wrnt+BNpP2FS5SsmJub287MzHwE8TGQsvSMCpjVJ9dHNKOjo0PR0dERcqgTaW1t/ROKd5iSX0ALBvuEGdxRfN1v0OfU1taSWYvjmYoYahIDQKm7yMf6NvS/kJMSDg8PjzMyMoqh/4Fs4tTUFNHwkJCQLQSpSDgPkIVX2PMfU1JSdPC9xvsNDAzcg9yUlZVF6isOh8PC23m+oaHBVFNT8y50/6qoZQLzvE1OAyQmJoZrNJr7ysnJNjk5+VVBQcH1mJgYAVk4625kVEBOTs4bUN0hNftij1WviHcRNzY29pqbm6koE8mINL/t4sQp4uPjQyFmk4otQMPZ/WKnp6dt+KJRi8WyjMBuCkZtVHsaBHbK0FXyUVG2gJQSvwEXzGp2dvYY+sIEgouANpyMh9ii9z0NhgyRWfqhCiagW80vMBqNm0VFRc8RRCejamlpKRkD94NP9XGgkwVgteR/4GOQ5EYpLCkpmYZgAFahm76HyR+Df01y8OOH1YDVjxi65/eXl5f3EVMlx9WD+j05xbIFUEv1GQICAkStVmvHmyEJ+AEC43wOhmNgYCCbV1DLR5Zuv9u+DoI2G4yWegtbccvXGN5ve3vbATmIdOwU6HkHX3m8/fyqHTbu8PDwJngbySp6MgGf2+32SebgjW5tbdkLCwvH0tLSnmArHo2Pj/tVQ01NTdQzhmkeFb12ZaQHg0/Q1dX1or+/fwGL/hTnXre6uip1NV+CabG4Lbfh+xP5q/E1LO53ME8jIyO9voRQL3R2HwL/kh+v/6Ae2DgeaVlZGR3fMeDf5KjGLUiUwU1shxXP8NMqZQae5ufnx+BFJN2GKOLXgd/x9vP4+vp60+zs7B7sNcxHHBoaYjyjN2JjY+nB4RVwNZuDg4Mj4XjZmzO1bblzfgvfTuYvNjY2Mp6nxejx3+NPhtQmecNF+J6enpXi4mJKfQ/wAT+GWn6Q8DriG6G35ubmNuMNcElp9EeWHx9LiPkV6HJLevvCq5WVlXosJDUsLCzQn4lx1jeqq6vn5YqnGnHba0R8odDW1uY0dnt7uyTX1dXRK4j4ory8vPs4829RRuRT4BRDgtVq3TcYDC/1er0FtUWNhi6oFqBU8aAucJoBZS1gz5TOYVBQ6/0QSCcgAOgOXkL5FEiFTNe1RxAnJugtcQItLbTYM+AyIOBBemb4H7n/AIKWOUx2b5M6AAAAAElFTkSuQmCC");
return m_FaqIcon;
}
}
private Texture m_DiscordIcon;
private Texture DiscordIcon
{
get
{
if (m_DiscordIcon == null)
m_DiscordIcon = UI.CreateIcon("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAElElEQVRYCb1WbUxbZRS+t7TMQfnoYMIYA8rKwkLWaSTMqH80+7FFs8wM94FfhGXZD0O2337Fjx9qdFmMxsQtatTMMZdoZh1uEswWzOLClH1RGbD2Im3pQCylXytbW59z6VvfW+6FgoyTPL3ve85z3ve85557+oq7900K85XBPz8XLOtb5nSLx6cEnS47xTv97UOpMRuICwmAOc/n6Ru/KtPPfveYwk2nmGU4oQxkIpQBJqYiq0CgA5uKNwp5BTUyljwDLCDKBAWhZ4r5PBdSA3R6vgZo84B/QMg0A/kIcBPwBNAB/AJoyXswuIBOwM5IWjUwVwA7sMAeYAuQS4vdvRPySYMnDuIr+AfTAoDq6DZwC6gDPgFkQQ0M4iv4BpPjQN+0Vvk7WwAXQW1Q0hc+QwZegncqOLaSVg28AsKibU6bFa6o+7j9ZIMDwzM0Z6KWgWIYxxhhMZ8u6UfPrx1Na7EmvTJZ1DLwLjMu9rO86qky9IBXsS5BlvRGZIJ2b9J2Tx7rrQeafX9fKQIEQnoA93RzOtEa8/ayZfcVtQACYckDEHV6sXJt4wvR2+PLAEUAFgRYq5V3x42vhn87t/9af++nkhZncqI/0N3V2tvddaA34L8Z1OKtqthyP2zyvxJfhJu1HPqufui4fPG1v2BvkwaOXzMYjHvN655t4fnhkCvSfrL+d+j6gWM3+77QPf2804Y0G3kejVcUP0AN7FGgkw+gnozpEo9FY8nNj8JGXU2otDxzAV2uEV2OWrQszhvH3Bi4gP2kSP7Nv40htWaFZGcXGKCwkpIPwKxgJSeJRJxGUUDenLs/hKFLBRCLRYl4CuCF/GZIPH4nASVlQVEDZTOYUGTpl2fVWltLAXYqotF/QykNmFRZdq7CWL4AcEHO9lXJXD4D1ANUZWPDW1bP8M+HYTwCPJh8Krj5ptq8zds6DheXbJJgEIE3gA3ArMIH8N/lLc1FFLPE1RVbD0JN0BRsXg3jFU2CioHvA/Rellz4AOT/+/QIgpOOkHuo3Zuun2se8A8G3UOn4TfzXFRXzJ9/Bc2xu5GvYeR1eJs6wevqvD4+2n02x7jm8ZWlDxfmGity9AajkickEpGwN0rNaNTTNTE+dilgrmnCRmIJNqOaSMktz3n6t80hhbiy9JGUAYPtqPaPVlc+Wc4raRwKDNlsbRvewbBOb8itN+aZLWgyhaIuS8QtKR4OuqbCITd9dl7YnY3NIy+THy+R8EjE3nPIOWA/Mgp9F/C6IrIkOb+8atubVTW7dqHwStC75dd0/syOnpHhDuoFHyR51Ezo7sBfy+iaNrF7n58oP+F89LkKwYAUcvR96bZfPuTBdAT4DKA74/SltO1ovsAyMea9QHqSanxaL1ave65pasoft/e8T86twHUyagnXA0wuydYuDZxY7pJ+8IHvBL4HbLyv4kZEgZAgAwKcGK8Qg60Adb5TTJnhMw+8PcAl4A81n/QaELgMCMiAMOmbeZnFO6bbsdp6so5lgR1Ik0gGRuZJlIH/I8kayGgJucAoCKoBVgcs/ZSB+cr0gUTVg6mtlUkNqPktmu5fRzyST440lD0AAAAASUVORK5CYII=");
return m_DiscordIcon;
}
}
private Texture m_ForumIcon;
private Texture ForumIcon
{
get
{
if (m_ForumIcon == null)
m_ForumIcon = UI.CreateIcon("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");
return m_ForumIcon;
}
}
private Texture m_TwitterIcon;
private Texture TwitterIcon
{
get
{
if (m_TwitterIcon == null)
m_TwitterIcon = UI.CreateIcon("iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAE5ElEQVRYCZ3VW2iWdRzA8b1LnTs4U9FVzra5bB6W6WblYaQkREE3ItGBJLyNCC8CFSHspi666EZCKUiHnYSioReeJhqIWrrNLRPncu82dWpzraZTc4e+35f3Eba9h2f+4MOz932e9////f7/3/NfJCMjIxM5mIAIgvDvobj7XG9jEA8TjuX42XC+u7gDx88owCeI4kZcD9d/4PUKfsJCPIKxhpNPwXrUowUfYSYyHfA/WN1KlCAXfj8OZj0Jfj8HDehCLHOuYcLVfRkf4yk4nyv5N9qdyA9WqmfhMrWiCZfQh2lwpVy+39GLsGHyn6EMzuHvj2IvuoMlNSsrm4F5uIUvsB2/oDTuca4XYWL2RbpwFefidYzHOdRiF65jVDjRfrg8ZlgOV2QV6mDznMBSOHiqsLhF2IMo/N2nKEIEsQhWIPhsZ3biBbhfrkoTzNYKHLAQ7utZuKSJwgmexgaswnlYgJW7vW57LEYm0M+3dn8WSjAZZn4ZUdi5JmYV3eiADTwEw4lt2mV4B69hIqL4ChYzbOtGJsD9WNM1ch3ASviDP3ENJuOWVMJ7VuK9XphEPt7ENlShDTbdbziMfxE6yniyAZ4D78PBDRv1c7j8nhubMBVWuhYu9z24OjVYB1clYSRageBBB3QbKmAyF9AOq7XquXE+Y6VPYDPmweT+wD78iKSVp0qgjx9ehWeDkxXAxrMxfU1vYjGKUQ4b16tvSjMO4nv4XNJIlYB76kSeEQ4+Gw7eCCsykSwsgfeehA3Zglp8A5vXcZJGqgT8kZPbA4/CiXy1/OwkJuGB5JsxB07k94fwHdymAaSMdAn4Y6t27518PmbB/e2EFXt9Bo/BV/NbnIbJp40wCViZE9l8z6MU41AHT0wbzsm8Z5/4nPe8po0wCThIP64hggqUwS1wJbx2IA9uk/c8zM7D1UsZYRNwEAfzrbDzfSuKYA+4PTarveE2mYAN2QwTM/mkMZYEPAGr8CpsvCmwavfbV80lt3LfmGJ4zxPQbUoaYRPIYoTl+BCVsLvHw8Yz6uFWuE2DWApfTatvRB8SRpgEbLiF8JR7EW5FK9wOE3Ar/kILTKITNqNvhvfcBp/3f8qoSJdAJr+wki14BVZ0EUdQg0KUYjpcheuwH7rgSvmfcyrOwO+GMCzSJWAlG7EGJuPhcgq7cBL+M6qCSebiV/haOpnXFbAh7Y1zGLUVqRKwqg+wDjaUy+j7/TUacAcu/QRYrUm4PU5kQ5rcRLgV9kwtTGRYJEsgn6es+l24pDaXe7wTrkBwyvlv1y1xYA+iJTDxswj6wt8vg8l4bpj4g0iUQA53V+M93EcHfkA1rNwqg3BPrdatuQ23w4Z1O+x+G9UJ34AJ9uMCHiQxMgGX0we3YgHacBA1cBIHSBR9fOlZUIr5mIXLuAR/4/ZUoBBBYgP8PSxMxuwPwAwdcA8cMBPpwtfVsyLoj2P8vRieIc/hONyqn2GisQhWIMKnYmzFSzA7l8pX6yhc5nQxyAOeej1wFa26AM24AYvy+xI4n81qf8Q++HA1HMC9tIrtKIeVhQ0HLsIOdMNJbeCO+NXmtTiTegt5rsA0vI21yEY7mvAlzNJGHEu4Wm1wO2ciPy6Hq03rSvlaz0CTCdyDzeL+eL63YjdOwwrGGk7ShRPwbxvUVbgCVyIavzp29v/0qmv/9is4ZAAAAABJRU5ErkJggg==");
return m_TwitterIcon;
}
}
private Color defaultColor;
private delegate void OnGUIDelegate();
private class Section
{
public GUIContent content;
public OnGUIDelegate drawFunction;
public Section(string name, OnGUIDelegate drawFunction)
{
this.content = new GUIContent(name);
this.drawFunction = drawFunction;
}
}
private List<Section> sections;
private int _selectedSectionIndex;
private int selectedSectionIndex
{
get => _selectedSectionIndex;
set
{
_selectedSectionIndex = value;
if (_selectedSectionIndex >= sections.Count)
_selectedSectionIndex = 0;
else if (_selectedSectionIndex < 0)
_selectedSectionIndex = sections.Count - 1;
}
}
private Section selectedSection => sections[_selectedSectionIndex];
private Vector2 menuScrollPos;
private static Vector2 sectionScrollPos = Vector2.zero;
private void OnGUI()
{
EditorGUIUtility.labelWidth = width / 4f;
defaultColor = GUI.contentColor;
if (constants == null) constants = new Constants();
if (changelog == null) changelog = new Changelog();
if (EditorApplication.isCompiling)
{
EditorGUILayout.Space();
EditorGUILayout.LabelField(new GUIContent(" Compiling scripts...", EditorGUIUtility.FindTexture("cs Script Icon")), UI.Styles.H1);
EditorGUILayout.Space();
return;
}
Rect rect = EditorGUILayout.GetControlRect();
rect.x -= 3f;
rect.y -= 3f;
rect.height = 85f;
rect.width = width;
GUI.DrawTexture(rect, HeaderImg);
//float backgroundTint = EditorGUIUtility.isProSkin ? 0f : 1f;
//EditorGUI.DrawRect(rect, new Color(backgroundTint, backgroundTint, backgroundTint, 0.2f));
GUILayout.Space(-7f);
EditorGUILayout.LabelField("<size=26><color=#444444><b>" + AssetInfo.ASSET_NAME + "</b></color></size>", UI.Styles.H1);
GUILayout.Space(-5f);
EditorGUILayout.LabelField("<size=12><color=#444444><i>by Staggart Creations</i></color></size>", UI.Styles.H1);
GUILayout.Space(16f);
#if UNITY_2023_1_OR_NEWER
GUILayout.Space(4f);
#endif
if(sections == null) OnEnable();
#if !URP
UI.DrawNotification("The Universal Render Pipeline package isn't installed", MessageType.Error);
#endif
GUILayout.BeginHorizontal();
{
menuScrollPos = GUILayout.BeginScrollView(menuScrollPos, constants.sectionScrollView, GUILayout.Width(120f));
{
//GUILayout.Space(40f);
for (int i = 0; i < sections.Count; i++)
{
var section = sections[i];
Rect elementRect = GUILayoutUtility.GetRect(section.content, constants.sectionElement, GUILayout.ExpandWidth(true));
if (section == selectedSection && Event.current.type == EventType.Repaint)
{
constants.selected.Draw(elementRect, false, false, section == selectedSection, false);
}
if (GUI.Toggle(elementRect, selectedSectionIndex == i, section.content, constants.sectionElement))
{
selectedSectionIndex = i;
}
}
}
GUILayout.EndScrollView();
GUILayout.Space(5f);
GUILayout.BeginVertical();
{
//GUILayout.Label(selectedSection.content, constants.sectionHeader);
GUILayout.Space(5f);
sectionScrollPos = EditorGUILayout.BeginScrollView(sectionScrollPos);
selectedSection.drawFunction();
EditorGUILayout.EndScrollView();
}
GUILayout.EndVertical();
}
GUILayout.EndHorizontal();
}
void DrawHome()
{
using (new EditorGUILayout.VerticalScope())
{
UI.DrawH2("Thank you for licensing Stylized Water 2!");
EditorGUILayout.LabelField("This window houses common functionality and installation information.", EditorStyles.label);
EditorGUILayout.Space();
using (new EditorGUILayout.HorizontalScope())
{
GUILayout.FlexibleSpace();
if (GUILayout.Button(new GUIContent("<b><size=12> Write a review</size></b>\n<i> Support further development</i>", ReviewIcon), UI.Styles.Button, GUILayout.Height(45f), GUILayout.Width(240f)))
{
AssetInfo.OpenReviewsPage();
}
GUILayout.FlexibleSpace();
}
EditorGUILayout.Space();
}
EditorGUILayout.Space();
using (new EditorGUILayout.VerticalScope())
{
UI.DrawH2("Extension assets");
DrawExtensions();
EditorGUILayout.Space();
}
EditorGUILayout.Space();
using (new EditorGUILayout.VerticalScope())
{
#if URP
UI.DrawH2("Quick set up");
using (new EditorGUILayout.HorizontalScope())
{
if (GUILayout.Button(new GUIContent("<b><size=12> Create water grid</size></b>", EditorGUIUtility.IconContent("Mesh Icon").image), UI.Styles.Button, GUILayout.Height(45f), GUILayout.Width(200f)))
{
StylizedWaterEditor.CreateWaterGrid();
}
if (GUILayout.Button(new GUIContent("<b><size=12> Setup planar reflections</size></b>", EditorGUIUtility.IconContent("ReflectionProbe Icon").image), UI.Styles.Button, GUILayout.Height(45f), GUILayout.Width(200f)))
{
StylizedWaterEditor.CreatePlanarReflectionRenderer();
}
}
GUILayout.Space(5f);
EditorGUILayout.LabelField("<i>These, and more, options can be found under GameObject->3D Object->Water</i>", UI.Styles.WordWrapLabel);
#endif
EditorGUILayout.Space();
}
}
void DrawInstallation()
{
//Testing
//AssetInfo.compatibleVersion = false;
//AssetInfo.alphaVersion = true;
//AssetInfo.IS_UPDATED = false;
using (new EditorGUILayout.VerticalScope())
{
EditorGUILayout.Separator();
//Unity version
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Unity " + AssetInfo.VersionChecking.GetUnityVersion());
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
{
if (!AssetInfo.supportedVersion || AssetInfo.outdatedVersion)
{
GUI.contentColor = UI.OrangeColor;
EditorGUILayout.LabelField("Unsupported");
GUI.contentColor = defaultColor;
}
else if (AssetInfo.compatibleVersion && !AssetInfo.alphaVersion)
{
GUI.contentColor = UI.GreenColor;
EditorGUILayout.LabelField("Compatible");
GUI.contentColor = defaultColor;
}
if (AssetInfo.alphaVersion)
{
GUI.contentColor = UI.OrangeColor;
EditorGUILayout.LabelField("Alpha/beta", EditorStyles.boldLabel);
GUI.contentColor = defaultColor;
}
}
}
UI.DrawNotification(AssetInfo.compatibleVersion == false, "This version of Unity is not compatible." +
"\n\nPlease upgrade to at least Unity " + AssetInfo.MIN_UNITY_VERSION, MessageType.Error);
UI.DrawNotification(AssetInfo.outdatedVersion, "This version of Unity is no longer supported. Any errors or issues will need to be resolved locally." +
"\n\nPlease upgrade to at least Unity " + AssetInfo.MIN_UNITY_VERSION, MessageType.Warning);
UI.DrawNotification(AssetInfo.alphaVersion, "Only release Unity versions are subject to support and fixes. You may run into issues at own risk.", MessageType.Warning);
UI.Unity6Message();
//Version
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Asset version");
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
{
if (AssetInfo.VersionChecking.UPDATE_AVAILABLE == false)
{
GUI.contentColor = UI.GreenColor;
EditorGUILayout.LabelField(AssetInfo.INSTALLED_VERSION + " (Latest)");
GUI.contentColor = defaultColor;
}
else
{
GUI.contentColor = UI.OrangeColor;
EditorGUILayout.LabelField(AssetInfo.INSTALLED_VERSION + " (Outdated)", EditorStyles.boldLabel);
GUI.contentColor = defaultColor;
}
}
}
UI.DrawNotification(AssetInfo.VersionChecking.UPDATE_AVAILABLE, "Asset can be updated through the Package Manager. Please update any extensions as well!", "Open", () => AssetInfo.OpenInPackageManager());
changelog.Draw();
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Target graphics API");
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
{
string prefix = "Compatible";
#if !UNITY_2023_1_OR_NEWER //OpenGLES 2.0 no longer supported at all
if (PlayerSettings.GetGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget)[0] == GraphicsDeviceType.OpenGLES2)
{
GUI.contentColor = UI.RedColor;
prefix = "Incompatible";
}
else
#endif
{
GUI.contentColor = UI.GreenColor;
}
EditorGUILayout.LabelField($"{prefix} ({PlayerSettings.GetGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget)[0].ToString()})");
GUI.contentColor = defaultColor;
}
}
}
}
void DrawIntegrations()
{
UI.DrawH2("Scripting integrations");
//EditorGUILayout.LabelField("Scripting integrations", UI.Styles.H2);
//EditorGUILayout.LabelField("", GUI.skin.horizontalSlider);
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Dynamic Water Physics 2");
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
{
if (StylizedWaterEditor.DWP2Installed) GUI.contentColor = UI.GreenColor;
EditorGUILayout.LabelField(StylizedWaterEditor.DWP2Installed ? "Installed" : "Not Installed", GUILayout.MaxWidth((75f)));
GUI.contentColor = defaultColor;
GUILayout.FlexibleSpace();
if (GUILayout.Button(UI.Styles.AssetStoreBtnContent))
{
AssetInfo.OpenAssetStore("https://assetstore.unity.com/packages/slug/147990");
}
}
}
UI.DrawNotification(StylizedWaterEditor.DWP2Installed, "Set up water data provider component", "Execute", StylizedWaterEditor.SetupForDWP2);
EditorGUILayout.Space();
UI.DrawH2("Shader integrations");
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Curved World 2020");
using (new EditorGUILayout.HorizontalScope(EditorStyles.textField))
{
if (StylizedWaterEditor.CurvedWorldInstalled(out var _)) GUI.contentColor = UI.GreenColor;
EditorGUILayout.LabelField(StylizedWaterEditor.CurvedWorldInstalled(out var _) ? "Installed" : "Not Installed", GUILayout.MaxWidth((75f)));
GUI.contentColor = defaultColor;
GUILayout.FlexibleSpace();
if (GUILayout.Button(UI.Styles.AssetStoreBtnContent))
{
AssetInfo.OpenAssetStore("https://assetstore.unity.com/packages/slug/173251");
}
}
}
EditorGUILayout.Space();
UI.DrawH2("Fog integrations");
foreach (ShaderConfigurator.Fog.Integration integration in ShaderConfigurator.Fog.Integrations)
{
if(integration.asset == ShaderConfigurator.Fog.Assets.None || integration.asset == ShaderConfigurator.Fog.Assets.UnityFog) continue;
UI.DrawIntegration(integration);
EditorGUILayout.Space();
if (underwaterExtensionInstalled && (integration.underwaterCompatible == false))
{
UI.DrawNotification("Editing of shader files for this asset is required to incorporate support for the Underwater Rendering extension. (See documentation section called \"Transparent Materials\")", MessageType.Warning);
if(integration.asset == ShaderConfigurator.Fog.Assets.COZY) UI.DrawNotification("For COZY version 3.0+, an integration package comes with the asset, which must be unpacked. This contains pre-edited shader files.");
}
}
EditorGUILayout.Space();
}
void DrawExtensions()
{
using (new EditorGUILayout.VerticalScope())
{
UI.DrawExtension("Dynamic Effects",
"Enables advanced effects to be projected onto the water surface. Such as boat wakes, ripples and shoreline waves.", dynamicEffectsInstalled,
"https://assetstore.unity.com/packages/slug/257865?aid=1011l7Uk8&pubref=sw2editor", UI.DynamicEffectsAssetIcon);
EditorGUILayout.Separator();
UI.DrawExtension("Underwater Rendering",
"Extends the Stylized Water 2 shader asset with underwater rendering, by seamlessly blending the water with post processing effects.", underwaterExtensionInstalled,
"https://assetstore.unity.com/packages/slug/185030?aid=1011l7Uk8&pubref=sw2editor", UI.UnderwaterAssetIcon);
}
}
void DrawSupport()
{
UI.DrawNotification(AssetInfo.alphaVersion, "You are using an beta/alpha version of Unity. You may run into issues at own risk.", MessageType.Warning);
using (new EditorGUILayout.VerticalScope())
{
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button(new GUIContent("<b><size=12> Documentation</size></b>\n<i><size=11> Usage instructions</size></i>", DocIcon), UI.Styles.Button))
{
Application.OpenURL(AssetInfo.DOC_URL);
}
if (GUILayout.Button(new GUIContent("<b><size=12> FAQ/Troubleshooting</size></b>\n<i><size=11> Common issues and solutions</size></i>", FaqIcon), UI.Styles.Button))
{
Application.OpenURL(AssetInfo.DOC_URL + "?section=troubleshooting-10");
}
EditorGUILayout.EndHorizontal();
}
EditorGUILayout.Space();
using (new EditorGUILayout.VerticalScope())
{
UI.DrawNotification("Be sure to consult the documentation, it already covers many common topics", MessageType.Info);
EditorGUILayout.Space();
//Buttons box
EditorGUILayout.BeginHorizontal();
if (GUILayout.Button(new GUIContent("<b><size=12> Discord</size></b>\n<i><size=11> Access support</size></i>", DiscordIcon), UI.Styles.Button))
{
Application.OpenURL(AssetInfo.DISCORD_INVITE_URL);
}
if (GUILayout.Button(new GUIContent("<b><size=12> Forum</size></b>\n<i><size=11> Join the discussion</size></i>", ForumIcon), UI.Styles.Button))
{
Application.OpenURL(AssetInfo.FORUM_URL);
}
if (GUILayout.Button(new GUIContent("<b><size=12> X</size></b>\n<i><size=11> Follow developments</size></i>", TwitterIcon), UI.Styles.Button))
{
Application.OpenURL("https://twitter.com/search?q=staggart%20creations&f=user");
}
EditorGUILayout.EndHorizontal(); //Buttons box
}
EditorGUILayout.Space();
if (projectDetails == null) projectDetails = GetProjectDetails();
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Project details", EditorStyles.boldLabel);
if (GUILayout.Button("Refresh", EditorStyles.miniButton))
{
projectDetails = GetProjectDetails();
}
}
projectDetailsScrollPos = EditorGUILayout.BeginScrollView(projectDetailsScrollPos, EditorStyles.helpBox, GUILayout.Height(300f));
EditorGUILayout.LabelField(projectDetails, UI.Styles.WordWrapLabel);
EditorGUILayout.EndScrollView();
using (new EditorGUILayout.HorizontalScope())
{
EditorGUILayout.LabelField("Supplying this information is always useful!", EditorStyles.miniLabel);
if (GUILayout.Button(new GUIContent(" Copy to clipboard", EditorGUIUtility.IconContent("Clipboard").image)))
{
EditorGUIUtility.systemCopyBuffer = projectDetails;
EditorApplication.Beep();
}
}
}
private static string GetProjectDetails()
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.AppendLine($"Version: v{AssetInfo.INSTALLED_VERSION}");
stringBuilder.AppendLine($"Install location: {AssetInfo.GetRootFolder()}");
stringBuilder.AppendLine($"Unity version: {AssetInfo.VersionChecking.GetUnityVersion()}");
UnityEditor.PackageManager.PackageInfo urpPackage = AssetInfo.GetURPPackage();
if (urpPackage != null)
{
stringBuilder.AppendLine($"URP version: {urpPackage.version}");
}
else
{
stringBuilder.AppendLine($"URP version: NONE");
}
stringBuilder.AppendLine($"");
BuildTargetGroup buildTargetGroup = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget);
stringBuilder.AppendLine($"OS: {SystemInfo.operatingSystem}");
stringBuilder.AppendLine($"Platform: {EditorUserBuildSettings.activeBuildTarget}");
string scriptingBackend = string.Empty;
#if UNITY_2023_1_OR_NEWER
NamedBuildTarget buildTargetName = NamedBuildTarget.FromBuildTargetGroup(buildTargetGroup);
scriptingBackend = PlayerSettings.GetDefaultScriptingBackend(buildTargetName).ToString();
#else
scriptingBackend = PlayerSettings.GetDefaultScriptingBackend(buildTargetGroup).ToString();
#endif
stringBuilder.AppendLine($"Scripting backend: {scriptingBackend}");
stringBuilder.AppendLine($"Color space: {PlayerSettings.colorSpace}");
stringBuilder.AppendLine($"Graphics API(s): (Auto:{PlayerSettings.GetUseDefaultGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget)}) {String.Join(" -> ", PlayerSettings.GetGraphicsAPIs(EditorUserBuildSettings.activeBuildTarget))}");
stringBuilder.AppendLine($"Tessellation support: {SystemInfo.supportsTessellationShaders}");
#if UNITY_6000_0_OR_NEWER && URP
stringBuilder.AppendLine($"GPU Resident Drawer: {UniversalRenderPipeline.asset.gpuResidentDrawerMode != GPUResidentDrawerMode.Disabled}");
#endif
string VRProvider = "";
#if XR && UNITY_2020_3_OR_NEWER
EditorBuildSettings.TryGetConfigObject(UnityEngine.XR.Management.XRGeneralSettings.k_SettingsKey, out UnityEditor.XR.Management.XRGeneralSettingsPerBuildTarget buildTargetSettings);
if (buildTargetSettings && buildTargetSettings.SettingsForBuildTarget(buildTargetGroup))
{
if (buildTargetSettings.SettingsForBuildTarget(buildTargetGroup).AssignedSettings.activeLoaders.Count > 0)
{
for (int i = 0; i < buildTargetSettings.SettingsForBuildTarget(buildTargetGroup).AssignedSettings.activeLoaders.Count; i++)
{
VRProvider += $"{buildTargetSettings.SettingsForBuildTarget(buildTargetGroup).AssignedSettings.activeLoaders[i].name} + ";
}
}
}
#endif
stringBuilder.AppendLine($"Active VR plugin(s): {VRProvider}");
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($"First available fog integration: {ShaderConfigurator.Fog.GetFirstInstalled().name}");
stringBuilder.AppendLine($"Underwater Rendering installed: {StylizedWaterEditor.UnderwaterRenderingInstalled()}");
stringBuilder.AppendLine($"Dynamic Effects installed: {StylizedWaterEditor.DynamicEffectsInstalled()}");
#if URP
stringBuilder.AppendLine($"");
stringBuilder.AppendLine("Render features (on default renderer):");
ScriptableRendererFeature[] rendererFeatures = PipelineUtilities.GetDefaultRenderFeatures();
for (int i = 0; i < rendererFeatures.Length; i++)
{
stringBuilder.AppendLine($"• {rendererFeatures[i].name}");
}
#endif
#if URP
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($"Depth texture option disabled (anywhere): {PipelineUtilities.IsDepthTextureOptionDisabledAnywhere()}");
stringBuilder.AppendLine($"Opaque texture option disabled (anywhere): {PipelineUtilities.IsOpaqueTextureOptionDisabledAnywhere()}");
#if UNITY_2022_2_OR_NEWER
stringBuilder.AppendLine($"Depth Texture Mode, after transparents?: {PipelineUtilities.IsDepthAfterTransparents()}");
#endif
#endif
stringBuilder.AppendLine($"");
stringBuilder.AppendLine($"Async shader compilation: {EditorSettings.asyncShaderCompilation}");
#if UNITY_2020_3_OR_NEWER
stringBuilder.AppendLine($"Caching Shader Preprocessor: {EditorSettings.cachingShaderPreprocessor}");
#endif
#if UNITY_2022_2_OR_NEWER
stringBuilder.AppendLine($"Strict shader variant matching: {PlayerSettings.strictShaderVariantMatching}");
#endif
stringBuilder.AppendLine($"");
string defaultShaderPath = AssetDatabase.GUIDToAssetPath("d7b0192b9bf19c949900035fa781fdc4");
Shader defaultShader = AssetDatabase.LoadAssetAtPath<Shader>(defaultShaderPath);
if (defaultShader != null)
{
ShaderMessage[] shaderMessages = ShaderConfigurator.GetWarningsAndErrors(defaultShader);
#if UNITY_6000_0_OR_NEWER
//ConsoleWindowUtility.GetConsoleLogCounts(out var errors, out var _, out var _);
#endif
List<string> errorMessages = new List<string>();
List<string> warningMessages = new List<string>();
if (shaderMessages != null)
{
foreach (var t in shaderMessages)
{
string message = $"• {t.message} {t.file}:{t.line} ({t.platform})";
if (t.severity == ShaderCompilerMessageSeverity.Error)
{
errorMessages.Add(message);
}
if (t.severity == ShaderCompilerMessageSeverity.Warning)
{
warningMessages.Add(message);
}
}
}
stringBuilder.AppendLine($"Shader compile warnings ({warningMessages?.Count ?? 0}):");
foreach (var t in warningMessages)
{
stringBuilder.AppendLine(t);
}
stringBuilder.AppendLine($"Shader compile errors ({errorMessages?.Count ?? 0}):");
foreach (var t in errorMessages)
{
stringBuilder.AppendLine(t);
}
}
else
{
stringBuilder.AppendLine($"Water shader failed to compile entirely");
}
return stringBuilder.ToString();
}
private class Changelog
{
private GUIStyle changelogStyle;
private string changelogContent;
private Vector2 scrollPos;
public float maxHeight = 300f;
public Changelog()
{
string changelogPath = AssetDatabase.GUIDToAssetPath("f07fbdad38458814a87e9b627e287ccb");
TextAsset textAsset = ((TextAsset)AssetDatabase.LoadAssetAtPath(changelogPath, typeof(TextAsset)));
if (textAsset == null) return;
changelogContent = textAsset.text;
//Format version header
changelogContent = Regex.Replace(changelogContent, @"^[0-9].*", "<size=18><b>Version $0</b></size>", RegexOptions.Multiline);
//Format headers
changelogContent = Regex.Replace(changelogContent, @"(\w*Added:|Changed:|Fixed:\w*)", "<size=14><b>$0</b></size>", RegexOptions.Multiline);
//Indent items with dashes
changelogContent = Regex.Replace(changelogContent, @"^-.*", " $0", RegexOptions.Multiline);
changelogStyle = new GUIStyle(GUI.skin.label);
changelogStyle.fontSize = 12;
changelogStyle.richText = true;
changelogStyle.wordWrap = true;
}
public void Draw()
{
if (changelogContent == null)
{
UI.DrawNotification("Changelog text file could not be found. It probably wasn't imported from the asset store...", MessageType.Error);
return;
}
scrollPos = GUILayout.BeginScrollView(scrollPos, EditorStyles.textArea, GUILayout.MaxHeight(maxHeight));
GUILayout.TextArea(changelogContent, changelogStyle);
GUILayout.EndScrollView();
}
}
}
}