diff --git a/Assets/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs b/Assets/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs index 41be9f41..e6c2da41 100644 --- a/Assets/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs +++ b/Assets/NaughtyAttributes/Scripts/Core/DrawerAttributes/DropdownAttribute.cs @@ -9,9 +9,12 @@ public class DropdownAttribute : DrawerAttribute { public string ValuesName { get; private set; } - public DropdownAttribute(string valuesName) + public string DisplayFormat { get; set; } + + public DropdownAttribute(string valuesName, string displayFormat = "") { ValuesName = valuesName; + DisplayFormat = displayFormat; } } diff --git a/Assets/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs b/Assets/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs index 09725c52..73654412 100644 --- a/Assets/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs +++ b/Assets/NaughtyAttributes/Scripts/Editor/PropertyDrawers/DropdownPropertyDrawer.cs @@ -33,6 +33,13 @@ protected override void OnGUI_Internal(Rect rect, SerializedProperty property, G object valuesObject = GetValues(property, dropdownAttribute.ValuesName); FieldInfo dropdownField = ReflectionUtility.GetField(target, property.name); + Func generateDisplayValue = v => v.ToString(); + + if (!string.IsNullOrWhiteSpace(dropdownAttribute.DisplayFormat)) + { + generateDisplayValue = v => string.Format(dropdownAttribute.DisplayFormat, v); + } + if (AreValuesValid(valuesObject, dropdownField)) { if (valuesObject is IList && dropdownField.FieldType == GetElementType(valuesObject)) @@ -49,7 +56,9 @@ protected override void OnGUI_Internal(Rect rect, SerializedProperty property, G { object value = valuesList[i]; values[i] = value; - displayOptions[i] = value == null ? "" : value.ToString(); + displayOptions[i] = value == null + ? "" + : generateDisplayValue(value); } // Selected value index @@ -98,7 +107,7 @@ protected override void OnGUI_Internal(Rect rect, SerializedProperty property, G } else { - displayOptions.Add(current.Key); + displayOptions.Add(generateDisplayValue(current.Key)); } } } diff --git a/Assets/NaughtyAttributes/Scripts/Test/DropdownTest.cs b/Assets/NaughtyAttributes/Scripts/Test/DropdownTest.cs index f686f207..b0ec1501 100644 --- a/Assets/NaughtyAttributes/Scripts/Test/DropdownTest.cs +++ b/Assets/NaughtyAttributes/Scripts/Test/DropdownTest.cs @@ -7,9 +7,25 @@ public class DropdownTest : MonoBehaviour { [Dropdown("intValues")] public int intValue; + + [Dropdown("intValues", "Number: {0}")] + public int prefixedIntValue; + + [Dropdown("intValues", "{0} Megabyte(s)")] + public int suffixedIntValue; + + [Dropdown("intValues", "Show {0} Widgets")] + public int surroundedIntValue; + + [Dropdown("floatValues", "Value: {0}")] + public float floatValue; + + [Dropdown("floatValues", "{0:0.#%}")] + public float formattedFloatValue; #pragma warning disable 414 private int[] intValues = new int[] { 1, 2, 3 }; + private float[] floatValues = new float[] { 0.1234f, 0.5648f, 1.0f }; #pragma warning restore 414 public DropdownNest1 nest1; @@ -20,6 +36,15 @@ public class DropdownNest1 { [Dropdown("StringValues")] public string stringValue; + + [Dropdown("StringValues", "Letter: {0}")] + public string prefixedStringValue; + + [Dropdown("StringValues", "{0} Grade")] + public string suffixedStringValue; + + [Dropdown("StringValues", "Hello {0} World")] + public string surroundedStringValue; private List StringValues { get { return new List() { "A", "B", "C" }; } } @@ -31,6 +56,15 @@ public class DropdownNest2 { [Dropdown("GetVectorValues")] public Vector3 vectorValue; + + [Dropdown("GetVectorValues", "Go {0}")] + public Vector3 prefixedVectorValue; + + [Dropdown("GetVectorValues", "{0} is the way!")] + public Vector3 suffixedVectorValue; + + [Dropdown("GetVectorValues", "Go: {0} now!")] + public Vector3 surroundedVectorValue; private DropdownList GetVectorValues() {