Ejemplo n.º 1
0
        public static bool HandleType(InvokeWrapper wrapper, object[] objects)
        {
            if (!wrapper.CanRead())
            {
                return(false);
            }

            var drawerInfo = InspectorGUI.GetDrawerMethod(wrapper.GetContainingType());

            if (!drawerInfo.IsValid)
            {
                return(false);
            }

            EditorGUI.showMixedValue = !wrapper.AreValuesEqual(objects);

            var value   = drawerInfo.Drawer.Invoke(null, new object[] { objects[0], wrapper, Skin });
            var changed = UnityEngine.GUI.changed &&
                          (drawerInfo.IsNullable || value != null);

            // Reset changed state so that non-edited values
            // are propagated to other properties.
            UnityEngine.GUI.changed = false;

            EditorGUI.showMixedValue = false;

            if (!changed)
            {
                return(false);
            }

            foreach (var obj in objects)
            {
                object newValue = value;
                if (drawerInfo.CopyOp != null)
                {
                    newValue = wrapper.GetValue(obj);
                    // CopyOp returns the new value for value types.
                    var ret = drawerInfo.CopyOp.Invoke(null, new object[] { value, newValue });
                    if (ret != null)
                    {
                        newValue = ret;
                    }
                }
                wrapper.ConditionalSet(obj, newValue);
            }

            return(true);
        }