320 lines
11 KiB
C#
320 lines
11 KiB
C#
|
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|