void DrawRotation()
        {
            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            {
                Vector3 eulerAngles = (base.serializedObject.targetObject as Transform).rotation.eulerAngles;
                SetColor((eulerAngles == Vector3.zero) ? Color.white : Color.gray, 0.5f);
                GUI.skin.button.padding = new RectOffset(0, 0, 0, 0);
                Texture2D image = (Texture2D)EditorGUIUtility.Load((eulerAngles == Vector3.zero) ? "d_RotateTool" : "d_RotateTool On");

                if (GUILayout.Button(new GUIContent(image, "Reset Rotation"), GUILayout.Width(32f), GUILayout.Height(_buttonHeight)))
                {
                    Undo.RecordObject(ExTransform.transform, "Reset Rotation " + ExTransform.transform.name);
                    this.mRot.quaternionValue = Quaternion.identity;
                    base.serializedObject.ApplyModifiedProperties();
                }

                if (this.mRot != null)
                {
                    this.mRotEuler = this.mRot.quaternionValue.eulerAngles;
                }

                EditorGUI.BeginChangeCheck();
                {
                    GUI.skin.button.padding = new RectOffset(6, 6, 2, 3);
                    Vector3          localEulerAngles = (base.serializedObject.targetObject as Transform).localEulerAngles;
                    ExTransform.Axes axes             = this.CheckDifference(this.mRot);

                    GUILayoutOption opt = GUILayout.MinWidth(30f);
                    SetColor(redLt, 0.5f);
                    this.mRotEuler.x = EditorGUILayout.FloatField("X", this.mRotEuler.x, new GUILayoutOption[0]);

                    SetColor(greenLt, 0.5f);
                    this.mRotEuler.y = EditorGUILayout.FloatField("Y", this.mRotEuler.y, new GUILayoutOption[0]);

                    SetColor(blueLt, 0.5f);
                    this.mRotEuler.z = EditorGUILayout.FloatField("Z", this.mRotEuler.z, new GUILayoutOption[0]);

                    ResetColors();
                }
                if (EditorGUI.EndChangeCheck())
                {
                    Undo.RecordObject(ExTransform.transform, "Rotation Changed" + ExTransform.transform.name);
                    this.mRot.quaternionValue = Quaternion.Euler(this.mRotEuler);
                    base.serializedObject.ApplyModifiedProperties();
                }
            }
            GUILayout.EndHorizontal();
        }
 ExTransform.Axes CheckDifference(SerializedProperty property)
 {
     ExTransform.Axes axes = ExTransform.Axes.None;
     if (property.hasMultipleDifferentValues)
     {
         Vector3 eulerAngles = property.quaternionValue.eulerAngles;
         UnityEngine.Object[] targetObjects = base.serializedObject.targetObjects;
         for (int i = 0; i < targetObjects.Length; i++)
         {
             UnityEngine.Object @object = targetObjects[i];
             axes |= ExTransform.CheckDifference(@object as Transform, eulerAngles);
             if (axes == ExTransform.Axes.All)
             {
                 break;
             }
         }
     }
     return(axes);
 }
        static ExTransform.Axes CheckDifference(Transform t, Vector3 original)
        {
            Vector3 localEulerAngles = t.localEulerAngles;

            ExTransform.Axes axes = ExTransform.Axes.None;
            if (ExTransform.Differs(localEulerAngles.x, original.x))
            {
                axes |= ExTransform.Axes.X;
            }
            if (ExTransform.Differs(localEulerAngles.y, original.y))
            {
                axes |= ExTransform.Axes.Y;
            }
            if (ExTransform.Differs(localEulerAngles.z, original.z))
            {
                axes |= ExTransform.Axes.Z;
            }
            return(axes);
        }