private bool IsVisible(PropertyData data) { if (Editor.IsDisabled) { return(true); } bool visible = true; foreach (var attr in data.Attributes) { if (attr is VisibleAttribute) { VisibleAttribute visibleAttr = attr as VisibleAttribute; if (visibleAttr.Value == null) { bool visibleValue; if (Utilities.GetValue(data.Parent.Value, visibleAttr.MemberName, out visibleValue)) { visible = visible && (visibleAttr.IsNot ? !visibleValue : visibleValue); } else { EditorGUILayout.HelpBox("VisibleAttribute: MemberName \"" + visibleAttr.MemberName + "\" not found!", MessageType.Error); } } else { object visibleValue; if (Utilities.GetValue(data.Parent.Value, visibleAttr.MemberName, out visibleValue, false) && visibleValue.GetType() == visibleAttr.Value.GetType()) { if (visibleValue.GetType().IsEnum&& visibleAttr.Value.GetType().IsEnum && visibleValue.GetType().GetCustomAttributes(false).ToList().Exists(e => e is FlagsAttribute) && (int)visibleValue != 0 && (int)visibleAttr.Value != 0) { visible = visible && (visibleAttr.IsNot ? ((int)visibleValue & (int)visibleAttr.Value) != (int)visibleAttr.Value : ((int)visibleValue & (int)visibleAttr.Value) == (int)visibleAttr.Value); continue; } visible = visible && (visibleAttr.IsNot ? !Equals(visibleValue, visibleAttr.Value) : Equals(visibleValue, visibleAttr.Value)); continue; } EditorGUILayout.HelpBox("VisibleAttribute: MemberName \"" + visibleAttr.MemberName + "\" not found!", MessageType.Error); } } } return(visible); }
public override void Draw(PropertyData data) { bool visible = true; foreach (var attr in data.Attributes) { if (attr is VisibleAttribute) { VisibleAttribute visibleAttr = attr as VisibleAttribute; if (visibleAttr.Value == null) { bool visibleValue; if (Utilities.GetValue(data.Parent.Value, visibleAttr.MemberName, out visibleValue)) { visible = visible && (visibleAttr.IsNot ? !visibleValue : visibleValue); } else { EditorGUILayout.HelpBox("VisibleAttribute: MemberName \"" + visibleAttr.MemberName + "\" not found!", MessageType.Error); } } } } if (!visible) { return; } switch (data.Type) { case PropertyData.Types.SelfDrawer: EditorGUILayout.PropertyField(data.Property, new GUIContent(data.Property.displayName)); return; case PropertyData.Types.List: Editor.List.Draw(data); return; case PropertyData.Types.Generic: Editor.Generic.Draw(data); return; } if (data.Property.propertyType == SerializedPropertyType.Enum) { Editor.Enum.Draw(data); return; } GUIContent labelText = data.Attributes.Exists(e => e is HideLabelAttribute) ? GUIContent.none : new GUIContent(data.Property.displayName); EditorGUILayout.PropertyField(data.Property, labelText, true); /* * EditorGUILayout.BeginHorizontal(); * EditorGUILayout.LabelField(data.Property.propertyPath.Replace(".Array.data[", "[")); * EditorGUILayout.LabelField((data.Value != null ? data.Value.GetType().ToString() : "null")); * EditorGUILayout.EndHorizontal(); * * if (data.Attributes != null) * { * EditorGUI.indentLevel++; * foreach (var a in data.Attributes) * { * EditorGUILayout.LabelField("A: " + a.GetType().ToString()); * } * EditorGUI.indentLevel--; * } */ }