summaryrefslogtreecommitdiff
path: root/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs')
-rw-r--r--Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs168
1 files changed, 168 insertions, 0 deletions
diff --git a/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs
new file mode 100644
index 00000000..789ebbb6
--- /dev/null
+++ b/Assets/Plugins/Editor/AdvancedInspector/FieldEditors/QuaternionEditor.cs
@@ -0,0 +1,168 @@
+using UnityEngine;
+using UnityEditor;
+using System;
+using System.Collections;
+
+namespace AdvancedInspector
+{
+ public class QuaternionEditor : FieldEditor
+ {
+ public override bool Expandable
+ {
+ get { return false; }
+ }
+
+ public override Type[] EditedTypes
+ {
+ get { return new Type[] { typeof(Quaternion) }; }
+ }
+
+ public override void Draw(InspectorField field, GUIStyle style)
+ {
+ float width = EditorGUIUtility.labelWidth;
+ EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH;
+
+ Quaternion[] values = field.GetValues<Quaternion>();
+ if (AdvancedInspectorControl.Level <= InspectorLevel.Advanced)
+ {
+ float[] x = new float[values.Length];
+ float[] y = new float[values.Length];
+ float[] z = new float[values.Length];
+
+ for (int i = 0; i < values.Length; i++)
+ {
+ Vector3 euler = values[i].eulerAngles;
+ x[i] = euler.x;
+ y[i] = euler.y;
+ z[i] = euler.z;
+ }
+
+ GUILayout.BeginHorizontal();
+
+ float result;
+ if (FloatEditor.DrawFloat("X", x, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles;
+ v.x = result;
+ field.SetValue(field.Instances[i], Quaternion.Euler(v));
+ }
+ }
+
+ if (FloatEditor.DrawFloat("Y", y, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles;
+ v.y = result;
+ field.SetValue(field.Instances[i], Quaternion.Euler(v));
+ }
+ }
+
+ if (FloatEditor.DrawFloat("Z", z, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Vector3 v = field.GetValue<Quaternion>(field.Instances[i]).eulerAngles;
+ v.z = result;
+ field.SetValue(field.Instances[i], Quaternion.Euler(v));
+ }
+ }
+
+ GUILayout.EndHorizontal();
+ }
+ else
+ {
+ float[] x = new float[values.Length];
+ float[] y = new float[values.Length];
+ float[] z = new float[values.Length];
+ float[] w = new float[values.Length];
+
+ for (int i = 0; i < values.Length; i++)
+ {
+ x[i] = values[i].x;
+ y[i] = values[i].y;
+ z[i] = values[i].z;
+ w[i] = values[i].w;
+ }
+
+ GUILayout.BeginHorizontal();
+
+ float result;
+ if (FloatEditor.DrawFloat("X", x, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " X");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Quaternion v = field.GetValue<Quaternion>(field.Instances[i]);
+ v.x = result;
+ field.SetValue(field.Instances[i], v);
+ }
+ }
+
+ if (FloatEditor.DrawFloat("Y", y, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Y");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Quaternion v = field.GetValue<Quaternion>(field.Instances[i]);
+ v.y = result;
+ field.SetValue(field.Instances[i], v);
+ }
+ }
+
+ GUILayout.EndHorizontal();
+ GUILayout.BeginHorizontal();
+
+ if (FloatEditor.DrawFloat("Z", z, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Z");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Quaternion v = field.GetValue<Quaternion>(field.Instances[i]);
+ v.z = result;
+ field.SetValue(field.Instances[i], v);
+ }
+ }
+
+ if (FloatEditor.DrawFloat("W", w, style, out result))
+ {
+ Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " W");
+
+ for (int i = 0; i < field.Instances.Length; i++)
+ {
+ Quaternion v = field.GetValue<Quaternion>(field.Instances[i]);
+ v.w = result;
+ field.SetValue(field.Instances[i], v);
+ }
+ }
+
+ GUILayout.EndHorizontal();
+ }
+
+ EditorGUIUtility.labelWidth = width;
+ }
+
+ public override void OnContextualClick(InspectorField field, GenericMenu menu)
+ {
+ menu.AddItem(new GUIContent("Identity"), false, Identity);
+
+ menu.AddSeparator("");
+ }
+
+ private void Identity()
+ {
+ AdvancedInspectorControl.Field.SetValue(Quaternion.identity);
+ }
+ }
+} \ No newline at end of file