// Cristian Pop - https://boxophobic.com/ using UnityEngine; using UnityEditor; using System.IO; using System.Collections.Generic; namespace Boxophobic.StyledGUI { [CustomPropertyDrawer(typeof(StyledMask))] public class StyledMaskAttributeDrawer : PropertyDrawer { StyledMask a; public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { a = (StyledMask)attribute; GUIStyle styleLabel = new GUIStyle(EditorStyles.label) { richText = true, alignment = TextAnchor.MiddleCenter, wordWrap = true }; if (Resources.Load(a.file) != null) { var layersPath = AssetDatabase.GetAssetPath(Resources.Load(a.file)); StreamReader reader = new StreamReader(layersPath); a.options = reader.ReadLine(); reader.Close(); } string[] enumSplit = a.options.Split(char.Parse(" ")); List enumOptions = new List(enumSplit.Length / 2); for (int i = 0; i < enumSplit.Length; i++) { if (i % 2 == 0) { enumOptions.Add(enumSplit[i].Replace("_", " ")); } } position.y += a.top; position.height = EditorGUIUtility.singleLineHeight; int index = property.intValue; if (a.display == "") { a.display = property.displayName; } index = EditorGUI.MaskField(position, a.display, index, enumOptions.ToArray()); if (Mathf.Abs(index) > 32000) { index = -1; } position.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; //Debug Value //EditorGUI.LabelField(position, index.ToString()); property.intValue = index; } public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { return a.top + EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing + EditorGUIUtility.singleLineHeight + a.down; } } }