Exemplo n.º 1
0
        public static bool DrawRecursive(ref object target, BaseGUI gui, int id, UnityObject unityTarget, params string[] memberNames)
        {
            List <MemberInfo> members;
            var targetType = target.GetType();

            if (memberNames.IsNullOrEmpty())
            {
                members = VisibilityLogic.CachedGetVisibleMembers(targetType);
            }
            else
            {
                members = new List <MemberInfo>();
                for (int i = 0; i < memberNames.Length; i++)
                {
                    var name   = memberNames[i];
                    var member = ReflectionHelper.CachedGetMember(targetType, name);
                    if (member == null)
                    {
                        LogFormat("RecursiveDrawer: Couldn't find member {0} in {1}", name, targetType.Name);
                        continue;
                    }
                    if (VisibilityLogic.IsVisibleMember(member))
                    {
                        members.Add(member);
                    }
                }
            }

            if (members.Count == 0)
            {
                gui.HelpBox("Object doesn't have any visible members");
                return(false);
            }

            bool changed = false;

            using (gui.Indent())
            {
                for (int i = 0; i < members.Count; i++)
                {
                    MemberInfo member = members[i];

                    if (!ConditionalVisibility.IsVisible(member, target))
                    {
                        continue;
                    }

                    EditorMember em;
                    changed |= gui.Member(member, target, unityTarget, id, false, out em);
                    if (em != null)
                    {
                        target = em.RawTarget;
                    }
                }
            }

            return(changed);
        }