diff --git a/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs b/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs new file mode 100644 index 0000000..56cac73 --- /dev/null +++ b/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs @@ -0,0 +1,51 @@ +using Module.Inspector.Editor.Utilities; +using UnityEditor; +using UnityEngine; + +namespace Module.Inspector.Editor +{ + [CustomPropertyDrawer(typeof(AngleDisplayAsAttribute))] + internal sealed class AngleDisplayAsAttributeDrawer : DrawerPropertyDrawer + { + public override bool Draw(Rect position, DrawerPropertyAttribute attribute, SerializedProperty property, GUIContent label, EditorPropertyUtility.Result result) + { + if (property.propertyType != SerializedPropertyType.Float) + return false; + + var att = (AngleDisplayAsAttribute)attribute; + + EditorGUI.BeginChangeCheck(); + EditorGUI.BeginProperty(position, label, property); + { + if (att.type == EAngle.Euler) + { + float toEuler = Mathf.Rad2Deg * property.floatValue; + float temp = EditorGUI.FloatField(position, label, toEuler) * Mathf.Deg2Rad; + + if (!Mathf.Approximately(temp, property.floatValue)) + property.floatValue = temp; + } + else + { + float toRadian = Mathf.Deg2Rad * property.floatValue; + float temp = EditorGUI.FloatField(position, label, toRadian) * Mathf.Rad2Deg; + + if (!Mathf.Approximately(temp, property.floatValue)) + property.floatValue = temp; + } + } + EditorGUI.EndProperty(); + bool changed = EditorGUI.EndChangeCheck(); + + if (changed) + property.serializedObject.ApplyModifiedProperties(); + + return true; + } + + public override string GetErrorMessage(SerializedProperty property) + { + return "Only supports floats"; + } + } +} \ No newline at end of file diff --git a/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs.meta b/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs.meta new file mode 100644 index 0000000..1c1c2bc --- /dev/null +++ b/Editor/Drawers/AngleDisplayAsAttributeDrawer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1cff7f97798e4a7081c733911b2420ea +timeCreated: 1767540741 \ No newline at end of file diff --git a/README.md b/README.md index a89429d..5b0dd79 100644 --- a/README.md +++ b/README.md @@ -78,6 +78,8 @@ List of all available pre-drawer attributes: List of all available drawer attributes: +* `AngleDisplayAs` + * Displays either a radian or euler float as the opposite * `EnumFlag` * Adds popup with enum type provided and allows for selecting values as flags (Requirement: Enum must have flag values) * `FilePath` diff --git a/Runtime/Drawers/AngleDisplayAsAttribute.cs b/Runtime/Drawers/AngleDisplayAsAttribute.cs new file mode 100644 index 0000000..ec7344c --- /dev/null +++ b/Runtime/Drawers/AngleDisplayAsAttribute.cs @@ -0,0 +1,16 @@ +using System; +using UnityEngine.Scripting; + +namespace Module.Inspector +{ + [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = true)] + public sealed class AngleDisplayAsAttribute : DrawerPropertyAttribute + { + public readonly EAngle type; + + public AngleDisplayAsAttribute(EAngle type) + { + this.type = type; + } + } +} \ No newline at end of file diff --git a/Runtime/Drawers/AngleDisplayAsAttribute.cs.meta b/Runtime/Drawers/AngleDisplayAsAttribute.cs.meta new file mode 100644 index 0000000..a32dea7 --- /dev/null +++ b/Runtime/Drawers/AngleDisplayAsAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 888ba1cbaa514c0fb72484e2f2d00ef3 +timeCreated: 1767540551 \ No newline at end of file diff --git a/Runtime/Enums/EAngle.cs b/Runtime/Enums/EAngle.cs new file mode 100644 index 0000000..0b8ebe2 --- /dev/null +++ b/Runtime/Enums/EAngle.cs @@ -0,0 +1,10 @@ +using System; + +namespace Module.Inspector +{ + public enum EAngle + { + Euler, + Radian + } +} \ No newline at end of file diff --git a/Runtime/Enums/EAngle.cs.meta b/Runtime/Enums/EAngle.cs.meta new file mode 100644 index 0000000..3c1b56b --- /dev/null +++ b/Runtime/Enums/EAngle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1812098cc5214e5c9b21c53535ee4a57 +timeCreated: 1767540585 \ No newline at end of file diff --git a/package.json b/package.json index e18408a..67733bb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.module.inspector", - "version": "1.11.2", + "version": "1.11.3", "displayName": "Module.Inspector", "description": "Custom inspector with various useful property drawers", "unity": "2019.2",