314 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
			
		
		
	
	
			314 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C#
		
	
	
	
| // Curved World <http://u3d.as/1W8h>
 | |
| // Copyright (c) Amazing Assets <https://amazingassets.world>
 | |
|  
 | |
| using System;
 | |
| 
 | |
| using UnityEngine;
 | |
| using UnityEditor;
 | |
| 
 | |
| 
 | |
| namespace AmazingAssets.CurvedWorld.Editor
 | |
| {
 | |
|     static internal class EditorGUIHelper 
 | |
|     {
 | |
|         #region GUI
 | |
|         public class GUIEnabled : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private bool PreviousState
 | |
|             {
 | |
|                 get;
 | |
|                 set;
 | |
|             }
 | |
| 
 | |
|             public GUIEnabled(bool newState)
 | |
|             {
 | |
|                 PreviousState = GUI.enabled;
 | |
|                 if (PreviousState == false)
 | |
|                     GUI.enabled = false;
 | |
|                 else
 | |
|                     GUI.enabled = newState;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUI.enabled = PreviousState;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class GUIColor : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private Color PreviousColor
 | |
|             {
 | |
|                 get;
 | |
|                 set;
 | |
|             }
 | |
| 
 | |
|             public GUIColor(Color newColor)
 | |
|             {
 | |
|                 PreviousColor = GUI.color;
 | |
|                 GUI.color = newColor;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUI.color = PreviousColor;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class GUIBackgroundColor : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private Color PreviousColor
 | |
|             {
 | |
|                 get;
 | |
|                 set;
 | |
|             }
 | |
| 
 | |
|             public GUIBackgroundColor(Color newColor)
 | |
|             {
 | |
|                 PreviousColor = GUI.color;
 | |
|                 GUI.backgroundColor = newColor;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUI.backgroundColor = PreviousColor;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class GUISkinLabelFontStyle : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private FontStyle PreviousStyle
 | |
|             {
 | |
|                 set;
 | |
|                 get;
 | |
|             }
 | |
| 
 | |
|             public GUISkinLabelFontStyle(FontStyle newStyle)
 | |
|             {
 | |
|                 PreviousStyle = GUI.skin.label.fontStyle;
 | |
|                 GUI.skin.label.fontStyle = newStyle;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUI.skin.label.fontStyle = PreviousStyle;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class GUISkinLabelNormalTextColor : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private Color PreviousTextColor
 | |
|             {
 | |
|                 set;
 | |
|                 get;
 | |
|             }
 | |
| 
 | |
|             public GUISkinLabelNormalTextColor(Color newColor)
 | |
|             {
 | |
|                 PreviousTextColor = GUI.skin.label.normal.textColor;
 | |
|                 GUI.skin.label.normal.textColor = newColor;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUI.skin.label.normal.textColor = PreviousTextColor;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
|         #region GUI Layout
 | |
|         public class GUILayoutBeginHorizontal : IDisposable
 | |
|         {
 | |
|             public GUILayoutBeginHorizontal()
 | |
|             {
 | |
|                 GUILayout.BeginHorizontal();
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginHorizontal(params GUILayoutOption[] layoutOptions)
 | |
|             {
 | |
|                 GUILayout.BeginHorizontal(layoutOptions);
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginHorizontal(GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 GUILayout.BeginHorizontal(style, options);
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginHorizontal(string text, GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 GUILayout.BeginHorizontal(text, style, options);
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUILayout.EndHorizontal();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class GUILayoutBeginVertical : IDisposable
 | |
|         {
 | |
|             public GUILayoutBeginVertical()
 | |
|             {
 | |
|                 GUILayout.BeginVertical();
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginVertical(params GUILayoutOption[] options)
 | |
|             {
 | |
|                 GUILayout.BeginVertical(options);
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginVertical(GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 GUILayout.BeginVertical(style, options);
 | |
|             }
 | |
| 
 | |
|             public GUILayoutBeginVertical(string text, GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 GUILayout.BeginVertical(text, style, options);
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 GUILayout.EndVertical();
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
|         #region Editor GUI
 | |
|         public class EditorGUIIndentLevel : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private int PreviousIndent
 | |
|             {
 | |
|                 get;
 | |
|                 set;
 | |
|             }
 | |
| 
 | |
|             public EditorGUIIndentLevel(int newIndent)
 | |
|             {
 | |
|                 PreviousIndent = EditorGUI.indentLevel;
 | |
|                 EditorGUI.indentLevel = EditorGUI.indentLevel + newIndent;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 EditorGUI.indentLevel = PreviousIndent;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class EditorGUIUtilityLabelWidth : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private float PreviousWidth
 | |
|             {
 | |
|                 get;
 | |
|                 set; 
 | |
|             }
 | |
| 
 | |
|             public EditorGUIUtilityLabelWidth(float newWidth)
 | |
|             {
 | |
|                 PreviousWidth = UnityEditor.EditorGUIUtility.labelWidth;
 | |
|                 UnityEditor.EditorGUIUtility.labelWidth = newWidth;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 UnityEditor.EditorGUIUtility.labelWidth = PreviousWidth;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class EditorGUIUtilityFieldWidth : IDisposable
 | |
|         {
 | |
|             [SerializeField]
 | |
|             private float PreviousWidth
 | |
|             {
 | |
|                 get;
 | |
|                 set;
 | |
|             }
 | |
| 
 | |
|             public EditorGUIUtilityFieldWidth(float newWidth)
 | |
|             {
 | |
|                 PreviousWidth = UnityEditor.EditorGUIUtility.fieldWidth;
 | |
|                 UnityEditor.EditorGUIUtility.fieldWidth = newWidth;
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 UnityEditor.EditorGUIUtility.fieldWidth = PreviousWidth;
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
|         #region Editor GUI Layout
 | |
|         public class EditorGUILayoutBeginHorizontal : IDisposable
 | |
|         {
 | |
|             public EditorGUILayoutBeginHorizontal()
 | |
|             {
 | |
|                 EditorGUILayout.BeginHorizontal();
 | |
|             }
 | |
| 
 | |
|             public EditorGUILayoutBeginHorizontal(params GUILayoutOption[] options)
 | |
|             {
 | |
|                 EditorGUILayout.BeginHorizontal(options);
 | |
|             }
 | |
| 
 | |
|             public EditorGUILayoutBeginHorizontal(GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 EditorGUILayout.BeginHorizontal(style, options);
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 EditorGUILayout.EndHorizontal();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         public class EditorGUILayoutBeginVertical : IDisposable
 | |
|         {
 | |
|             public EditorGUILayoutBeginVertical()
 | |
|             {
 | |
|                 EditorGUILayout.BeginVertical();
 | |
|             }
 | |
| 
 | |
|             public EditorGUILayoutBeginVertical(params GUILayoutOption[] options)
 | |
|             {
 | |
|                 EditorGUILayout.BeginVertical(options);
 | |
|             }
 | |
| 
 | |
|             public EditorGUILayoutBeginVertical(GUIStyle style, params GUILayoutOption[] options)
 | |
|             {
 | |
|                 EditorGUILayout.BeginVertical(style, options);
 | |
|             }
 | |
| 
 | |
|             public void Dispose()
 | |
|             {
 | |
|                 EditorGUILayout.EndVertical();
 | |
|             }
 | |
|         }
 | |
|         #endregion
 | |
| 
 | |
| 
 | |
| 
 | |
|         internal static bool ToggleAsButton(Rect rect, bool value, string label, bool hasError = false, bool hasWarning = false)
 | |
|         {
 | |
|             using (new EditorGUIHelper.GUIBackgroundColor(hasError ? Color.red : (hasWarning ? Color.yellow : GetToggleButtonColor(value))))
 | |
|             {
 | |
|                 return GUI.Toggle(rect, value, label, "Button");
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         internal static Color GetToggleButtonColor(bool isEnabled)
 | |
|         {
 | |
|             return (UnityEditor.EditorGUIUtility.isProSkin && isEnabled == true) ? Color.green * 0.6f : Color.white;
 | |
|         }
 | |
|     }
 | |
| }
 |