private void DrawEditor(Editor editor, int editorIndex, bool rebuildOptimizedGUIBlock, ref bool showImportedObjectBarNext, ref Rect importedObjectBarRect) { if ((UnityEngine.Object) editor == (UnityEngine.Object) null) return; UnityEngine.Object target = editor.target; GUIUtility.GetControlID(target.GetInstanceID(), FocusType.Passive); EditorGUIUtility.ResetGUIState(); GUILayoutGroup topLevel = GUILayoutUtility.current.topLevel; int visible = this.m_Tracker.GetVisible(editorIndex); bool flag1; if (visible == -1) { flag1 = InternalEditorUtility.GetIsInspectorExpanded(target); this.m_Tracker.SetVisible(editorIndex, !flag1 ? 0 : 1); } else flag1 = visible == 1; rebuildOptimizedGUIBlock |= editor.isInspectorDirty; if (Event.current.type == EventType.Repaint) editor.isInspectorDirty = false; ScriptAttributeUtility.propertyHandlerCache = editor.propertyHandlerCache; bool flag2 = AssetDatabase.IsMainAsset(target) || AssetDatabase.IsSubAsset(target) || editorIndex == 0 || target is Material; if (flag2) { string message = string.Empty; bool flag3 = editor.IsOpenForEdit(out message); if (showImportedObjectBarNext) { showImportedObjectBarNext = false; GUILayout.Space(15f); importedObjectBarRect = GUILayoutUtility.GetRect(16f, 16f); importedObjectBarRect.height = 17f; } flag1 = true; EditorGUI.BeginDisabledGroup(!flag3); editor.DrawHeader(); EditorGUI.EndDisabledGroup(); } if (editor.target is AssetImporter) showImportedObjectBarNext = true; bool flag4 = false; if (editor is GenericInspector && CustomEditorAttributes.FindCustomEditorType(target, false) != null && this.m_InspectorMode != InspectorMode.DebugInternal) { if (this.m_InspectorMode == InspectorMode.Normal) flag4 = true; else if (target is AssetImporter) flag4 = true; } if (!flag2) { EditorGUI.BeginDisabledGroup(!editor.IsEnabled()); bool isExpanded = EditorGUILayout.InspectorTitlebar(flag1, editor.targets, editor.CanBeExpandedViaAFoldout()); if (flag1 != isExpanded) { this.m_Tracker.SetVisible(editorIndex, !isExpanded ? 0 : 1); InternalEditorUtility.SetIsInspectorExpanded(target, isExpanded); if (isExpanded) this.m_LastInteractedEditor = editor; else if ((UnityEngine.Object) this.m_LastInteractedEditor == (UnityEngine.Object) editor) this.m_LastInteractedEditor = (Editor) null; } EditorGUI.EndDisabledGroup(); } if (flag4 && flag1) { GUILayout.Label("Multi-object editing not supported.", EditorStyles.helpBox, new GUILayoutOption[0]); } else { EditorGUIUtility.ResetGUIState(); EditorGUI.BeginDisabledGroup(!editor.IsEnabled()); GenericInspector genericInspector = editor as GenericInspector; if ((bool) ((UnityEngine.Object) genericInspector)) genericInspector.m_InspectorMode = this.m_InspectorMode; EditorGUIUtility.hierarchyMode = true; EditorGUIUtility.wideMode = (double) this.position.width > 330.0; ScriptAttributeUtility.propertyHandlerCache = editor.propertyHandlerCache; Rect rect = new Rect(); OptimizedGUIBlock block; float height; if (editor.GetOptimizedGUIBlock(rebuildOptimizedGUIBlock, flag1, out block, out height)) { rect = GUILayoutUtility.GetRect(0.0f, !flag1 ? 0.0f : height); this.HandleLastInteractedEditor(rect, editor); if (Event.current.type == EventType.Layout) return; if (block.Begin(rebuildOptimizedGUIBlock, rect) && flag1) { GUI.changed = false; editor.OnOptimizedInspectorGUI(rect); } block.End(); } else { if (flag1) { rect = EditorGUILayout.BeginVertical(!editor.UseDefaultMargins() ? GUIStyle.none : EditorStyles.inspectorDefaultMargins, new GUILayoutOption[0]); this.HandleLastInteractedEditor(rect, editor); GUI.changed = false; try { editor.OnInspectorGUI(); } catch (Exception ex) { if (ex is ExitGUIException) throw; else Debug.LogException(ex); } EditorGUILayout.EndVertical(); } if (Event.current.type == EventType.Used) return; } EditorGUI.EndDisabledGroup(); if (GUILayoutUtility.current.topLevel != topLevel) { if (!GUILayoutUtility.current.layoutGroups.Contains((object) topLevel)) { Debug.LogError((object) "Expected top level layout group missing! Too many GUILayout.EndScrollView/EndVertical/EndHorizontal?"); GUIUtility.ExitGUI(); } else { Debug.LogWarning((object) "Unexpected top level layout group! Missing GUILayout.EndScrollView/EndVertical/EndHorizontal?"); while (GUILayoutUtility.current.topLevel != topLevel) GUILayoutUtility.EndLayoutGroup(); } } this.HandleComponentScreenshot(rect, editor); } }