using UnityEngine; using System.Reflection; #if UNITY_EDITOR using UnityEditor; #endif namespace Autohand { public class AutoToggleHeaderAttribute : PropertyAttribute { public int count; public int depth; public string label; public string tooltip; public string toggleBool; public System.Type type; /// /// Add a header above a field /// /// A title for the header label /// the number of child elements under this header /// the depth of this header element in the inspector foldout public AutoToggleHeaderAttribute(string label, int count = default, int depth = default) { this.count = count; this.depth = depth; this.label = label; } /// /// Add a header above a field with a tooltip /// /// A title for the header label /// A note or instruction shown when hovering over the header /// the number of child elements under this header /// the depth of this header element in the inspector foldout public AutoToggleHeaderAttribute(string label, string tooltip, string toggleName, System.Type classType, int count = default, int depth = default) { this.count = count; this.depth = depth; this.label = label; this.tooltip = tooltip; } } #if UNITY_EDITOR [CustomPropertyDrawer(typeof(AutoToggleHeaderAttribute))] public class AutoToggleHeaderDrawer : PropertyDrawer { const float padding = 2f; const float margin = -20f; static Font _labelFont = null; static Font labelFont { get { if(_labelFont == null) _labelFont = Resources.Load("Righteous-Regular"); return _labelFont; } } public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { EditorGUILayout.Space(); position.y += 14f; position.yMax += position.height/1.8f; var attr = (attribute as AutoToggleHeaderAttribute); var newRect = position; newRect.position = new Vector2(newRect.x+newRect.width-18, newRect.y); // draw header background and label var headerRect = new Rect(position.x + margin, position.y, (position.width - margin) + (padding * 2), position.height); EditorGUI.DrawRect(headerRect, Constants.BackgroundColor); var oldColor1 = GUI.color; if (!property.boolValue) { var newColor = new Color(0.65f, 0.65f, 0.65f, 1f); newColor.a = 1; GUI.contentColor = newColor; } var labelStyle = Constants.LabelStyle; labelStyle.font = labelFont; EditorGUI.LabelField(headerRect, new GUIContent(" " + attr.label, attr.tooltip), labelStyle); GUI.contentColor = oldColor1; var oldColor = GUI.color; GUI.color = property.boolValue ? new Color(0.7f, 1f, 0.7f) : new Color(1f, 0.7f, 0.7f); property.boolValue = EditorGUI.Toggle(newRect, property.boolValue); GUI.color = oldColor; EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); position.y += 2f; } } #endif }