コード例 #1
0
        public object OnSceneGUI(object element)
        {
            if (element != null)
            {
                PropertyEditorChain chain  = PropertyEditor.Get(element.GetType(), null);
                IPropertyEditor     editor = chain.SkipUntilNot(typeof(AbstractTypePropertyEditor));

                return(editor.OnSceneGUI(element));
            }
            return(element);
        }
コード例 #2
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;
                }
            }
        }