private void Picked(GameObject go, object tag) { InspectorField field = tag as InspectorField; if (field == null) { return; } if (field.Type == typeof(GameObject)) { field.SetValue(go); } else if (typeof(Component).IsAssignableFrom(field.Type)) { field.SetValue(go.GetComponent(field.Type)); } for (int i = 0; i < field.SerializedInstances.Length; i++) { if (field.SerializedInstances[i] is IDataChanged) { ((IDataChanged)field.SerializedInstances[i]).DataChanged(); } } }
public override void Draw(InspectorField field, GUIStyle style) { object o = GetValue(field); Type type = o.GetType(); Color color; if (type == typeof(Color32)) { Color32 color32 = (Color32)o; color = color32; } else { color = (Color)o; } EditorGUI.BeginChangeCheck(); color = EditorGUILayout.ColorField(color); if (EditorGUI.EndChangeCheck()) { if (type == typeof(Color32)) { Color32 color32 = color; field.SetValue(color32); } else { field.SetValue(color); } } }
public override void Draw(InspectorField field, GUIStyle style) { RangeValueAttribute range = field.GetAttribute <RangeValueAttribute>(); if (range == null) { return; } EditorGUILayout.BeginHorizontal(); RangeFloat[] ranges = field.GetValues <RangeFloat>(); float[] mins = new float[ranges.Length]; float[] maxs = new float[ranges.Length]; float min = ranges[0].min; float max = ranges[0].max; bool different = false; for (int i = 0; i < ranges.Length; i++) { mins[i] = ranges[i].min; maxs[i] = ranges[i].max; if (ranges[i].min != min || ranges[0].max != max) { different = true; } } if (FloatEditor.DrawFloat("", mins, out min, GUILayout.Width(64))) { for (int i = 0; i < field.Instances.Length; i++) { field.SetValue(field.Instances[i], new RangeFloat(min, ranges[i].max)); } } EditorGUI.BeginChangeCheck(); EditorGUI.showMixedValue = different; EditorGUILayout.MinMaxSlider(ref min, ref max, range.Min, range.Max); if (EditorGUI.EndChangeCheck() && min < max) { for (int i = 0; i < field.Instances.Length; i++) { field.SetValue(field.Instances[i], new RangeFloat(min, max)); } } if (FloatEditor.DrawFloat("", maxs, out max, GUILayout.Width(64))) { for (int i = 0; i < field.Instances.Length; i++) { field.SetValue(field.Instances[i], new RangeFloat(ranges[i].min, max)); } } EditorGUILayout.EndHorizontal(); }
public override void Draw(InspectorField field, GUIStyle style) { names = new List <string>(); masks = new List <int>(); for (int i = 0; i < 32; i++) { string name = LayerMask.LayerToName(i); if (!string.IsNullOrEmpty(name)) { names.Add(name); masks.Add(1 << i); } } object value = field.GetValue(); if (value != null) { bool isMask = value is LayerMask; int mask; if (isMask) { mask = (int)(LayerMask)value; } else { mask = (int)value; } int result; if (DrawLayerMaskField(mask, style, out result)) { if (isMask) { field.SetValue((LayerMask)result); } else { field.SetValue(result); } } } else { EditorGUI.showMixedValue = true; int result; if (DrawLayerMaskField(0, style, out result)) { field.SetValue(result); } } }
public override void OnLabelDragged(InspectorField field) { if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) { object result = field.GetValues()[0]; long value = Convert.ToInt64(result); result = (long)Math.Round(value + (CalculateDragSensitivity(value) * HandleUtility.niceMouseDelta * 0.1f)); RangeValueAttribute rangeValue = field.GetAttribute <RangeValueAttribute>(); if (rangeValue != null) { result = Math.Min(Math.Max((long)result, (long)rangeValue.Min), (long)rangeValue.Max); } RangeAttribute range = field.GetAttribute <RangeAttribute>(); if (range != null) { result = Math.Min(Math.Max((long)result, (long)range.min), (long)range.max); } try { result = Convert.ChangeType(result, field.Type); field.SetValue(result); } catch (Exception) { return; } } }
public override void OnLabelDragged(InspectorField field) { if (InspectorPreferences.IsDragControl(InspectorPreferences.ValueScroll)) { object result = field.GetValues()[0]; double sensitivity = CalculateDragSensitivity(result); result = Convert.ToDouble(result) + (double)(sensitivity * HandleUtility.niceMouseDelta); RangeValueAttribute rangeValue = field.GetAttribute <RangeValueAttribute>(); if (rangeValue != null) { result = Math.Min(Math.Max((double)result, rangeValue.Min), rangeValue.Max); } RangeAttribute range = field.GetAttribute <RangeAttribute>(); if (range != null) { result = Math.Min(Math.Max((double)result, range.min), range.max); } try { result = Convert.ChangeType(result, field.Type); field.SetValue(result); } catch (Exception) { return; } } }
public override void Draw(InspectorField field, GUIStyle style) { GUILayout.BeginHorizontal(); object value = GetValue(field); string text = ""; if (value != null) { text = value.ToString(); } EditorGUI.BeginChangeCheck(); string result = EditorGUILayout.TextField(text); char c; if (result.Length == 0) { c = '\0'; } else { c = result[0]; } if (EditorGUI.EndChangeCheck()) { field.SetValue(c); } GUILayout.EndHorizontal(); }
public void ModalClosed(ModalWindow window) { if (window.Result != WindowResult.Ok) { return; } field.SetValue(((DateTimeDialog)window).Time); }
public override void Draw(InspectorField field, GUIStyle style) { field.Expandable = true; if (!field.Expanded) { return; } EditorGUI.showMixedValue = field.Mixed; EditorGUI.BeginChangeCheck(); RigidbodyConstraints value = (RigidbodyConstraints)GetValue(field); int newValue = 0; EditorGUILayout.BeginHorizontal(); GUILayout.Label("Freeze Position ", GUILayout.Width(LABEL_WIDTH)); if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionX), "X", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezePositionX; } if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionY), "Y", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezePositionY; } if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezePositionZ), "Z", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezePositionZ; } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Freeze Rotation ", GUILayout.Width(LABEL_WIDTH)); if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationX), "X", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezeRotationX; } if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationY), "Y", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezeRotationY; } if (GUILayout.Toggle(value.Has(RigidbodyConstraints.FreezeRotationZ), "Z", GUILayout.Width(TOGGLE_WIDTH))) { newValue += (int)RigidbodyConstraints.FreezeRotationZ; } EditorGUILayout.EndHorizontal(); if (EditorGUI.EndChangeCheck()) { field.SetValue(Enum.ToObject(typeof(RigidbodyConstraints), newValue)); } }
public override void Draw(InspectorField field, GUIStyle style) { AnimationCurve curve = GetValue(field) as AnimationCurve; if (curve == null && !field.Mixed) curve = new AnimationCurve(); EditorGUI.BeginChangeCheck(); AnimationCurve result = EditorGUILayout.CurveField(curve); if (EditorGUI.EndChangeCheck()) field.SetValue(result); }
public override void Draw(InspectorField field, GUIStyle style) { EnumAttribute display = field.GetAttribute <EnumAttribute>(); EditorGUI.showMixedValue = field.Mixed; EditorGUI.BeginChangeCheck(); object result = null; long value = Convert.ToInt64(GetValue(field)); if (display == null || !display.Masked) { if (display == null || display.Display == EnumDisplay.DropDown) { result = DrawDropDown(field.Type, value, style, false); } else if (display.Display == EnumDisplay.Button) { result = DrawEnum(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toolbarButton : style); } else if (display.Display == EnumDisplay.Checkbox) { result = DrawEnum(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toggle : style); } } else { if (display == null || display.Display == EnumDisplay.DropDown) { result = DrawDropDown(field.Type, value, style, true); } else if (display.Display == EnumDisplay.Button) { result = DrawMasked(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toolbarButton : style); } else if (display.Display == EnumDisplay.Checkbox) { result = DrawMasked(field.Type, value, display.MaxItemsPerRow, style == null ? EditorStyles.toggle : style); } } if (EditorGUI.EndChangeCheck()) { field.SetValue(result); } }
private void DrawObjectSelector(InspectorField field) { Component behaviour = field.GetValue() as Component; if (behaviour == null) { return; } List <Component> components; if (typeof(Component).IsAssignableFrom(field.BaseType)) { components = new List <Component>(behaviour.gameObject.GetComponents(field.BaseType)); } else { components = new List <Component>(behaviour.gameObject.GetComponents(behaviour.GetType())); } if (components.Count == 1) { return; } int index = components.IndexOf(behaviour); string[] texts = new string[components.Count]; for (int i = 0; i < components.Count; i++) { texts[i] = i.ToString() + " : " + components[i].ToString(); } EditorGUILayout.BeginHorizontal(); int selection = EditorGUILayout.Popup(index, texts); EditorGUILayout.EndHorizontal(); if (selection == index) { return; } field.SetValue(components[selection]); }
public override void Draw(InspectorField field, GUIStyle style) { RangeValueAttribute rangeValue = field.GetAttribute <RangeValueAttribute>(); RangeAttribute range = field.GetAttribute <RangeAttribute>(); if (range != null && rangeValue == null) { rangeValue = new RangeValueAttribute(range.min, range.max); } AngleAttribute angle = field.GetAttribute <AngleAttribute>(); object result; if (DrawFloatingNumber(new GUIContent(""), field.GetValues(), rangeValue, angle, style, out result)) { field.SetValue(result); } }
public override void Draw(InspectorField field, GUIStyle style) { object value = GetValue(field); EditorGUI.BeginChangeCheck(); bool result; if (style != null) { result = EditorGUILayout.Toggle((bool)value, style); } else { result = EditorGUILayout.Toggle((bool)value); } if (EditorGUI.EndChangeCheck()) { field.SetValue(result); } }
public override void Draw(InspectorField field, GUIStyle style) { GUILayout.BeginHorizontal(); float width = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 0; TextFieldAttribute text = field.GetAttribute <TextFieldAttribute>(); MultilineAttribute multiline = field.GetAttribute <MultilineAttribute>(); TextAreaAttribute area = field.GetAttribute <TextAreaAttribute>(); object value = GetValue(field); EditorGUI.BeginChangeCheck(); GUIUtility.GetControlID(field.Path.GetHashCode(), FocusType.Passive); string result = ""; if ((text == null && multiline == null && area == null) || (text != null && text.Type == TextFieldType.Standard)) { if (style != null) { result = EditorGUILayout.TextField((string)value, style); } else { result = EditorGUILayout.TextField((string)value); } } else if (multiline != null || area != null || text.Type == TextFieldType.Area) { if (style != null) { result = EditorGUILayout.TextArea((string)value, style); } else { result = EditorGUILayout.TextArea((string)value); } } else if (text.Type == TextFieldType.Password) { if (style != null) { result = EditorGUILayout.PasswordField((string)value, style); } else { result = EditorGUILayout.PasswordField((string)value); } } else if (text.Type == TextFieldType.Tag) { if (style != null) { result = EditorGUILayout.TagField((string)value, style); } else { result = EditorGUILayout.TagField((string)value); } } else if (text.Type == TextFieldType.File) { if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) { result = EditorUtility.OpenFilePanel(text.Title, text.Path, text.Extension); } if (field.Mixed) { GUILayout.Label("---"); } else { GUILayout.Label((string)value); } } else if (text.Type == TextFieldType.Folder) { if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) { result = EditorUtility.OpenFolderPanel(text.Title, "", ""); } if (field.Mixed) { GUILayout.Label("---"); } else { GUILayout.Label((string)value); } } if (EditorGUI.EndChangeCheck()) { field.SetValue(result); } EditorGUIUtility.labelWidth = width; GUILayout.EndHorizontal(); }
public override void Draw(InspectorField field, GUIStyle style) { float labelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; Bounds[] values = field.GetValues <Bounds>(); float[] centerX = new float[values.Length]; float[] centerY = new float[values.Length]; float[] centerZ = new float[values.Length]; float[] extendX = new float[values.Length]; float[] extendY = new float[values.Length]; float[] extendZ = new float[values.Length]; for (int i = 0; i < values.Length; i++) { centerX[i] = values[i].center.x; centerY[i] = values[i].center.y; centerZ[i] = values[i].center.z; extendX[i] = values[i].extents.x; extendY[i] = values[i].extents.y; extendZ[i] = values[i].extents.z; } GUILayout.BeginHorizontal(); float result; EditorGUILayout.LabelField("Center: ", GUILayout.Width(48)); if (FloatEditor.DrawFloat("X", centerX, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center X"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 center = values[i].center; center.x = result; values[i].center = center; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", centerY, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center Y"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 center = values[i].center; center.y = result; values[i].center = center; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Z", centerZ, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Center Z"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 center = values[i].center; center.z = result; values[i].center = center; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Extend: ", GUILayout.Width(48)); if (FloatEditor.DrawFloat("X", extendX, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend X"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 extents = values[i].extents; extents.x = result; values[i].extents = extents; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", extendY, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend Y"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 extents = values[i].extents; extents.y = result; values[i].extents = extents; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Z", extendZ, style, out result)) { Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Extend Z"); for (int i = 0; i < field.Instances.Length; i++) { Vector3 extents = values[i].extents; extents.z = result; values[i].extents = extents; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUIUtility.labelWidth = labelWidth; }
public override void Draw(InspectorField field, GUIStyle style) { Type type = field.BaseType; float labelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; if (type == typeof(Rect)) { Rect[] values = field.GetValues<Rect>(); float[] x = new float[values.Length]; float[] y = new float[values.Length]; float[] height = new float[values.Length]; float[] width = new float[values.Length]; for (int i = 0; i < values.Length; i++) { x[i] = values[i].x; y[i] = values[i].y; height[i] = values[i].height; width[i] = values[i].width; } GUILayout.BeginHorizontal(); float result; if (FloatEditor.DrawFloat("X", x, style, out result)) { field.RecordObjects("Edit " + field.Name + " X"); for (int i = 0; i < field.Instances.Length; i++) { values[i].x = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", y, style, out result)) { field.RecordObjects("Edit " + field.Name + " Y"); for (int i = 0; i < field.Instances.Length; i++) { values[i].y = result; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (FloatEditor.DrawFloat("W", width, style, out result)) { field.RecordObjects("Edit " + field.Name + " Width"); for (int i = 0; i < field.Instances.Length; i++) { values[i].width = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("H", height, style, out result)) { field.RecordObjects("Edit " + field.Name + " Height"); for (int i = 0; i < field.Instances.Length; i++) { values[i].height = result; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); } else if (type == typeof(RectOffset)) { RectOffset[] values = field.GetValues<RectOffset>(); int[] left = new int[values.Length]; int[] right = new int[values.Length]; int[] top = new int[values.Length]; int[] bottom = new int[values.Length]; for (int i = 0; i < values.Length; i++) { left[i] = values[i].left; right[i] = values[i].right; top[i] = values[i].top; bottom[i] = values[i].bottom; } GUILayout.BeginHorizontal(); int result; if (IntegerEditor.DrawInt("L", left, style, out result)) { field.RecordObjects("Edit " + field.Name + " Left"); for (int i = 0; i < field.Instances.Length; i++) { values[i].left = result; field.SetValue(field.Instances[i], values[i]); } } if (IntegerEditor.DrawInt("R", right, style, out result)) { field.RecordObjects("Edit " + field.Name + " Right"); for (int i = 0; i < field.Instances.Length; i++) { values[i].right = result; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (IntegerEditor.DrawInt("T", top, style, out result)) { field.RecordObjects("Edit " + field.Name + " Top"); for (int i = 0; i < field.Instances.Length; i++) { values[i].top = result; field.SetValue(field.Instances[i], values[i]); } } if (IntegerEditor.DrawInt("B", bottom, style, out result)) { field.RecordObjects("Edit " + field.Name + " Bottom"); for (int i = 0; i < field.Instances.Length; i++) { values[i].bottom = result; field.SetValue(field.Instances[i], values[i]); } } GUILayout.EndHorizontal(); } EditorGUILayout.Space(); EditorGUIUtility.labelWidth = labelWidth; }
public override void Draw(InspectorField field, GUIStyle style) { IPicker picker = field.GetAttribute <IPicker>(); if (picker != null && !picker.IsPickingAvailable(field.Instances, field.GetValues())) { object obj = field.GetValue(); if (field.Mixed) { GUILayout.Label("---"); } else if (obj == null) { GUILayout.Label("None"); } else if (field.OverloadToString) { GUILayout.Label(obj.ToString()); } else if (field.Type != null) { GUILayout.Label(field.Type.Name); } return; } if (validator == null) { validator = typeof(EditorGUI).GetNestedType("ObjectFieldValidator", BindingFlags.NonPublic); } if (doObjectField == null) { doObjectField = typeof(EditorGUI).GetMethod("DoObjectField", BindingFlags.NonPublic | BindingFlags.Static, null, new Type[] { typeof(Rect), typeof(Rect), typeof(int), typeof(UnityEngine.Object), typeof(Type), typeof(SerializedProperty), validator, typeof(bool), typeof(GUIStyle) }, null); } DontAllowSceneObjectAttribute dontAllow = field.GetAttribute <DontAllowSceneObjectAttribute>();; UnityEngine.Object value = (UnityEngine.Object)GetValue(field); EditorGUILayout.BeginHorizontal(); EditorGUI.BeginChangeCheck(); Type type = field.Type; if (value != null && AdvancedInspectorControl.ShowIconPreview) { if (previewIconStyle == null) { previewIconStyle = new GUIStyle(); previewIconStyle.margin = new RectOffset(4, 2, 2, 2); previewIconStyle.padding = new RectOffset(0, 0, 0, 0); } Texture2D preview = AssetPreview.GetAssetPreview(value); if (preview != null) { int previewSize; switch (AdvancedInspectorControl.IconPreviewSize) { case IconPreviewSize.Smallest: previewSize = 16; break; case IconPreviewSize.Small: previewSize = 24; break; case IconPreviewSize.Normal: previewSize = 32; break; case IconPreviewSize.Large: previewSize = 48; break; case IconPreviewSize.Largest: previewSize = 64; break; default: previewSize = 16; break; } GUILayout.Label(preview, previewIconStyle, GUILayout.Width(previewSize), GUILayout.Height(previewSize)); } } UnityEngine.Object result = null; if (type.IsInterface) { Rect position = EditorGUILayout.GetControlRect(false, 16f); int id = GUIUtility.GetControlID(s_ObjectFieldHash, EditorGUIUtility.native, position); Delegate validation = Delegate.CreateDelegate(validator, typeof(ObjectEditor).GetMethod("ValidateObjectFieldAssignment", BindingFlags.NonPublic | BindingFlags.Static)); result = doObjectField.Invoke(null, new object[] { position, position, id, value, type, null, validation, dontAllow == null, EditorStyles.objectField }) as UnityEngine.Object; } else { result = EditorGUILayout.ObjectField(value, type, dontAllow == null); } if (EditorGUI.EndChangeCheck()) { field.SetValue(result); } if (dontAllow == null && (field.Type == typeof(GameObject) || typeof(Component).IsAssignableFrom(field.Type) || field.Type.IsAssignableFrom(typeof(Component)))) { if (GUILayout.Button(Picker, GUIStyle.none, GUILayout.Width(18), GUILayout.Height(18))) { InspectorEditor.StartPicking(Picked, field); } } EditorGUILayout.EndHorizontal(); DrawObjectSelector(field); }
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)) { field.RecordObjects("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)) { field.RecordObjects("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)) { field.RecordObjects("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)) { field.RecordObjects("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)) { field.RecordObjects("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)) { field.RecordObjects("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)) { field.RecordObjects("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 Draw(InspectorField field, GUIStyle style) { int[] days = new int[field.Instances.Length]; int[] hours = new int[field.Instances.Length]; int[] mins = new int[field.Instances.Length]; int[] secs = new int[field.Instances.Length]; for (int i = 0; i < field.Instances.Length; i++) { TimeSpan span = field.GetValue <TimeSpan>(field.Instances[i]); days[i] = span.Days; hours[i] = span.Hours; mins[i] = span.Minutes; secs[i] = span.Seconds; } float labelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 42; GUILayout.BeginHorizontal(); int result; if (IntegerEditor.DrawInt("Days", days, style, out result)) { result = Mathf.Clamp(result, 0, int.MaxValue); Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Days"); for (int i = 0; i < field.Instances.Length; i++) { TimeSpan span = field.GetValue <TimeSpan>(field.Instances[i]); span = new TimeSpan(result, span.Hours, span.Minutes, span.Seconds); field.SetValue(field.Instances[i], span); } } if (IntegerEditor.DrawInt("Hours", hours, style, out result)) { result = Mathf.Clamp(result, 0, int.MaxValue); Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Hours"); for (int i = 0; i < field.Instances.Length; i++) { TimeSpan span = field.GetValue <TimeSpan>(field.Instances[i]); span = new TimeSpan(span.Days, result, span.Minutes, span.Seconds); field.SetValue(field.Instances[i], span); } } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); if (IntegerEditor.DrawInt("Mins", mins, style, out result)) { result = Mathf.Clamp(result, 0, int.MaxValue); Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Minutes"); for (int i = 0; i < field.Instances.Length; i++) { TimeSpan span = field.GetValue <TimeSpan>(field.Instances[i]); span = new TimeSpan(span.Days, span.Hours, result, span.Seconds); field.SetValue(field.Instances[i], span); } } if (IntegerEditor.DrawInt("Secs", secs, style, out result)) { result = Mathf.Clamp(result, 0, int.MaxValue); Undo.RecordObjects(field.SerializedInstances, "Edit " + field.Name + " Seconds"); for (int i = 0; i < field.Instances.Length; i++) { TimeSpan span = field.GetValue <TimeSpan>(field.Instances[i]); span = new TimeSpan(span.Days, span.Hours, span.Minutes, result); field.SetValue(field.Instances[i], span); } } GUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUIUtility.labelWidth = labelWidth; }
public override void Draw(InspectorField field, GUIStyle style) { GUILayout.BeginHorizontal(); float width = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 0; TextFieldAttribute text = field.GetAttribute <TextFieldAttribute>(); MultilineAttribute multiline = field.GetAttribute <MultilineAttribute>(); TextAreaAttribute area = field.GetAttribute <TextAreaAttribute>(); object value = GetValue(field); EditorGUI.BeginChangeCheck(); GUIUtility.GetControlID(field.Path.GetHashCode(), FocusType.Passive); string result = ""; if ((text == null && multiline == null && area == null) || (text != null && text.Type == TextFieldType.Standard)) { if (style != null) { result = EditorGUILayout.TextField((string)value, style); } else { result = EditorGUILayout.TextField((string)value); } } else if (multiline != null || area != null || text.Type == TextFieldType.Area) { if (style != null) { result = EditorGUILayout.TextArea((string)value, style); } else { result = EditorGUILayout.TextArea((string)value); } } else if (text.Type == TextFieldType.Password) { if (style != null) { result = EditorGUILayout.PasswordField((string)value, style); } else { result = EditorGUILayout.PasswordField((string)value); } } else if (text.Type == TextFieldType.Tag) { if (style != null) { result = EditorGUILayout.TagField((string)value, style); } else { result = EditorGUILayout.TagField((string)value); } } else if (text.Type == TextFieldType.File) { if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) { result = EditorUtility.OpenFilePanel(text.Title, text.Path, text.Extension); } if (field.Mixed) { GUILayout.Label("---"); } else { GUILayout.Label((string)value); } } else if (text.Type == TextFieldType.Folder) { if (GUILayout.Button("...", GUILayout.Height(BUTTON_HEIGHT), GUILayout.Width(BUTTON_HEIGHT * 2))) { result = EditorUtility.OpenFolderPanel(text.Title, "", ""); } if (field.Mixed) { GUILayout.Label("---"); } else { GUILayout.Label((string)value); } } //Custom else if (text.Type == TextFieldType.Prefab) { if (String.IsNullOrEmpty(text.Path)) { string prefabRemoved = field.GetValue <string>().Replace("Prefabs/", ""); //string prefabRemoved = field.GetValue<string>(); string[] PrefabListNoPrefix = UnityDrawerStatics.PrefabList .Select(x => x.Replace("Prefabs/", "")) .ToArray(); PrefabListNoPrefix = AddNoneToStringArray(PrefabListNoPrefix); //int sel = Math.Max(Array.IndexOf(UnityDrawerStatics.PrefabList, prefabRemoved), 0); int sel = Math.Max(Array.IndexOf(PrefabListNoPrefix, prefabRemoved), 0); int idx = EditorGUILayout.Popup(sel, PrefabListNoPrefix); //result = "Prefabs/" + UnityDrawerStatics.PrefabList[idx]; //result = UnityDrawerStatics.PrefabList[idx]; result = "Prefabs/" + PrefabListNoPrefix[idx]; } else { //Debug.Log($"Pruning by {text.Path}"); string[] pruned = PrunePrefabListByPath(UnityDrawerStatics.PrefabList, text.Path); pruned = AddNoneToStringArray(pruned); string prefabRemoved = field.GetValue <string>().Replace("Prefabs/", ""); int sel = Math.Max(Array.IndexOf(pruned, prefabRemoved), 0); int idx = EditorGUILayout.Popup(sel, pruned); result = "Prefabs/" + pruned[idx]; //Debug.Log($"Result of prune is {result}"); } } else if (text.Type == TextFieldType.Entity) { int sel = Math.Max(Array.IndexOf(UnityDrawerStatics.EntityList, field.GetValue <string>()), 0); int idx = EditorGUILayout.Popup(sel, UnityDrawerStatics.EntityList); result = UnityDrawerStatics.EntityList[idx]; } else if (text.Type == TextFieldType.Component) { int sel = Math.Max(Array.IndexOf(UnityDrawerStatics.ComponentList, field.GetValue <string>()), 0); int idx = EditorGUILayout.Popup(sel, UnityDrawerStatics.ComponentList); result = UnityDrawerStatics.ComponentList[idx]; } if (EditorGUI.EndChangeCheck()) { field.SetValue(result); } EditorGUIUtility.labelWidth = width; GUILayout.EndHorizontal(); }
public override void Draw(InspectorField field, GUIStyle style) { Type type = field.BaseType; float width = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = VECTOR_FIELD_WIDTH; GUILayout.BeginHorizontal(); if (type == typeof(Vector2)) { Vector2[] values = field.GetValues <Vector2>(); float[] x = new float[values.Length]; float[] y = new float[values.Length]; for (int i = 0; i < values.Length; i++) { x[i] = values[i].x; y[i] = values[i].y; } float result; if (FloatEditor.DrawFloat("X", x, style, out result)) { field.RecordObjects("Edit " + field.Name + " X"); for (int i = 0; i < field.Instances.Length; i++) { values[i].x = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", y, style, out result)) { field.RecordObjects("Edit " + field.Name + " Y"); for (int i = 0; i < field.Instances.Length; i++) { values[i].y = result; field.SetValue(field.Instances[i], values[i]); } } } else if (type == typeof(Vector3)) { Vector3[] values = field.GetValues <Vector3>(); 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++) { x[i] = values[i].x; y[i] = values[i].y; z[i] = values[i].z; } float result; if (FloatEditor.DrawFloat("X", x, style, out result)) { field.RecordObjects("Edit " + field.Name + " X"); for (int i = 0; i < field.Instances.Length; i++) { values[i].x = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", y, style, out result)) { field.RecordObjects("Edit " + field.Name + " Y"); for (int i = 0; i < field.Instances.Length; i++) { values[i].y = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Z", z, style, out result)) { field.RecordObjects("Edit " + field.Name + " Z"); for (int i = 0; i < field.Instances.Length; i++) { values[i].z = result; field.SetValue(field.Instances[i], values[i]); } } } else if (type == typeof(Vector4)) { Vector4[] values = field.GetValues <Vector4>(); 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; } float result; if (FloatEditor.DrawFloat("X", x, style, out result)) { field.RecordObjects("Edit " + field.Name + " X"); for (int i = 0; i < field.Instances.Length; i++) { values[i].x = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Y", y, style, out result)) { field.RecordObjects("Edit " + field.Name + " Y"); for (int i = 0; i < field.Instances.Length; i++) { values[i].y = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("Z", z, style, out result)) { field.RecordObjects("Edit " + field.Name + " Z"); for (int i = 0; i < field.Instances.Length; i++) { values[i].z = result; field.SetValue(field.Instances[i], values[i]); } } if (FloatEditor.DrawFloat("W", w, style, out result)) { field.RecordObjects("Edit " + field.Name + " W"); for (int i = 0; i < field.Instances.Length; i++) { values[i].w = result; field.SetValue(field.Instances[i], values[i]); } } } GUILayout.EndHorizontal(); EditorGUIUtility.labelWidth = width; }
public void Save() { InspectorField field = new InspectorField(Objects, path); switch (serializedType) { case SerializedType.AnimationCurve: field.SetValue(curve); break; case SerializedType.Boolean: field.SetValue(boolean); break; case SerializedType.Bounds: field.SetValue(bounds); break; case SerializedType.Color: field.SetValue(color); break; case SerializedType.Float: field.SetValue(number); break; case SerializedType.Generic: field.SetValue(generic); break; case SerializedType.Gradient: field.SetValue(gradient); break; case SerializedType.Interger: field.SetValue(integer); break; case SerializedType.Quaternion: field.SetValue(quaterion); break; case SerializedType.Rect: field.SetValue(rect); break; case SerializedType.RectOffset: field.SetValue(rectOffset); break; case SerializedType.String: field.SetValue(text); break; case SerializedType.Vector2: field.SetValue(vector2); break; case SerializedType.Vector3: field.SetValue(vector3); break; case SerializedType.Vector4: field.SetValue(vector4); break; } }