Exemplo n.º 1
0
        /**
         * Add a new type inspector to parentTransform with a target and reflected property or field.
         */
        public static pb_TypeInspector AddTypeInspector(object target, Transform parentTransform, PropertyInfo property = null, FieldInfo field = null)
        {
            pb_TypeInspector inspector = null;

            System.Type type = property != null ? property.PropertyType : field.FieldType;

            inspector = pb_InspectorResolver.GetInspector(type);

            if (inspector != null)
            {
                if (property != null)
                {
                    inspector.Initialize(target, property);
                }
                else
                {
                    inspector.Initialize(target, field);
                }

                inspector.transform.SetParent(parentTransform);
            }
            else
            {
                Debug.LogError("No inspector found!  Is `pb_ObjectInspector.cs` missing?");
            }

            return(inspector);
        }
Exemplo n.º 2
0
        protected virtual void InitializeGUI()
        {
            pb_GUIUtility.AddVerticalLayoutGroup(gameObject);

            foreach (PropertyInfo prop in pb_Reflection.GetSerializableProperties(target.GetType(), BindingFlags.Instance | BindingFlags.Public))
            {
                if (ignoreProperties.Contains(prop.Name) || System.Attribute.GetCustomAttribute(prop, typeof(pb_InspectorIgnoreAttribute)) != null)
                {
                    continue;
                }

                pb_TypeInspector typeInspector = pb_InspectorResolver.AddTypeInspector(target, transform, property: prop);
                typeInspector.onTypeInspectorSetValue = this.OnTypeInspectorSetValue;
            }

            foreach (FieldInfo fil in target.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public))
            {
                if (System.Attribute.GetCustomAttribute(fil, typeof(pb_InspectorIgnoreAttribute)) != null)
                {
                    continue;
                }

                pb_TypeInspector typeInspector = pb_InspectorResolver.AddTypeInspector(target, transform, field: fil);
                typeInspector.onTypeInspectorSetValue = this.OnTypeInspectorSetValue;
            }
        }
Exemplo n.º 3
0
        public static pb_TypeInspectorAttribute GetAttributeValue(pb_TypeInspector ti)
        {
            var att = ti.GetType().GetCustomAttribute(typeof(pb_TypeInspectorAttribute), true) as pb_TypeInspectorAttribute;

            if (att != null && att is pb_TypeInspectorAttribute)
            {
                return(att);
            }
            return(null);
        }
Exemplo n.º 4
0
        /**
         *	Get a type inspector that most closely matches type.
         *	If an exact type match is found, that inspector is returned.  If no exact match is found,
         *  the first base class match found.  If no base class is found, a generic object inspector
         *  is returned, which in turn will reflect the properties and fields contained and attempt to
         *	build inspectors for each.
         */
        public static pb_TypeInspector GetInspector(Type type)
        {
            if (inspectorLookup == null)
            {
                InitializeLookup();
            }

            GameObject inspectorObject;

            if (inspectorPool.TryGetValue(type, out inspectorObject))
            {
                return(GameObject.Instantiate(inspectorObject).GetComponent <pb_TypeInspector>());
            }

            List <GameObject> inspectors = new List <GameObject>();

            foreach (KeyValuePair <IEnumerable <pb_TypeInspectorAttribute>, GameObject> kvp in inspectorLookup)
            {
                foreach (pb_TypeInspectorAttribute attrib in kvp.Key)
                {
                    if (attrib.CanEditType(type))
                    {
                        if (attrib.type == type)
                        {
                            inspectors.Insert(0, kvp.Value);
                            goto EXACT_TYPE_INSPECTOR_FOUND;
                        }
                        else
                        {
                            inspectors.Add(kvp.Value);
                        }
                    }
                }
            }

EXACT_TYPE_INSPECTOR_FOUND:

            if (inspectors.Count > 0)
            {
                inspectorPool.Add(type, inspectors[0]);
                inspectorObject = GameObject.Instantiate(inspectors[0]);
                pb_TypeInspector typeInspector = inspectorObject.GetComponent <pb_TypeInspector>();
                typeInspector.SetDeclaringType(type);
                return(typeInspector);
            }
            else
            {
                GameObject go = new GameObject();
                go.name = "Generic Object Inspector: " + type;
                pb_TypeInspector typeInspector = go.AddComponent <pb_ObjectInspector>();
                typeInspector.SetDeclaringType(type);
                return(typeInspector);
            }
        }
Exemplo n.º 5
0
        protected override void InitializeGUI()
        {
            _meshCollider = (MeshCollider)target;

            pb_GUIUtility.AddVerticalLayoutGroup(gameObject);

            pb_TypeInspector enabled_inspector = pb_InspectorResolver.GetInspector(typeof(bool));

            enabled_inspector.Initialize("Enabled", UpdateEnabled, OnSetEnabled);
            enabled_inspector.onValueBeginChange = () => { Undo.RegisterState(new UndoReflection(_meshCollider, "enabled"), "Mesh Collider Enabled"); };
            enabled_inspector.transform.SetParent(transform);
        }
Exemplo n.º 6
0
        private static void InitializeLookup()
        {
            inspectorPool   = new Dictionary <Type, GameObject>();
            inspectorLookup = new Dictionary <IEnumerable <pb_TypeInspectorAttribute>, GameObject>();

            foreach (GameObject go in Resources.LoadAll(TYPE_INSPECTOR_PATH, typeof(GameObject)))
            {
                pb_TypeInspector typeInspector = go.GetComponent <pb_TypeInspector>();

                if (typeInspector == null)
                {
                    continue;
                }

                IEnumerable <Attribute> typeAttribs = (IEnumerable <Attribute>)typeInspector.GetType().GetCustomAttributes(true);
                inspectorLookup.Add(typeAttribs.Where(x => x != null && x is pb_TypeInspectorAttribute).Cast <pb_TypeInspectorAttribute>(), go);
            }
        }
Exemplo n.º 7
0
        private static void InitializeLookup()
        {
            inspectorPool   = new Dictionary <Type, GameObject>();
            inspectorLookup = new Dictionary <pb_TypeInspectorAttribute, GameObject>();

            foreach (GameObject go in Resources.LoadAll(TYPE_INSPECTOR_PATH, typeof(GameObject)))
            {
                pb_TypeInspector typeInspector = go.GetComponent <pb_TypeInspector>();

                if (typeInspector == null)
                {
                    continue;
                }

                pb_TypeInspectorAttribute t = AttributeExtension.GetAttributeValue(typeInspector);
                Attribute[] typeAttribs     = new Attribute[1] {
                    t
                };
                inspectorLookup.Add(t, go);
            }
        }
Exemplo n.º 8
0
        protected override void InitializeGUI()
        {
            pb_GUIUtility.AddVerticalLayoutGroup(gameObject);

            _transform = (Transform)target;

            pb_TypeInspector position_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
            pb_TypeInspector rotation_inspector = pb_InspectorResolver.GetInspector(typeof(Vector3));
            pb_TypeInspector scale_inspector    = pb_InspectorResolver.GetInspector(typeof(Vector3));

            position_inspector.Initialize("Position", UpdatePosition, OnSetPosition);
            rotation_inspector.Initialize("Rotation", UpdateRotation, OnSetRotation);
            scale_inspector.Initialize("Scale", UpdateScale, OnSetScale);

            position_inspector.onValueBeginChange = () => { Undo.RegisterState(new UndoTransform(_transform), "Set Position: " + _transform.position.ToString("G")); };
            rotation_inspector.onValueBeginChange = () => { Undo.RegisterState(new UndoTransform(_transform), "Set Rotation: " + _transform.localRotation.eulerAngles.ToString("G")); };
            scale_inspector.onValueBeginChange    = () => { Undo.RegisterState(new UndoTransform(_transform), "Set Scale: " + _transform.localScale.ToString("G")); };

            position_inspector.transform.SetParent(transform);
            rotation_inspector.transform.SetParent(transform);
            scale_inspector.transform.SetParent(transform);
        }
Exemplo n.º 9
0
        public override void InitializeGUI()
        {
            title.text = GetName().SplitCamelCase();

            value = GetValue <ICollection>();

            if (value != null)
            {
                // much boxing
                array = value.Cast <object>().ToArray();

                if (array.Length < 1 || array.Length > 32)
                {
                    return;
                }

                if (DeclaringType == null || DeclaringType.GetElementType() == null)
                {
                    return;
                }

                System.Type elementType = DeclaringType.GetElementType();

                string typeName = elementType.ToString().Substring(elementType.ToString().LastIndexOf('.') + 1);

                for (int i = 0; i < array.Length; i++)
                {
                    pb_TypeInspector inspector = pb_InspectorResolver.GetInspector(elementType);
                    inspector.SetIndexInCollection(i);
                    inspector.Initialize(typeName,
                                         (int index) => { return(array[index]); },
                                         SetValueAtIndex);
                    inspector.transform.SetParent(collection);
                }
            }
        }