Exemplo n.º 1
0
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();

            Type refType = null;

            Obj[] targets = null;
            if (!serializedObject.isEditingMultipleObjects && serializedObject.targetObject != null)
            {
                refType = serializedObject.targetObject.GetType();
                targets = new[] { serializedObject.targetObject };
            }
            else if (serializedObject.targetObjects != null)
            {
                refType = TypeUtility.FindCommonTypeWithin(serializedObject.targetObjects
                                                           .Select(obj => obj != null ? obj.GetType() : null)
                                                           .Where(t => t != null).ToArray());
                targets = serializedObject.targetObjects;
            }
            if (refType == null)
            {
                return;
            }

            var flags   = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy;
            var members = refType.GetMembers(flags).Where(m => GetCheersAttribute(m) != null)
                          .Union(
                refType.GetInterfaceHierarchy().SelectMany(i => i.GetMembers(flags))
                );

            foreach (var member in members.Where(m => GetCheersAttribute(m) != null))
            {
                var attr = GetCheersAttribute(member);
                if (attr == null)
                {
                    continue;
                }
                switch (member.MemberType)
                {
                case MemberTypes.Method:
                    DrawMethod((MethodInfo)member, attr, targets);
                    break;

                case MemberTypes.Property:
                    DrawProperty((PropertyInfo)member, attr, targets);
                    break;

                default:
                    PrettyLog.Log("TODO...Or never to be done. >_< Just use SerializedField instead");
                    break;
                }
            }
        }