public static List <InspectorGroup> GroupFields(List <InspectorField> fields) { var groups = new Dictionary <string, InspectorGroup>(); for (int i = 0; i < fields.Count; i++) { var field = fields[i]; InspectorGroup group = null; if (!groups.TryGetValue(field.Group, out group)) { group = groups[field.Group] = new InspectorGroup() { Name = field.Group }; } group.Fields.Add(field); } var list = groups.Values.ToList(); for (int i = 0; i < list.Count; i++) { list[i].SortFields(); } return(list); }
protected void editTaggedFields() { var fields = target .GetType() .GetMembers(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) .Where(x => x.IsDefined(typeof(InspectorAttribute), true)) .Select(x => new InspectorField() { EditorTarget = serializedObject, Member = x, Attribute = (InspectorAttribute)x.GetCustomAttributes(typeof(InspectorAttribute), true).FirstOrDefault() }) .ToList(); var groups = InspectorGroup.GroupFields(fields); orderGroups(groups); for (int i = 0; i < groups.Count; i++) { var group = groups[i]; if (CanShowGroup(group)) { using (BeginGroup(group.Name)) { OnBeforeGroupInspectorGUI(); for (int f = 0; f < group.Fields.Count; f++) { var field = group.Fields[f]; if (CanShowField(field)) { field.OnInspectorGUI(serializedObject); } } OnAfterGroupInspectorGUI(); } } } serializedObject.ApplyModifiedProperties(); }
protected virtual bool CanShowGroup(InspectorGroup group) { return(true); }
protected virtual bool CanShowGroup( InspectorGroup group ) { return true; }