protected override void OnGUI() { base.OnGUI(); if (!Validate()) { return; } if (e.type == EventType.KeyDown && e.modifiers == EventModifiers.None && e.keyCode == KeyCode.Escape) { Close(); return; } var position = this.position; position.x = position.y = 0; var height = 0f; var calculateHeight = isPopup; var applyHeight = calculateHeight && e.type == EventType.Repaint; var editable = editor.targets.None(t => t.HasHideFlag(HideFlags.NotEditable)); EditorGUI.BeginChangeCheck(); GUILayout.BeginVertical(Styles.background, GUILayout.ExpandHeight(true)); var largeHeader = editor.targets.Any(t => !(t is Component)); EditorGUIUtility.wideMode = position.width >= 330; EditorGUIUtility.hierarchyMode = false; GUILayout.BeginHorizontal(); EditorGUI.BeginDisabledGroup(!editable); if (largeHeader) { GUILayout.BeginVertical(); GUILayout.Space(0); // Fix to stick to top editor.DrawHeader(); GUILayout.EndVertical(); } else { GUILayout.BeginVertical(Styles.smallHeader); GUILayout.Space(EditorGUIUtility.isProSkin && !LudiqGUIUtility.isFlatSkin ? -3 : -4); GUILayout.BeginHorizontal(); GUILayout.Space(-12); EditorGUILayout.InspectorTitlebar(true, editor.targets, false); GUILayout.EndHorizontal(); if (LudiqGUIUtility.isFlatSkin) { GUILayout.Space(-5); } GUILayout.EndVertical(); } GUILayout.BeginVertical(Styles.smallHeaderExtra, GUILayout.ExpandHeight(true)); if (largeHeader) { GUILayout.Space(6); } else { if (LudiqGUIUtility.isFlatSkin) { GUILayout.Space(5); } else { if (EditorGUIUtility.isProSkin) { var topBorderRect = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Width(16), GUILayout.Height(1)); topBorderRect.y += 1; EditorGUI.DrawRect(topBorderRect, Color.Lerp(ColorPalette.unityBackgroundLighter, ColorPalette.unityForegroundDim, 0.25f)); GUILayout.Space(2); } else { GUILayout.Space(2); } } } EditorGUI.EndDisabledGroup(); var wantsPin = GUILayout.Toggle(isPinned, GUIContent.none, PeekStyles.pinButton); EditorGUI.BeginDisabledGroup(!editable); if (isPinned != wantsPin) { if (wantsPin) { Pin(); } else { Close(); } GUIUtility.ExitGUI(); } GUILayout.EndVertical(); if (largeHeader) { GUILayout.Space(2); } GUILayout.EndHorizontal(); if (editor.targets.Length == 1 && editor.targets[0] is GameObject go) { GUILayout.Space(-1); GUILayout.BeginHorizontal(Styles.prefabTools); if (PrefabUtility.IsPartOfAnyPrefab(go)) { GUILayout.Label("Unpack", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Root", EditorStyles.miniButtonLeft, GUILayout.ExpandWidth(true))) { PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.OutermostRoot, InteractionMode.UserAction); } if (GUILayout.Button("Completely", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true))) { PrefabUtility.UnpackPrefabInstance(go, PrefabUnpackMode.Completely, InteractionMode.UserAction); } GUILayout.Space(2); GUILayout.Label("Create", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Prefab", EditorStyles.miniButtonLeft, GUILayout.ExpandWidth(true))) { GameObjectOperations.CreateOriginalPrefab(go); } if (GUILayout.Button("Variant", EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true))) { GameObjectOperations.CreatePrefabVariant(go); } } else { GUILayout.Space(LudiqGUIUtility.isFlatSkin ? 4 : 9); GUILayout.Label("Prefab", GUILayout.ExpandWidth(false)); if (GUILayout.Button("Create Prefab", EditorStyles.miniButton)) { GameObjectOperations.CreatePrefab(go); } } GUILayout.Space(14); GUILayout.EndHorizontal(); if (LudiqGUIUtility.isFlatSkin) { GUILayout.Space(-1); } } if (calculateHeight) { height += GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(0)).yMin; } EditorGUI.EndDisabledGroup(); scroll = EditorGUILayout.BeginScrollView(scroll); if (!largeHeader) { GUILayout.Space(3); } GUILayout.BeginVertical(Styles.inspectorBackground); EditorGUIUtility.hierarchyMode = true; EditorGUI.BeginDisabledGroup(!editable); editor.OnInspectorGUI(); EditorGUI.EndDisabledGroup(); GUILayout.EndVertical(); if (isPinned) { GUILayout.FlexibleSpace(); } if (HasPreview()) { var previewArea = GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(120)); editor.DrawPreview(previewArea); } else { GUILayout.Space(2); } if (calculateHeight) { height += GUILayoutUtility.GetRect(GUIContent.none, GUIStyle.none, GUILayout.Height(0)).yMin; } GUILayout.EndVertical(); GUILayout.EndScrollView(); if (applyHeight) { autoHeight = height; } if (EditorGUI.EndChangeCheck()) { } if (e.type == EventType.KeyDown && e.keyCode == KeyCode.Space) { if (isPopup) { Pin(); } else { Close(); } e.Use(); return; } if (e.type == EventType.Repaint) { LudiqGUI.DrawEmptyRect(new Rect(Vector2.zero, this.position.size), ColorPalette.unityBackgroundVeryDark); } if (editor.RequiresConstantRepaint()) { Repaint(); } }
private static void CreatePrefab(MenuCommand menuCommand) { var target = GetTarget(menuCommand); GuiCallback.Enqueue(() => { GameObjectOperations.CreatePrefab(target); }); }