From a804633a14e3378d20951320f6addc34c36ee3bb Mon Sep 17 00:00:00 2001 From: Anders Ejlersen Date: Thu, 21 Nov 2024 19:30:29 +0100 Subject: [PATCH] 1.10.0: Added FieldLabelFromEnum for elements in an array --- .../FieldLabelFromEnumAttributeDrawer.cs | 42 +++++++++++++++++++ .../FieldLabelFromEnumAttributeDrawer.cs.meta | 3 ++ README.md | 2 + .../Predrawers/FieldLabelFromEnumAttribute.cs | 23 ++++++++++ .../FieldLabelFromEnumAttribute.cs.meta | 3 ++ package.json | 2 +- 6 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs create mode 100644 Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs.meta create mode 100644 Runtime/Predrawers/FieldLabelFromEnumAttribute.cs create mode 100644 Runtime/Predrawers/FieldLabelFromEnumAttribute.cs.meta diff --git a/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs b/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs new file mode 100644 index 0000000..3a78ec2 --- /dev/null +++ b/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs @@ -0,0 +1,42 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Module.Inspector.Editor +{ + [CustomPropertyDrawer(typeof(FieldLabelFromEnumAttribute))] + internal sealed class FieldLabelFromEnumAttributeDrawer : PredrawerModifierPropertyDrawer + { + public override void Modify(PredrawerModifierPropertyAttribute attribute, SerializedProperty property, GUIContent label) + { + var att = (FieldLabelFromEnumAttribute)attribute; + + if (!att.type.IsEnum) + return; + + SerializedProperty sp = property.GetParent(); + + if (sp == null) + return; + + var index = sp.IndexOfProperty(property); + + if (index == -1) + return; + + try + { + string str = Enum.GetName(att.type, index); + + if (att.nicify) + str = ObjectNames.NicifyVariableName(str); + + label.text = str; + } + catch (Exception) + { + // Ignore + } + } + } +} \ No newline at end of file diff --git a/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs.meta b/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs.meta new file mode 100644 index 0000000..ff3fe89 --- /dev/null +++ b/Editor/Predrawers/FieldLabelFromEnumAttributeDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: af2e8cbad9e548688949c9dc4d1a127e +timeCreated: 1732212390 \ No newline at end of file diff --git a/README.md b/README.md index 6d072a2..f9cbcbc 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,8 @@ List of all available pre-drawer attributes: * `FieldLabelFrom` * Sets GUIContent label for `SerializedProperty` to value from another field +* `FieldLabelFromEnum` + * Sets GUIContent label for `SerializedProperty` to enum name value of array index in parent field * `FieldLabelFromType` * Sets GUIContent label for `SerializedProperty` to value type from another field * `HideLabel` diff --git a/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs b/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs new file mode 100644 index 0000000..795e15b --- /dev/null +++ b/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace Module.Inspector +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public sealed class FieldLabelFromEnumAttribute : PredrawerModifierPropertyAttribute + { + public readonly Type type; + public readonly bool nicify; + + public FieldLabelFromEnumAttribute(Type type) + { + this.type = type; + nicify = true; + } + + public FieldLabelFromEnumAttribute(Type type, bool nicify) + { + this.type = type; + this.nicify = nicify; + } + } +} \ No newline at end of file diff --git a/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs.meta b/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs.meta new file mode 100644 index 0000000..2438744 --- /dev/null +++ b/Runtime/Predrawers/FieldLabelFromEnumAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: be6a15d8da91402c9a038f8a08fc4772 +timeCreated: 1732212352 \ No newline at end of file diff --git a/package.json b/package.json index 98e2cd6..176c998 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.module.inspector", - "version": "1.9.5", + "version": "1.10.0", "displayName": "Module.Inspector", "description": "Custom inspector with various useful property drawers", "unity": "2019.2",