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;
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |