res-avatar-unity/Assets/RalivDynamicPenetrationSystem/Plugins/Xiexes-Unity-Shaders-development/Editor/XSStyles.cs

320 lines
11 KiB
C#
Raw Permalink Normal View History

2023-07-16 02:51:23 +00:00
using System.Collections.Generic;
using System.IO;
using UnityEditor;
using UnityEngine;
namespace XSToonDynamicPenetration {
[InitializeOnLoad]
public class XSStyles : MonoBehaviour {
public static string ver = "2.2.4";
//Help URLs
public static string mainURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.xh0nk8x7ws1g";
public static string normalsURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.j7qze9btrmw8";
public static string shadowsURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.8l0gi0hntyfs";
public static string rimlightURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.tpxp2jrhrhxp";
public static string emissionsURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.zc983jrwb5x4";
public static string specularURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.gyu8l75mbtdq";
public static string reflURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.yqzg9axi3gi";
public static string sssURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.j2nk83f6azph";
public static string outlineURL = "https://docs.google.com/document/d/1xJ4PID_nwqVm_UCsO2c2gEdiEoWoCGeM_GDK_L8-aZE/edit#bookmark=id.jpaf9t25in8p";
public static string uiPath;
private static string patronpath;
public static class Styles {
public static GUIContent version = new GUIContent("XSToon v" + ver, "The currently installed version of XSToon.");
}
// Labels
public static void DoHeader(GUIContent HeaderText) {
GUILayout.Label(HeaderText, new GUIStyle(EditorStyles.boldLabel) {
alignment = TextAnchor.MiddleCenter,
wordWrap = true,
fontSize = 12
});
}
public static void doLabel(string text) {
GUILayout.Label(text, new GUIStyle(EditorStyles.label) {
alignment = TextAnchor.MiddleCenter,
wordWrap = true,
fontSize = 12
});
}
public static void doLabelLeft(string text) {
GUILayout.Label(text, new GUIStyle(EditorStyles.label) {
alignment = TextAnchor.MiddleLeft,
wordWrap = true,
fontSize = 12
});
}
public static void doLabelSmall(string text) {
GUILayout.Label(text, new GUIStyle(EditorStyles.label) {
alignment = TextAnchor.MiddleLeft,
wordWrap = true,
fontSize = 10
});
}
// ----
static public GUIStyle _LineStyle;
static public GUIStyle LineStyle {
get {
if (_LineStyle == null) {
_LineStyle = new GUIStyle();
_LineStyle.normal.background = EditorGUIUtility.whiteTexture;
_LineStyle.stretchWidth = true;
}
return _LineStyle;
}
}
//GUI Buttons
static public void callGradientEditor(Material focusedMat = null) {
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUI.skin = null;
if (GUILayout.Button("Open Gradient Editor", GUILayout.Width(200), GUILayout.Height(20))) {
XSGradientEditor.focusedMat = focusedMat;
XSGradientEditor.Init();
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
}
static public void ResetAdv(Material material) {
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUI.skin = null;
if (GUILayout.Button("Reset ZTest / ZWrite", GUILayout.Width(200), GUILayout.Height(20))) {
material.SetFloat("_ZTest", 4);
material.SetFloat("_ZWrite", 1);
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
}
static public void ResetAdvAll(Material material) {
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
GUI.skin = null;
if (GUILayout.Button("Reset All Advanced", GUILayout.Width(200), GUILayout.Height(20))) {
material.SetFloat("_colormask", 15);
material.SetFloat("_Stencil", 0);
material.SetFloat("_StencilComp", 0);
material.SetFloat("_StencilOp", 0);
material.SetFloat("_StencilFail", 0);
material.SetFloat("_StencilZFail", 0);
material.SetFloat("_ZWrite", 1);
material.SetFloat("_ZTest", 4);
material.SetFloat("_UseUV2forNormalsSpecular", 0);
material.SetFloat("_RampBaseAnchor", 0.5f);
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
}
static public void CallResetAdv(Material material) {
material.SetFloat("_colormask", 15);
material.SetFloat("_Stencil", 0);
material.SetFloat("_StencilComp", 0);
material.SetFloat("_StencilOp", 0);
material.SetFloat("_StencilFail", 0);
material.SetFloat("_StencilZFail", 0);
material.SetFloat("_ZWrite", 1);
material.SetFloat("_ZTest", 4);
material.SetFloat("_UseUV2forNormalsSpecular", 0);
material.SetFloat("_RampBaseAnchor", 0.5f);
}
//------
//Help Box
public static void HelpBox(string message, MessageType type) {
EditorGUILayout.HelpBox(message, type);
}
//GUI Lines
static public void Separator() {
GUILayout.Space(4);
GUILine(new Color(.3f, .3f, .3f), 1);
GUILine(new Color(.9f, .9f, .9f), 1);
GUILayout.Space(4);
}
static public void SeparatorThin() {
GUILayout.Space(2);
GUILine(new Color(.1f, .1f, .1f), 1f);
GUILine(new Color(.3f, .3f, .3f), 1f);
GUILayout.Space(2);
}
static public void SeparatorBig() {
GUILayout.Space(10);
GUILine(new Color(.3f, .3f, .3f), 2);
GUILayout.Space(1);
GUILine(new Color(.3f, .3f, .3f), 2);
GUILine(new Color(.85f, .85f, .85f), 1);
GUILayout.Space(10);
}
static public void GUILine(float height = 2f) {
GUILine(Color.black, height);
}
static public void GUILine(Color color, float height = 2f) {
Rect position = GUILayoutUtility.GetRect(0f, float.MaxValue, height, height, LineStyle);
if (Event.current.type == EventType.Repaint) {
Color orgColor = GUI.color;
GUI.color = orgColor * color;
LineStyle.Draw(position, false, false, false, false);
GUI.color = orgColor;
}
}
// --------------
//Help Buttons
public static void helpPopup(string url) //bool showBox, string title, string message, string button)
{
if (GUILayout.Button("?", "helpButton", GUILayout.Width(16), GUILayout.Height(16))) {
Application.OpenURL(url);
// showBox = true;
// if (showBox == true)
// {
// EditorUtility.DisplayDialog(title,
// message, button);
// }
}
}
//Find Asset Path
public static string findAssetPath(string finalFilePath) {
string[] guids1 = AssetDatabase.FindAssets("XSUpdater", null);
string untouchedString = AssetDatabase.GUIDToAssetPath(guids1[0]);
string[] splitString = untouchedString.Split('/');
ArrayUtility.RemoveAt(ref splitString, splitString.Length - 1);
ArrayUtility.RemoveAt(ref splitString, splitString.Length - 1);
finalFilePath = string.Join("/", splitString);
return finalFilePath;
}
//exrta buttons
public static void githubButton(int Width, int Height) {
if (GUILayout.Button("Github", GUILayout.Width(Width), GUILayout.Height(Height))) {
Application.OpenURL("https://github.com/Xiexe");
}
}
public static void discordButton(int Width, int Height) {
if (GUILayout.Button("Discord", GUILayout.Width(Width), GUILayout.Height(Height))) {
Application.OpenURL("https://discord.gg/3JDeUTw");
}
}
public static void patreonButton(int Width, int Height) {
if (GUILayout.Button("Patreon", GUILayout.Width(Width), GUILayout.Height(Height))) {
Application.OpenURL("https://www.patreon.com/xiexe");
}
}
public static void openInfoPanel(int Width, int Height) {
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
if (GUILayout.Button("Updater | Documentation", GUILayout.Width(Width), GUILayout.Height(Height))) {
XSUpdater.Init();
}
GUILayout.FlexibleSpace();
GUILayout.EndHorizontal();
}
private static Rect DrawShuriken(string title, Vector2 contentOffset, int HeaderHeight) {
var style = new GUIStyle("ShurikenModuleTitle");
style.font = new GUIStyle(EditorStyles.boldLabel).font;
style.border = new RectOffset(15, 7, 4, 4);
style.fixedHeight = HeaderHeight;
style.contentOffset = contentOffset;
var rect = GUILayoutUtility.GetRect(16f, HeaderHeight, style);
GUI.Box(rect, title, style);
return rect;
}
private static Rect DrawShurikenCenteredTitle(string title, Vector2 contentOffset, int HeaderHeight) {
var style = new GUIStyle("ShurikenModuleTitle");
style.font = new GUIStyle(EditorStyles.boldLabel).font;
style.border = new RectOffset(15, 7, 4, 4);
style.fixedHeight = HeaderHeight;
style.contentOffset = contentOffset;
style.alignment = TextAnchor.MiddleCenter;
var rect = GUILayoutUtility.GetRect(16f, HeaderHeight, style);
GUI.Box(rect, title, style);
return rect;
}
public static bool ShurikenFoldout(string title, bool display) {
var rect = DrawShuriken(title, new Vector2(20f, -2f), 22);
var e = Event.current;
var toggleRect = new Rect(rect.x + 4f, rect.y + 2f, 13f, 13f);
if (e.type == EventType.Repaint) {
EditorStyles.foldout.Draw(toggleRect, false, false, display, false);
}
if (e.type == EventType.MouseDown && rect.Contains(e.mousePosition)) {
display = !display;
e.Use();
}
return display;
}
public static void ShurikenHeader(string title) {
DrawShuriken(title, new Vector2(6f, -2f), 22);
}
public static void ShurikenHeaderCentered(string title) {
DrawShurikenCenteredTitle(title, new Vector2(0f, -2f), 22);
}
public static void constrainedShaderProperty(MaterialEditor materialEditor, MaterialProperty prop, GUIContent style, int tabSize) {
EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(30));
materialEditor.ShaderProperty(prop, style, tabSize);
EditorGUILayout.EndHorizontal();
}
public static void DoFooter() {
EditorGUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();
XSStyles.discordButton(70, 30);
XSStyles.patreonButton(70, 30);
XSStyles.githubButton(70, 30);
GUILayout.FlexibleSpace();
EditorGUILayout.EndHorizontal();
XSStyles.openInfoPanel(200, 20);
}
public static bool HelpBoxWithButton(GUIContent messageContent, GUIContent buttonContent) {
const float kButtonWidth = 60f;
const float kSpacing = 5f;
const float kButtonHeight = 20f;
// Reserve size of wrapped text
Rect contentRect = GUILayoutUtility.GetRect(messageContent, EditorStyles.helpBox);
// Reserve size of button
GUILayoutUtility.GetRect(1, kButtonHeight + kSpacing);
// Render background box with text at full height
contentRect.height += kButtonHeight + kSpacing;
GUI.Label(contentRect, messageContent, EditorStyles.helpBox);
// Button (align lower right)
Rect buttonRect = new Rect(contentRect.xMax - kButtonWidth - 4f, contentRect.yMax - kButtonHeight - 4f, kButtonWidth, kButtonHeight);
return GUI.Button(buttonRect, buttonContent);
}
}
}