From 2a7efd9eecc5c85e595c43ceb9733e255fde9f2b Mon Sep 17 00:00:00 2001 From: Henry de Jongh Date: Sun, 11 Jul 2021 14:41:37 +0200 Subject: [PATCH 1/2] Added overlays support for 2021.2. --- Scripts/Tools/ClipEditor.cs | 8 +++-- Scripts/Tools/DrawEditor.cs | 1 + Scripts/Tools/PaintEditor.cs | 5 +++ Scripts/Tools/ResizeEditor.cs | 16 ++++++++- Scripts/Tools/SurfaceEditor.cs | 34 ++++++++++++++++++- Scripts/Tools/Tool.cs | 8 ++++- Scripts/Tools/TransformModelEditor.cs | 1 + Scripts/Tools/VertexEditor.cs | 6 +++- Scripts/UI/SabreToolbarOverlay.cs | 45 ++++++++++++++++++++++++++ Scripts/UI/SabreToolbarOverlay.cs.meta | 11 +++++++ Scripts/UI/SabreToolsOverlay.cs | 37 +++++++++++++++++++++ Scripts/UI/SabreToolsOverlay.cs.meta | 11 +++++++ Scripts/UI/Toolbar.cs | 14 ++++---- 13 files changed, 184 insertions(+), 13 deletions(-) create mode 100644 Scripts/UI/SabreToolbarOverlay.cs create mode 100644 Scripts/UI/SabreToolbarOverlay.cs.meta create mode 100644 Scripts/UI/SabreToolsOverlay.cs create mode 100644 Scripts/UI/SabreToolsOverlay.cs.meta diff --git a/Scripts/Tools/ClipEditor.cs b/Scripts/Tools/ClipEditor.cs index e14d1966..2f5a9f44 100644 --- a/Scripts/Tools/ClipEditor.cs +++ b/Scripts/Tools/ClipEditor.cs @@ -468,8 +468,12 @@ void OnRepaint(SceneView sceneView, Event e) GUIStyle toolbar = new GUIStyle(EditorStyles.toolbar); toolbar.normal.background = SabreCSGResources.ClearTexture; toolbar.fixedHeight = rectangle.height; +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = () => OnToolbarGUI(0); +#else GUILayout.Window(140006, rectangle, OnToolbarGUI, "",toolbar); - } +#endif + } void OnToolbarGUI(int windowID) { @@ -602,7 +606,7 @@ void InsertEdgeLoop() public override void Deactivated () { - + base.Deactivated(); } } } diff --git a/Scripts/Tools/DrawEditor.cs b/Scripts/Tools/DrawEditor.cs index 5559f7fa..711bce7d 100644 --- a/Scripts/Tools/DrawEditor.cs +++ b/Scripts/Tools/DrawEditor.cs @@ -1016,6 +1016,7 @@ private void OnRepaint(SceneView sceneView, Event e) public override void Deactivated() { + base.Deactivated(); } public override bool PreventBrushSelection diff --git a/Scripts/Tools/PaintEditor.cs b/Scripts/Tools/PaintEditor.cs index 2f4fe487..e0d14269 100644 --- a/Scripts/Tools/PaintEditor.cs +++ b/Scripts/Tools/PaintEditor.cs @@ -869,7 +869,11 @@ private void OnRepaintGUI(SceneView sceneView, Event e) // Set the style height to match the rectangle (so it stretches instead of tiling) toolbar.fixedHeight = toolbarRect.height + toolbarHeight; // Draw the actual GUI via a Window +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = () => OnToolbarGUI(0); +#else GUILayout.Window(140010, actualToolbarRect, OnToolbarGUI, "", toolbar); +#endif } private void OnToolbarGUI(int windowID) @@ -1034,6 +1038,7 @@ private void DrawToolbarPalette() public override void Deactivated() { + base.Deactivated(); } public override bool PreventBrushSelection diff --git a/Scripts/Tools/ResizeEditor.cs b/Scripts/Tools/ResizeEditor.cs index 6a440a76..cac32ee1 100644 --- a/Scripts/Tools/ResizeEditor.cs +++ b/Scripts/Tools/ResizeEditor.cs @@ -1307,7 +1307,11 @@ public void OnRepaint(SceneView sceneView, Event e) BRUSH_MENU_HEIGHT ); +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = () => OnTopToolbarGUI(0); +#else GUILayout.Window(140007, rectangle, OnTopToolbarGUI, "", style); +#endif if (primaryTargetBrush != null) { @@ -1317,7 +1321,11 @@ public void OnRepaint(SceneView sceneView, Event e) style = new GUIStyle(EditorStyles.toolbar); style.fixedWidth = BRUSH_MENU_WIDTH; style.fixedHeight = BRUSH_MENU_HEIGHT; +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window2 = () => OnBrushSettingsGUI(0); +#else GUILayout.Window(140011, brushMenuRect, OnBrushSettingsGUI, "", style); +#endif } } @@ -1327,7 +1335,11 @@ private void OnTopToolbarGUI(int windowID) } private void OnBrushSettingsGUI(int windowID) { - GUILayout.BeginHorizontal(); + // can happen in overlays without selection. + if (primaryTargetBrush == null) + return; + + GUILayout.BeginHorizontal(); GUILayout.Label("Brush Settings", EditorStyles.boldLabel); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); @@ -2475,6 +2487,8 @@ public override void ResetTool() public override void Deactivated() { + base.Deactivated(); + // Make sure we get rid of any active custom cursor SabreMouse.ResetCursor(); } diff --git a/Scripts/Tools/SurfaceEditor.cs b/Scripts/Tools/SurfaceEditor.cs index 546c1128..3ceb5cf2 100644 --- a/Scripts/Tools/SurfaceEditor.cs +++ b/Scripts/Tools/SurfaceEditor.cs @@ -76,7 +76,11 @@ private enum AlignDirection private List lastHitSet = new List(); +#if UNITY_2021_2_OR_NEWER + private Rect alignButtonRect = new Rect(118, 140, 80, 45); +#else private Rect alignButtonRect = new Rect(118, 110, 80, 45); +#endif private Material lastMaterial = null; private Color lastColor = Color.white; @@ -1141,7 +1145,11 @@ private void OnRepaintGUI(SceneView sceneView, Event e) // Set the style height to match the rectangle (so it stretches instead of tiling) toolbar.fixedHeight = ToolbarRect.height; // Draw the actual GUI via a Window +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = () => OnToolbarGUI(0); +#else GUILayout.Window(140009, ToolbarRect, OnToolbarGUI, "", toolbar); +#endif } private void OnKeyAction(SceneView sceneView, Event e) @@ -1468,7 +1476,11 @@ private void DrawExcludeBox() } GUILayout.BeginHorizontal(GUILayout.Width(50)); +#if UNITY_2021_2_OR_NEWER + Rect rect = new Rect(66, 66, 60, 15); +#else Rect rect = new Rect(72, 48, 60, 15); +#endif bool newExcludeState = SabreGUILayout.ToggleMixed(rect, excludeState, excludeConflict, "Exclude"); EditorGUI.showMixedValue = false; // Reset mixed state @@ -1539,7 +1551,11 @@ private void DrawManualTextBoxes() GUIStyle textFieldStyle2 = SabreGUILayout.GetTextFieldStyle2(); // East Scale (u scale) +#if UNITY_2021_2_OR_NEWER + Rect rect = new Rect(138, 21, 60, 16); +#else Rect rect = new Rect(138, 2, 60, 16); +#endif if (SabreGUILayout.DrawUVField(rect, eastScale, ref uScaleString, "uScaleField", textFieldStyle1)) { float newEastScale; @@ -1557,7 +1573,11 @@ private void DrawManualTextBoxes() } // North scale (v scale) +#if UNITY_2021_2_OR_NEWER + rect = new Rect(138, 36, 60, 16); +#else rect = new Rect(138, 17, 60, 16); +#endif if (SabreGUILayout.DrawUVField(rect, northScale, ref vScaleString, "vScaleField", textFieldStyle1)) { float newNorthScale; @@ -1575,7 +1595,11 @@ private void DrawManualTextBoxes() } // North scale (v scale) +#if UNITY_2021_2_OR_NEWER + rect = new Rect(138, 54, 60, 16); +#else rect = new Rect(138, 35, 60, 16); +#endif if (SabreGUILayout.DrawUVField(rect, eastOffset, ref uOffsetString, "uOffsetField", textFieldStyle2)) { float newEastOffset; @@ -1592,7 +1616,11 @@ private void DrawManualTextBoxes() } } +#if UNITY_2021_2_OR_NEWER + rect = new Rect(138, 69, 60, 16); +#else rect = new Rect(138, 50, 60, 16); +#endif if (SabreGUILayout.DrawUVField(rect, northOffset, ref vOffsetString, "vOffsetField", textFieldStyle2)) { float newNorthOffset; @@ -1632,8 +1660,11 @@ private void OnToolbarGUI(int windowID) GUISkin inspectorSkin = SabreGUILayout.GetInspectorSkin(); +#if UNITY_2021_2_OR_NEWER + Rect rect = new Rect(138, 89, 60, 18); +#else Rect rect = new Rect(138, 68, 60, 18); - +#endif if (GUI.Button(rect, "Color", inspectorSkin.button)) { vertexColorWindow = VertexColorWindow.CreateAndShow(csgModel, this); @@ -1979,6 +2010,7 @@ public override void OnSelectionChanged() public override void Deactivated() { + base.Deactivated(); } public override bool BrushesHandleDrawing diff --git a/Scripts/Tools/Tool.cs b/Scripts/Tools/Tool.cs index 36a311fe..3bf140cd 100644 --- a/Scripts/Tools/Tool.cs +++ b/Scripts/Tools/Tool.cs @@ -258,7 +258,13 @@ public virtual void OnUndoRedoPerformed() {} // Called when the selected brush changes public abstract void ResetTool(); - public abstract void Deactivated(); + public virtual void Deactivated() + { +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = null; + SabreToolsOverlay.window2 = null; +#endif + } public virtual bool BrushesHandleDrawing { diff --git a/Scripts/Tools/TransformModelEditor.cs b/Scripts/Tools/TransformModelEditor.cs index 0ab2ba8f..82e85906 100644 --- a/Scripts/Tools/TransformModelEditor.cs +++ b/Scripts/Tools/TransformModelEditor.cs @@ -19,6 +19,7 @@ public override void ResetTool() public override void Deactivated() { + base.Deactivated(); } } } diff --git a/Scripts/Tools/VertexEditor.cs b/Scripts/Tools/VertexEditor.cs index 4aa2891d..209b5ac3 100644 --- a/Scripts/Tools/VertexEditor.cs +++ b/Scripts/Tools/VertexEditor.cs @@ -1006,7 +1006,11 @@ public void OnRepaint (SceneView sceneView, Event e) GUIStyle toolbar = new GUIStyle(EditorStyles.toolbar); toolbar.normal.background = SabreCSGResources.ClearTexture; toolbar.fixedHeight = rectangle.height; +#if UNITY_2021_2_OR_NEWER + SabreToolsOverlay.window1 = () => OnToolbarGUI(0); +#else GUILayout.Window(140002, rectangle, OnToolbarGUI, "", toolbar); +#endif } void OnMouseDown (SceneView sceneView, Event e) @@ -1493,7 +1497,7 @@ private void OnEdgeChamfer(bool popup) public override void Deactivated () { - + base.Deactivated(); } } } diff --git a/Scripts/UI/SabreToolbarOverlay.cs b/Scripts/UI/SabreToolbarOverlay.cs new file mode 100644 index 00000000..41ffd1d5 --- /dev/null +++ b/Scripts/UI/SabreToolbarOverlay.cs @@ -0,0 +1,45 @@ +#if UNITY_2021_2_OR_NEWER + +using UnityEditor; +using UnityEditor.Overlays; + +namespace Sabresaurus.SabreCSG +{ + [Overlay(typeof(SceneView), k_Id, "SabreCSG Toolbar")] + public class SabreToolbarOverlay : IMGUIOverlay + { + private const string k_Id = "sabrecsg-toolbar-overlay"; + + public override void OnCreated() + { + base.OnCreated(); + } + + public override void OnGUI() + { + var model = CSGModel.GetActiveCSGModel(); + if (model) + { + Toolbar.CSGModel = model; + Toolbar.OnBottomToolbarGUI(0); + + if (Toolbar.primitiveMenuShowing) + { + Toolbar.OnPrimitiveMenuGUI(0); + } + + if (Toolbar.viewMenuShowing) + { + Toolbar.OnViewMenuGUI(0); + } + + if (!string.IsNullOrEmpty(Toolbar.WarningMessage)) + { + Toolbar.OnWarningToolbar(0); + } + } + } + } +} + +#endif \ No newline at end of file diff --git a/Scripts/UI/SabreToolbarOverlay.cs.meta b/Scripts/UI/SabreToolbarOverlay.cs.meta new file mode 100644 index 00000000..0a7a7620 --- /dev/null +++ b/Scripts/UI/SabreToolbarOverlay.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 055d77af6bd524d4ca22f1bcf79de289 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/UI/SabreToolsOverlay.cs b/Scripts/UI/SabreToolsOverlay.cs new file mode 100644 index 00000000..f58378e8 --- /dev/null +++ b/Scripts/UI/SabreToolsOverlay.cs @@ -0,0 +1,37 @@ +#if UNITY_2021_2_OR_NEWER + +using UnityEditor; +using UnityEditor.Overlays; +using UnityEngine; + +namespace Sabresaurus.SabreCSG +{ + [Overlay(typeof(SceneView), k_Id, "SabreCSG Tools")] + public class SabreToolsOverlay : IMGUIOverlay + { + private const string k_Id = "sabrecsg-tools-overlay"; + + public static System.Action window1; + public static System.Action window2; + + public override void OnCreated() + { + base.OnCreated(); + } + + public override void OnGUI() + { + var model = CSGModel.GetActiveCSGModel(); + if (model) + { + Toolbar.CSGModel = model; + Toolbar.OnTopToolbarGUI(0); + + window1?.Invoke(); + window2?.Invoke(); + } + } + } +} + +#endif \ No newline at end of file diff --git a/Scripts/UI/SabreToolsOverlay.cs.meta b/Scripts/UI/SabreToolsOverlay.cs.meta new file mode 100644 index 00000000..4e876e1c --- /dev/null +++ b/Scripts/UI/SabreToolsOverlay.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af8becb721ae13a418b3ec08ccf6d89a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/UI/Toolbar.cs b/Scripts/UI/Toolbar.cs index a66162cc..c838f33f 100644 --- a/Scripts/UI/Toolbar.cs +++ b/Scripts/UI/Toolbar.cs @@ -121,7 +121,7 @@ private static void OnRepaint(SceneView sceneView, Event e) } - private static void OnTopToolbarGUI(int windowID) + public static void OnTopToolbarGUI(int windowID) { EditorGUILayout.BeginHorizontal(); MainMode currentMode = CurrentSettings.CurrentMode; @@ -167,7 +167,7 @@ private static void OnTopToolbarGUI(int windowID) EditorGUILayout.EndHorizontal(); } - private static void OnWarningToolbar(int windowID) + public static void OnWarningToolbar(int windowID) { GUIStyle style = SabreGUILayout.GetOverlayStyle(); Vector2 size = style.CalcSize(new GUIContent(warningMessage)); @@ -307,7 +307,7 @@ static void OnSelectedGridOption(object userData) } } - static void OnViewMenuGUI(int windowID) { + public static void OnViewMenuGUI(int windowID) { float left_pad = 90f; EditorGUIUtility.labelWidth = 118f; @@ -450,7 +450,7 @@ static void OnViewMenuGUI(int windowID) { GUILayout.EndHorizontal(); } - static void OnPrimitiveMenuGUI(int windowID) { + public static void OnPrimitiveMenuGUI(int windowID) { GUIStyle createBrushStyle = new GUIStyle(EditorStyles.toolbarButton); createBrushStyle.fixedHeight = 20; @@ -542,9 +542,9 @@ static void OnPrimitiveMenuGUI(int windowID) { GUILayout.EndHorizontal(); } - private static void OnBottomToolbarGUI(int windowID) - { - GUILayout.BeginHorizontal(); + public static void OnBottomToolbarGUI(int windowID) + { + GUILayout.BeginHorizontal(); GUIStyle createBrushStyle = new GUIStyle(EditorStyles.toolbarButton); createBrushStyle.fixedHeight = 20; From 37b024a162fe454834975c10971578d3f168613e Mon Sep 17 00:00:00 2001 From: Henry de Jongh Date: Mon, 12 Jul 2021 09:28:21 +0200 Subject: [PATCH 2/2] Overlays are now automatically enabled / disabled upon entering and leaving SabreCSG's edit mode. --- Scripts/CSGModel.cs | 5 +++++ Scripts/UI/SabreToolbarOverlay.cs | 8 +++++++- Scripts/UI/SabreToolsOverlay.cs | 3 +++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Scripts/CSGModel.cs b/Scripts/CSGModel.cs index 57503d69..88824fc5 100644 --- a/Scripts/CSGModel.cs +++ b/Scripts/CSGModel.cs @@ -309,6 +309,11 @@ public void OnSceneGUI(SceneView sceneView) } Event e = Event.current; +#if UNITY_2021_2_OR_NEWER + if (SabreToolbarOverlay.Instance != null) SabreToolbarOverlay.Instance.displayed = EditMode; + if (SabreToolsOverlay.Instance != null) SabreToolsOverlay.Instance.displayed = EditMode; +#endif + if (!EditMode) { return; diff --git a/Scripts/UI/SabreToolbarOverlay.cs b/Scripts/UI/SabreToolbarOverlay.cs index 41ffd1d5..883adced 100644 --- a/Scripts/UI/SabreToolbarOverlay.cs +++ b/Scripts/UI/SabreToolbarOverlay.cs @@ -2,6 +2,7 @@ using UnityEditor; using UnityEditor.Overlays; +using UnityEngine; namespace Sabresaurus.SabreCSG { @@ -9,19 +10,22 @@ namespace Sabresaurus.SabreCSG public class SabreToolbarOverlay : IMGUIOverlay { private const string k_Id = "sabrecsg-toolbar-overlay"; + public static SabreToolbarOverlay Instance; public override void OnCreated() { base.OnCreated(); + + Instance = this; } public override void OnGUI() { var model = CSGModel.GetActiveCSGModel(); + if (model) { Toolbar.CSGModel = model; - Toolbar.OnBottomToolbarGUI(0); if (Toolbar.primitiveMenuShowing) { @@ -37,6 +41,8 @@ public override void OnGUI() { Toolbar.OnWarningToolbar(0); } + + Toolbar.OnBottomToolbarGUI(0); } } } diff --git a/Scripts/UI/SabreToolsOverlay.cs b/Scripts/UI/SabreToolsOverlay.cs index f58378e8..1eac6211 100644 --- a/Scripts/UI/SabreToolsOverlay.cs +++ b/Scripts/UI/SabreToolsOverlay.cs @@ -10,6 +10,7 @@ namespace Sabresaurus.SabreCSG public class SabreToolsOverlay : IMGUIOverlay { private const string k_Id = "sabrecsg-tools-overlay"; + public static SabreToolsOverlay Instance; public static System.Action window1; public static System.Action window2; @@ -17,6 +18,8 @@ public class SabreToolsOverlay : IMGUIOverlay public override void OnCreated() { base.OnCreated(); + + Instance = this; } public override void OnGUI()