Example #1
0
        public object OnSceneGUI(object element)
        {
            try {
                if (_cycleScene == null)
                {
                    _cycleScene = new fiCycleDetector(_cycleEdit, _cycleHeight);
                }
                _cycleScene.Enter();

                // cycle; don't do anything
                if (_cycleScene.TryMark(element) == false)
                {
                    return(element);
                }

                // Not showing a scene GUI for the object for this frame should be fine
                if (element == null)
                {
                    return(element);
                }

                var inspectedProperties = _metadata.GetProperties(InspectedMemberFilters.InspectableMembers);
                for (int i = 0; i < inspectedProperties.Count; ++i)
                {
                    var property = inspectedProperties[i];

                    var             editorChain = PropertyEditor.Get(property.StorageType, property.MemberInfo);
                    IPropertyEditor editor      = editorChain.FirstEditor;

                    object currentValue = property.Read(element);
                    object updatedValue = editor.OnSceneGUI(currentValue);

                    // We use EqualityComparer instead of == because EqualityComparer will properly unbox structs
                    if (EqualityComparer <object> .Default.Equals(currentValue, updatedValue) == false)
                    {
                        property.Write(element, updatedValue);
                    }
                }

                return(element);
            }
            finally {
                _cycleScene.Exit();
                if (_cycleScene.Depth == 0)
                {
                    _cycleScene = null;
                }
            }
        }
Example #2
0
    //protected List<FieldInfo> Fields { get; set; }

    protected virtual void OnEnable()
    {
        InspectedObject = serializedObject.targetObject;
        InspectedType   = InspectedObject.GetType();

        Properties = InspectedType
                     .GetProperties(BindingFlags.Public | BindingFlags.Instance)
                     .Where(property => property.DeclaringType == InspectedType)
                     .Where(property => (property.SetMethod?.IsPublic).GetValueOrDefault())
                     .ToList();

        //Fields = InspectedType
        //    .GetFields(BindingFlags.Public | BindingFlags.Instance)
        //    .Concat(InspectedType
        //            .GetFields(BindingFlags.NonPublic | BindingFlags.Instance)
        //            .Where(field => field.GetCustomAttribute<SerializeField>() != null)
        //           )
        //    .Where(field => field.IsInitOnly == false)
        //    .ToList();
    }