private void DrawContextData(Context context, int level) { var prevIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = level; var contextMemberInfos = ContextTypeCache.GetMemberInfos(context.GetType()); foreach (var contextMemberInfo in contextMemberInfos) { if (contextMemberInfo.Property != null) { var memberValue = contextMemberInfo.Property.GetValue(context, null); var newMemberValue = this.DrawContextData(contextMemberInfo.Name, contextMemberInfo.Property.PropertyType, memberValue, level); if (contextMemberInfo.Property.CanWrite && !Equals(newMemberValue, memberValue)) { contextMemberInfo.Property.SetValue(context, newMemberValue, null); } } else if (contextMemberInfo.Method != null) { this.DrawContextMethod(context, contextMemberInfo.Method); } } EditorGUI.indentLevel = prevIndentLevel; }
private void DrawObjectData(object obj, int level) { if (obj == null) { return; } var prevIndentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = level; var memberInfos = ContextTypeCache.GetMemberInfos(obj.GetType()); foreach (var memberInfo in memberInfos) { if (memberInfo.Property != null) { var propertySetMethod = memberInfo.Property.GetSetMethod(); if (memberInfo.Property.CanWrite && propertySetMethod != null && propertySetMethod.IsPublic) { var memberValue = memberInfo.Property.GetValue(obj, null); var newMemberValue = this.DrawMemberData(memberInfo.Name, memberInfo.Property.PropertyType, memberValue, level); if (!Equals(newMemberValue, memberValue)) { memberInfo.Property.SetValue(obj, newMemberValue, null); } } } else if (memberInfo.Method != null) { this.DrawObjectMethod(obj, memberInfo.Method); } else if (memberInfo.Field != null) { if (memberInfo.Field.IsPublic) { var memberValue = memberInfo.Field.GetValue(obj); var newMemberValue = this.DrawMemberData(memberInfo.Name, memberInfo.Field.FieldType, memberValue, level); if (!Equals(newMemberValue, memberValue)) { memberInfo.Field.SetValue(obj, newMemberValue); } } } } EditorGUI.indentLevel = prevIndentLevel; }