From 3e1602162ce471facdee33eec0bfb88fac6c2292 Mon Sep 17 00:00:00 2001 From: Anders Ejlersen Date: Sat, 6 Dec 2025 15:17:30 +0100 Subject: [PATCH] Navigation tools upgraded to use the new `MainToolbarElement` API --- CHANGELOG.md | 4 + Editor/Toolbar/AbstractToolbarDrawer.cs | 15 +- Editor/Toolbar/MainToolbarElements.meta | 3 + .../Toolbar/MainToolbarElements/Handlers.meta | 3 + .../MainToolbarScenePickerPostProcess.cs | 22 +++ .../MainToolbarScenePickerPostProcess.cs.meta | 3 + .../MainToolbarScenePickerStateChanged.cs | 64 ++++++ ...MainToolbarScenePickerStateChanged.cs.meta | 3 + .../Handlers/MainToolbarUIStateChanged.cs | 47 +++++ .../MainToolbarUIStateChanged.cs.meta | 3 + .../MainToolbarBuildElement.cs | 103 ++++++++++ .../MainToolbarBuildElement.cs.meta | 3 + .../MainToolbarPlayerPrefsElement.cs | 28 +++ .../MainToolbarPlayerPrefsElement.cs.meta | 3 + .../MainToolbarProjectSaveElement.cs | 21 ++ .../MainToolbarProjectSaveElement.cs.meta | 3 + .../MainToolbarProjectSettingsElement.cs | 29 +++ .../MainToolbarProjectSettingsElement.cs.meta | 3 + .../MainToolbarScenePickerElement.cs | 187 ++++++++++++++++++ .../MainToolbarScenePickerElement.cs.meta | 3 + .../MainToolbarTimeScaleElement.cs | 30 +++ .../MainToolbarTimeScaleElement.cs.meta | 3 + .../MainToolbarUIElement.cs | 99 ++++++++++ .../MainToolbarUIElement.cs.meta | 3 + Editor/Toolbar/Settings/IToolbarSettings.cs | 4 + .../Settings/ToolbarSettingsProvider.cs | 5 + Editor/Toolbar/ToolbarDrawer.cs | 6 +- .../Tools/Settings/ToolbarBuildSettings.cs | 17 +- .../Settings/ToolbarPlayerPrefsSettings.cs | 6 +- .../ToolbarScenePickerProjectSettings.cs | 5 + .../Settings/ToolbarScenePickerSettings.cs | 15 +- .../ToolbarTargetFrameRateSettings.cs | 19 +- .../Tools/Settings/ToolbarTimeSettings.cs | 13 +- .../Tools/Settings/ToolbarUiSettings.cs | 6 +- .../Tools/Settings/ToolbarUnitySettings.cs | 6 +- Editor/Toolbar/Tools/ToolBuild.cs | 6 +- Editor/Toolbar/Tools/ToolBuildTargetPicker.cs | 8 +- Editor/Toolbar/Tools/ToolPlayerPrefs.cs | 6 +- Editor/Toolbar/Tools/ToolScenePicker.cs | 8 +- .../ToolScenePickerEditorStateChanged.cs | 6 +- .../Tools/ToolScenePickerPostProcess.cs | 6 +- Editor/Toolbar/Tools/ToolTargetFrameRate.cs | 6 +- Editor/Toolbar/Tools/ToolTimeScale.cs | 6 +- Editor/Toolbar/Tools/ToolUICanvasPicker.cs | 8 +- .../ToolUICanvasPickerEditorStateChanged.cs | 6 +- Editor/Toolbar/Tools/ToolUILayerToggle.cs | 6 +- .../Tools/ToolUnityProjectOpenSettings.cs | 6 +- Editor/Toolbar/Tools/ToolUnityProjectSave.cs | 6 +- Editor/Toolbar/Utilities/Styles.cs | 18 +- .../Utilities/ToolbarIMGUIContainer.cs | 6 +- Editor/Toolbar/Utilities/ToolbarUtility.cs | 6 +- package.json | 2 +- 52 files changed, 837 insertions(+), 66 deletions(-) create mode 100644 Editor/Toolbar/MainToolbarElements.meta create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers.meta create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs create mode 100644 Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs.meta create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs create mode 100644 Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 4acaaed..79af572 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ All notable changes to this project will be documented in this file. +## [2.0.0] - 2025-12-06 +- Navigation tools upgraded to use the new `MainToolbarElement` API + + ## [1.11.4] - 2025-09-21 ### Fixed diff --git a/Editor/Toolbar/AbstractToolbarDrawer.cs b/Editor/Toolbar/AbstractToolbarDrawer.cs index 3f5aefc..66110a9 100644 --- a/Editor/Toolbar/AbstractToolbarDrawer.cs +++ b/Editor/Toolbar/AbstractToolbarDrawer.cs @@ -1,7 +1,13 @@ using UnityEngine; +#if UNITY_6000_3_OR_NEWER +using System; +#endif namespace Module.NavigationTool.Editor.Toolbar { +#if UNITY_6000_3_OR_NEWER + [Obsolete("Unity has added a new API for adding elements to the main toolbar. Check: MainToolbarElement.")] +#endif public abstract class AbstractToolbarDrawer { public abstract bool Visible { get; } @@ -9,18 +15,22 @@ namespace Module.NavigationTool.Editor.Toolbar public abstract EToolbarPlacement Placement { get; } public abstract int Priority { get; } - private Rect rect; protected Styles styles; - + +#if !UNITY_6000_3_OR_NEWER + private Rect rect; + public void Setup(Rect rect) { this.rect = rect; } +#endif public virtual void Update() { } +#if !UNITY_6000_3_OR_NEWER public void OnGUI() { if (styles == null) @@ -32,6 +42,7 @@ namespace Module.NavigationTool.Editor.Toolbar Draw(rect); GUI.enabled = true; } +#endif protected abstract void Draw(Rect rect); public abstract float CalculateWidth(); diff --git a/Editor/Toolbar/MainToolbarElements.meta b/Editor/Toolbar/MainToolbarElements.meta new file mode 100644 index 0000000..9823427 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b007385b54fa43af8050fe2edd5b0174 +timeCreated: 1765022906 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/Handlers.meta b/Editor/Toolbar/MainToolbarElements/Handlers.meta new file mode 100644 index 0000000..8e371e4 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2bb70affaf1b42d9b59779683dbbb62d +timeCreated: 1765023522 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs new file mode 100644 index 0000000..f5bb081 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs @@ -0,0 +1,22 @@ +#if UNITY_6000_3_OR_NEWER +using System.Linq; +using UnityEditor; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal sealed class MainToolbarScenePickerPostProcess : AssetPostprocessor + { + private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + if (HasChange(deletedAssets) || HasChange(movedAssets) || HasChange(importedAssets)) + MainToolbarScenePickerElement.Refresh(); + } + + private static bool HasChange(string[] assets) + { + return assets.Any(s => s.EndsWith(".unity")) || + assets.Any(s => s.EndsWith("EditorBuildSettings.asset")); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs.meta b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs.meta new file mode 100644 index 0000000..e022c8a --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerPostProcess.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1a8274c0b09c4ccf99d08c1e6db45331 +timeCreated: 1765023528 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs new file mode 100644 index 0000000..5ddcfe8 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs @@ -0,0 +1,64 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine.SceneManagement; + +namespace Module.NavigationTool.Editor.Toolbar +{ + [InitializeOnLoad] + internal static class MainToolbarScenePickerStateChanged + { + static MainToolbarScenePickerStateChanged() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + SceneManager.activeSceneChanged += OnActiveSceneChanged; + SceneManager.sceneLoaded += OnSceneLoaded; + SceneManager.sceneUnloaded += OnSceneUnloaded; + EditorSceneManager.newSceneCreated += OnNewSceneCreated; + EditorSceneManager.activeSceneChangedInEditMode += OnActiveSceneChangedInEditMode; + EditorSceneManager.sceneOpened += OnSceneOpened; + EditorSceneManager.sceneClosed += OnSceneClosed; + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnActiveSceneChanged(Scene current, Scene next) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnSceneLoaded(Scene scene, LoadSceneMode mode) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnSceneUnloaded(Scene arg0) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnActiveSceneChangedInEditMode(Scene from, Scene to) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnNewSceneCreated(Scene scene, NewSceneSetup setup, NewSceneMode mode) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnSceneOpened(Scene scene, OpenSceneMode mode) + { + MainToolbarScenePickerElement.Refresh(); + } + + private static void OnSceneClosed(Scene scene) + { + MainToolbarScenePickerElement.Refresh(); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs.meta b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs.meta new file mode 100644 index 0000000..ba4d86e --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarScenePickerStateChanged.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0c9bd16d885949239ac6b9f7ce1825ec +timeCreated: 1765023528 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs new file mode 100644 index 0000000..51c8add --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs @@ -0,0 +1,47 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine.SceneManagement; + +namespace Module.NavigationTool.Editor.Toolbar +{ + [InitializeOnLoad] + internal static class MainToolbarUIStateChanged + { + static MainToolbarUIStateChanged() + { + EditorSceneManager.sceneSaved += OnSceneSaved; + EditorSceneManager.sceneOpened += OnSceneOpened; + EditorSceneManager.sceneClosed += OnSceneClosed; + + PrefabStage.prefabStageOpened += OnPrefabStageOpened; + PrefabStage.prefabStageClosing += OnPrefabStageClosing; + } + + private static void OnSceneSaved(Scene scene) + { + MainToolbarUIElement.Refresh(); + } + + private static void OnSceneOpened(Scene scene, OpenSceneMode mode) + { + MainToolbarUIElement.Refresh(); + } + + private static void OnSceneClosed(Scene scene) + { + MainToolbarUIElement.Refresh(); + } + + private static void OnPrefabStageOpened(PrefabStage stage) + { + MainToolbarUIElement.Refresh(); + } + + private static void OnPrefabStageClosing(PrefabStage stage) + { + MainToolbarUIElement.Refresh(); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs.meta b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs.meta new file mode 100644 index 0000000..e70442a --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/Handlers/MainToolbarUIStateChanged.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 21f843e3d88741ef985041ddb1fa986d +timeCreated: 1765024267 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs new file mode 100644 index 0000000..714b39e --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs @@ -0,0 +1,103 @@ +#if UNITY_6000_3_OR_NEWER +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEditor; +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarBuildElement + { + [Preserve] + [MainToolbarElement("Toolbar/Build", ussName = "", defaultDockIndex = 0, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 500)] + public static IEnumerable Draw() + { + var target = EditorUserBuildSettings.activeBuildTarget; + var group = BuildPipeline.GetBuildTargetGroup(target); + + return new List(2) + { + new MainToolbarDropdown(new MainToolbarContent("Build", "Select build or build & run options"), OnBuildDropdownOpened), + new MainToolbarDropdown(GetButtonContent(group), OnBuildTargetDropdownOpened) + }; + } + + private static void OnBuildDropdownOpened(Rect rect) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Build", "Build project with current EditorBuildSettings and target platform"), false, () => Build(false)); + menu.AddItem(new GUIContent("Build & Run", "Build & Run project with current EditorBuildSettings and target platform"), false, () => Build(false)); + menu.DropDown(rect); + } + + private static void OnBuildTargetDropdownOpened(Rect rect) + { + var menu = new GenericMenu(); + var type = typeof(BuildTarget); + var values = Enum.GetValues(type); + + for (var i = 0; i < values.Length; i++) + { + var target = (BuildTarget)values.GetValue(i); + var group = BuildPipeline.GetBuildTargetGroup(target); + + if (target < 0 || !BuildPipeline.IsBuildTargetSupported(group, target)) + continue; + if (!IsValid(type, target)) + continue; + + menu.AddItem(new GUIContent(ObjectNames.NicifyVariableName(target.ToString())), false, () => SetBuildTargetTo(group, target)); + } + + menu.DropDown(rect); + } + + private static void SetBuildTargetTo(BuildTargetGroup group, BuildTarget target) + { + if (EditorUserBuildSettings.SwitchActiveBuildTarget(group, target)) + MainToolbar.Refresh("Toolbar/Build Targets"); + } + + private static bool IsValid(Type type, BuildTarget target) + { + var members = type.GetMember(target.ToString(), BindingFlags.Public | BindingFlags.Static); + + if (members.Length == 0) + return false; + + for (var j = 0; j < members.Length; j++) + { + if (members[j].GetCustomAttribute() == null) + return true; + } + + return false; + } + + private static GUIContent GetButtonContent(BuildTargetGroup group) + { + var name = $"BuildSettings.{group}.Small"; + + if (group == BuildTargetGroup.WSA) + name = "BuildSettings.Metro.Small"; + + var iconContent = EditorGUIUtility.IconContent(name); + var content = new GUIContent(iconContent.image, "Select target platform for build"); + return content; + } + + private static void Build(bool withAutorun) + { + var options = BuildPlayerWindow.DefaultBuildMethods.GetBuildPlayerOptions(new BuildPlayerOptions()); + + if (withAutorun) + options.options |= BuildOptions.AutoRunPlayer; + + BuildPlayerWindow.DefaultBuildMethods.BuildPlayer(options); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs.meta new file mode 100644 index 0000000..0fd5821 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarBuildElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7c4b306cf95144139c540aa7b6c0a156 +timeCreated: 1765022920 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs new file mode 100644 index 0000000..b39d8e9 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs @@ -0,0 +1,28 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor; +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarPlayerPrefsElement + { + [Preserve] + [MainToolbarElement("Toolbar/Player Prefs Delete", ussName = "", defaultDockIndex = 100, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 1500)] + public static MainToolbarElement Draw() + { + var icon = EditorGUIUtility.IconContent("d_CacheServerDisconnected").image as Texture2D; + var content = new MainToolbarContent(icon, "Deletes all PlayerPrefs entries"); + return new MainToolbarButton(content, () => + { + if (!EditorUtility.DisplayDialog("Delete PlayerPrefs", "Are you sure you want to delete all PlayerPrefs data?", "Yes", "No")) + return; + + PlayerPrefs.DeleteAll(); + PlayerPrefs.Save(); + }); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs.meta new file mode 100644 index 0000000..2dc8f6b --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarPlayerPrefsElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a926471f33c04f7fb75a32f84c6c9d1b +timeCreated: 1765023278 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs new file mode 100644 index 0000000..c1eb0f7 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs @@ -0,0 +1,21 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor; +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarProjectSaveElement + { + [Preserve] + [MainToolbarElement("Toolbar/Project/Save", ussName = "", defaultDockIndex = 100, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 1500)] + public static MainToolbarElement Draw() + { + var icon = EditorGUIUtility.IconContent("Project").image as Texture2D; + var content = new MainToolbarContent(icon, "Saves all changed assets"); + return new MainToolbarButton(content, AssetDatabase.SaveAssets); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs.meta new file mode 100644 index 0000000..7c4c112 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSaveElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8383da48c39b4300b74e9c1791c32a8a +timeCreated: 1765024530 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs new file mode 100644 index 0000000..02cdff9 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs @@ -0,0 +1,29 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor; +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarProjectSettingsElement + { + [Preserve] + [MainToolbarElement("Toolbar/Project/Open Settings", ussName = "", defaultDockIndex = 100, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 1500)] + public static MainToolbarElement Draw() + { + var icon = EditorGUIUtility.IconContent("Settings").image as Texture2D; + var content = new MainToolbarContent(icon, "Opens Preferences/Project Settings"); + return new MainToolbarDropdown(content, OnDropdownOpen); + } + + private static void OnDropdownOpen(Rect rect) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("Preferences"), false, () => SettingsService.OpenUserPreferences("Module/Toolbar")); + menu.AddItem(new GUIContent("Project Settings"), false, () => SettingsService.OpenProjectSettings("Module/Toolbar")); + menu.DropDown(rect); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs.meta new file mode 100644 index 0000000..b412347 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarProjectSettingsElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5ebe021aec8e4dc58d5eb863695e3485 +timeCreated: 1765024477 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs new file mode 100644 index 0000000..33d3ddf --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs @@ -0,0 +1,187 @@ +#if UNITY_6000_3_OR_NEWER +using System; +using System.Collections.Generic; +using System.Text; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarScenePickerElement + { + private static readonly ScenePickerList SceneList = new(); + + [Preserve] + [MainToolbarElement("Toolbar/Scene", ussName = "", defaultDockIndex = 100, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 1500)] + public static IEnumerable Draw() + { + return new List(3) + { + CreateDropdownSceneList(), + CreateToggleSceneLoad(), + CreateButtonAddNewScene() + }; + } + + private static MainToolbarDropdown CreateDropdownSceneList() + { + SceneList.Refresh(); + var content = new MainToolbarContent(GetSceneLabel()); + return new MainToolbarDropdown(content, rect => + { + var menu = new GenericMenu(); + + for (var i = 0; i < SceneList.labels.Length; i++) + { + var sceneIndex = i; + menu.AddItem(SceneList.labels[i], SceneList.selected.Contains(i), () => SelectScene(sceneIndex)); + } + + menu.DropDown(rect); + }); + } + + private static MainToolbarToggle CreateToggleSceneLoad() + { + var isScenePickerSetAsAdditive = ToolbarScenePickerSettings.IsScenePickerSetAsAdditive; + var content = isScenePickerSetAsAdditive + ? new MainToolbarContent("A", "Additive scene loading (toogle to Single)") + : new MainToolbarContent("S", "Single scene loading (toggle to Additive)"); + + return new MainToolbarToggle(content, isScenePickerSetAsAdditive, result => + { + ToolbarScenePickerSettings.IsScenePickerSetAsAdditive = result; + MainToolbar.Refresh("Toolbar/Scene"); + }); + } + + private static MainToolbarButton CreateButtonAddNewScene() + { + var icon = EditorGUIUtility.IconContent("d_CreateAddNew").image as Texture2D; + var content = new MainToolbarContent(icon, "Create a new scene"); + return new MainToolbarButton(content, () => + { + try + { + var selection = EditorUtility.DisplayDialogComplex("Create new scene", "How do you want to add the scene?", "Single", "Additive", "Cancel"); + + if (selection == 2) + return; + + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, selection == 0 ? NewSceneMode.Single : NewSceneMode.Additive); + + if (EditorUtility.DisplayDialog("Create new scene", "Save scene to disk?", "Yes", "No")) + EditorSceneManager.SaveScene(scene); + } + catch (Exception e) + { + EditorUtility.DisplayDialog("Failed to add scene", e.Message, "Ok"); + } + }); + } + + private static void SelectScene(int index) + { + try + { + if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) + return; + + var scenes = SceneList.scenes[index]; + var isScenePickerSetAsAdditive = ToolbarScenePickerSettings.IsScenePickerSetAsAdditive; + + for (var i = 0; i < scenes.paths.Count; i++) + { + var path = scenes.paths[i]; + var scene = SceneManager.GetSceneByPath(path); + + if (scenes.isGroup) + { + if (isScenePickerSetAsAdditive || i != 0) + { + EditorSceneManager.OpenScene(path, OpenSceneMode.Additive); + var sceneIndex = SceneList.IndexOfPath(path, false); + + if (sceneIndex != -1) + SceneList.selected.Add(sceneIndex); + } + else + { + EditorSceneManager.OpenScene(path, OpenSceneMode.Single); + var sceneIndex = SceneList.IndexOfPath(path, false); + + SceneList.selected.Clear(); + + if (sceneIndex != -1) + SceneList.selected.Add(index); + } + } + else + { + if (scene.isLoaded) + { + if (SceneManager.sceneCount == 1) + return; + + EditorSceneManager.CloseScene(scene, true); + SceneList.selected.Remove(index); + } + else if (isScenePickerSetAsAdditive) + { + EditorSceneManager.OpenScene(path, OpenSceneMode.Additive); + SceneList.selected.Add(index); + } + else + { + EditorSceneManager.OpenScene(path, OpenSceneMode.Single); + SceneList.selected.Clear(); + SceneList.selected.Add(index); + } + } + } + + GetSceneLabel(); + } + catch (Exception e) + { + Debug.LogException(e); + } + finally + { + MainToolbar.Refresh("Toolbar/Scene"); + } + } + + private static string GetSceneLabel() + { + var builder = new StringBuilder(); + + if (SceneList.selected.Count != 0) + { + for (var i = 0; i < SceneList.selected.Count; i++) + { + if (i > 0) + builder.Append(", "); + + builder.Append(SceneList.scenes[SceneList.selected[i]].shortname); + } + } + else + { + builder.Append("Unsaved scene(s)"); + } + + return builder.ToString(); + } + + public static void Refresh() + { + MainToolbar.Refresh("Toolbar/Scene"); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs.meta new file mode 100644 index 0000000..55669ed --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarScenePickerElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 279f6b5a4bce42b6b1250f13a31a065c +timeCreated: 1765023392 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs new file mode 100644 index 0000000..26fc670 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs @@ -0,0 +1,30 @@ +#if UNITY_6000_3_OR_NEWER +using UnityEditor.Toolbars; +using UnityEngine; +using UnityEngine.Scripting; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarTimeScaleElement + { + [Preserve] + [MainToolbarElement("Toolbar/Time Scale", ussName = "", defaultDockIndex = 0, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 500)] + public static MainToolbarElement Draw() + { + var content = new MainToolbarContent("Time:", "Adjust Time.timeScale from [min;max] and snaps when value is approximately 1.0"); + return new MainToolbarSlider(content, Time.timeScale, ToolbarTimeSettings.TimeScaleMinValue, ToolbarTimeSettings.TimeScaleMaxValue, OnTimeScaleValueChanged); + } + + private static void OnTimeScaleValueChanged(float value) + { + value = Mathf.Clamp(value, ToolbarTimeSettings.TimeScaleMinValue, ToolbarTimeSettings.TimeScaleMaxValue); + + if (Mathf.Abs(value - 1.0f) < 0.02f) + value = 1.0f; + + if (!Mathf.Approximately(Time.timeScale, value)) + Time.timeScale = value; + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs.meta new file mode 100644 index 0000000..4473f00 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarTimeScaleElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 86d04559b6fc4260b33c97799a0e78e6 +timeCreated: 1765023773 \ No newline at end of file diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs b/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs new file mode 100644 index 0000000..dc44b86 --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs @@ -0,0 +1,99 @@ +#if UNITY_6000_3_OR_NEWER +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEditor.Toolbars; +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.Scripting; +using UTools = UnityEditor.Tools; + +namespace Module.NavigationTool.Editor.Toolbar +{ + internal static class MainToolbarUIElement + { + [Preserve] + [MainToolbarElement("Toolbar/UI", ussName = "", defaultDockIndex = 0, defaultDockPosition = MainToolbarDockPosition.Middle, menuPriority = 500)] + public static IEnumerable Draw() + { + var layer = 1 << LayerMask.NameToLayer("UI"); + var toggleValue = (UTools.visibleLayers & layer) != 0; + + return new List(2) + { + new MainToolbarToggle(new MainToolbarContent("UI", "Toggles UI visible layer in SceneView"), toggleValue, OnToggleValueChanged), + new MainToolbarDropdown(new MainToolbarContent("Select"), OnDropdownOpen) + }; + } + + private static void OnToggleValueChanged(bool result) + { + var layer = 1 << LayerMask.NameToLayer("UI"); + + if (result) + UTools.visibleLayers |= layer; + else + UTools.visibleLayers &= ~layer; + + SceneView.RepaintAll(); + } + + private static void OnDropdownOpen(Rect rect) + { + var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + var canvases = prefabStage != null + ? prefabStage.prefabContentsRoot.GetComponentsInParent() + : Object.FindObjectsByType(FindObjectsInactive.Include, FindObjectsSortMode.InstanceID); + + var list = new List(canvases.Length); + var menu = new GenericMenu(); + + for (var i = 0; i < canvases.Length; i++) + { + var root = canvases[i].rootCanvas; + + if (list.Contains(root)) + continue; + + list.Add(root); + menu.AddItem(new GUIContent($"{i}: {root.name}"), false, () => Focus(root.GetInstanceID())); + } + + menu.DropDown(rect); + } + + private static void Focus(int instanceId) + { + var obj = EditorUtility.EntityIdToObject(instanceId); + var canvas = obj as Canvas; + + if (canvas == null) + { + if (obj != null) + Debug.LogWarning("Failed to find Canvas component on object", obj); + + return; + } + + Selection.activeObject = canvas; + var bounds = InternalEditorUtility.CalculateSelectionBounds(false, true, true); + var point = bounds.center; + var direction = canvas.transform.rotation; + var size = Mathf.Max(bounds.extents.x, bounds.extents.y); + var ortho = canvas.renderMode == RenderMode.ScreenSpaceOverlay; + + for (var i = 0; i < SceneView.sceneViews.Count; i++) + { + var view = (SceneView)SceneView.sceneViews[i]; + view.in2DMode = false; + view.LookAt(point, direction, size, ortho, false); + } + } + + public static void Refresh() + { + MainToolbar.Refresh("Toolbar/UI"); + } + } +} +#endif diff --git a/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs.meta b/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs.meta new file mode 100644 index 0000000..1adeeda --- /dev/null +++ b/Editor/Toolbar/MainToolbarElements/MainToolbarUIElement.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c070302f00e44ad6b6a383ae07de6fe2 +timeCreated: 1765024213 \ No newline at end of file diff --git a/Editor/Toolbar/Settings/IToolbarSettings.cs b/Editor/Toolbar/Settings/IToolbarSettings.cs index 840d0d3..af0b873 100644 --- a/Editor/Toolbar/Settings/IToolbarSettings.cs +++ b/Editor/Toolbar/Settings/IToolbarSettings.cs @@ -3,6 +3,10 @@ public interface IToolbarSettings { string Title { get; } + +#if UNITY_6000_3_OR_NEWER + bool EnableDraw { get; } +#endif void Initialize(); void Draw(); diff --git a/Editor/Toolbar/Settings/ToolbarSettingsProvider.cs b/Editor/Toolbar/Settings/ToolbarSettingsProvider.cs index fad50dc..9dc2747 100644 --- a/Editor/Toolbar/Settings/ToolbarSettingsProvider.cs +++ b/Editor/Toolbar/Settings/ToolbarSettingsProvider.cs @@ -52,6 +52,11 @@ namespace Module.NavigationTool.Editor.Toolbar try { +#if UNITY_6000_3_OR_NEWER + if (!settings.EnableDraw) + continue; +#endif + bool foldoutState = GetFoldoutState(settings); bool newFoldoutState = EditorGUILayout.BeginFoldoutHeaderGroup(foldoutState, settings.Title, EditorStyles.foldoutHeader); diff --git a/Editor/Toolbar/ToolbarDrawer.cs b/Editor/Toolbar/ToolbarDrawer.cs index c68d3cb..578e3d8 100644 --- a/Editor/Toolbar/ToolbarDrawer.cs +++ b/Editor/Toolbar/ToolbarDrawer.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; using UnityEngine; #if UNITY_2021_1_OR_NEWER @@ -179,4 +180,5 @@ namespace Module.NavigationTool.Editor.Toolbar } #endif } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/Settings/ToolbarBuildSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarBuildSettings.cs index 68166e5..b60b117 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarBuildSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarBuildSettings.cs @@ -5,15 +5,24 @@ namespace Module.NavigationTool.Editor.Toolbar internal sealed class ToolbarBuildSettings : IToolbarSettings { public string Title => "Build"; - - private const string PREF_IS_BUILD_ENABLED = "ToolbarSettings.IsBuildEnabled"; - private const string PREF_IS_BUILD_AND_RUN_ENABLED = "ToolbarSettings.IsBuildAndRunEnabled"; +#if !UNITY_6000_3_OR_NEWER + private const string PREF_IS_BUILD_ENABLED = "ToolbarSettings.IsBuildEnabled"; +#endif + + private const string PREF_IS_BUILD_AND_RUN_ENABLED = "ToolbarSettings.IsBuildAndRunEnabled"; + +#if UNITY_6000_3_OR_NEWER + public bool EnableDraw => false; +#endif + +#if !UNITY_6000_3_OR_NEWER public static bool IsBuildEnabled { get => EditorPrefs.GetBool(PREF_IS_BUILD_ENABLED, false); set => EditorPrefs.SetBool(PREF_IS_BUILD_ENABLED, value); } +#endif public static bool IsBuildAndRunEnabled { @@ -27,7 +36,9 @@ namespace Module.NavigationTool.Editor.Toolbar public void Draw() { +#if !UNITY_6000_3_OR_NEWER IsBuildEnabled = EditorGUILayout.Toggle("Enable Build Target", IsBuildEnabled); +#endif } } } \ No newline at end of file diff --git a/Editor/Toolbar/Tools/Settings/ToolbarPlayerPrefsSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarPlayerPrefsSettings.cs index e8c1bdb..7295f7d 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarPlayerPrefsSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarPlayerPrefsSettings.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; namespace Module.NavigationTool.Editor.Toolbar { @@ -23,4 +24,5 @@ namespace Module.NavigationTool.Editor.Toolbar IsPlayerPrefsEnabled = EditorGUILayout.Toggle("Enable Player Prefs", IsPlayerPrefsEnabled); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/Settings/ToolbarScenePickerProjectSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarScenePickerProjectSettings.cs index 7414569..1d8f17d 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarScenePickerProjectSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarScenePickerProjectSettings.cs @@ -18,7 +18,12 @@ namespace Module.NavigationTool.Editor.Toolbar settings = projectSettings.GetValueAs(); sceneGroupList = new SceneGroupReorderableListDrawer(settings.sceneGroups.groups, "Scene groups"); + +#if UNITY_6000_3_OR_NEWER + sceneGroupList.onChanged += MainToolbarScenePickerElement.Refresh; +#else sceneGroupList.onChanged += ToolScenePicker.SetAsDirty; +#endif } public void Draw() diff --git a/Editor/Toolbar/Tools/Settings/ToolbarScenePickerSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarScenePickerSettings.cs index 285282b..1ba3ba3 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarScenePickerSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarScenePickerSettings.cs @@ -5,15 +5,24 @@ namespace Module.NavigationTool.Editor.Toolbar internal sealed class ToolbarScenePickerSettings : IToolbarSettings { public string Title => "Scene"; - + +#if !UNITY_6000_3_OR_NEWER private const string PREF_IS_SCENE_ENABLED = "ToolbarSettings_IsSceneEnabled"; - private const string PREF_SCENE_PICKER_LOAD_SET_AS_ADDITIVE_KEY = "ToolbarSettings_ScenePickerLoadSetAsAdditive"; +#endif + private const string PREF_SCENE_PICKER_LOAD_SET_AS_ADDITIVE_KEY = "ToolbarSettings_ScenePickerLoadSetAsAdditive"; + +#if UNITY_6000_3_OR_NEWER + public bool EnableDraw => false; +#endif + +#if !UNITY_6000_3_OR_NEWER public static bool IsSceneEnabled { get => EditorPrefs.GetBool(PREF_IS_SCENE_ENABLED, true); private set => EditorPrefs.SetBool(PREF_IS_SCENE_ENABLED, value); } +#endif public static bool IsScenePickerSetAsAdditive { @@ -27,7 +36,9 @@ namespace Module.NavigationTool.Editor.Toolbar public void Draw() { +#if !UNITY_6000_3_OR_NEWER IsSceneEnabled = EditorGUILayout.Toggle("Enable Scene picker", IsSceneEnabled); +#endif } } } \ No newline at end of file diff --git a/Editor/Toolbar/Tools/Settings/ToolbarTargetFrameRateSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarTargetFrameRateSettings.cs index c89fa38..73da9af 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarTargetFrameRateSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarTargetFrameRateSettings.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; using UnityEngine; namespace Module.NavigationTool.Editor.Toolbar @@ -7,15 +8,24 @@ namespace Module.NavigationTool.Editor.Toolbar { public string Title => "Target Frame Rate"; +#if !UNITY_6000_3_OR_NEWER private const string PREF_IS_TARGET_FRAME_RATE_ENABLED = "ToolbarSettings.IsTargetFrameRateEnabled"; +#endif + private const string PREF_TARGET_FRAME_RATE_MIN = "ToolbarSettings.TargetFrameRateMin"; private const string PREF_TARGET_FRAME_RATE_MAX = "ToolbarSettings.TargetFrameRateMax"; +#if UNITY_6000_3_OR_NEWER + public bool EnableDraw => true; +#endif + +#if !UNITY_6000_3_OR_NEWER public static bool IsTargetFrameRateEnabled { get => EditorPrefs.GetBool(PREF_IS_TARGET_FRAME_RATE_ENABLED, false); set => EditorPrefs.SetBool(PREF_IS_TARGET_FRAME_RATE_ENABLED, value); } +#endif public static int TargetFrameRateMinValue { @@ -35,9 +45,11 @@ namespace Module.NavigationTool.Editor.Toolbar public void Draw() { +#if !UNITY_6000_3_OR_NEWER IsTargetFrameRateEnabled = EditorGUILayout.Toggle("Enable Frame Rate", IsTargetFrameRateEnabled); - GUI.enabled = IsTargetFrameRateEnabled; +#endif + int minValue = EditorGUILayout.IntField("Min", TargetFrameRateMinValue); int maxValue = EditorGUILayout.IntField("Max", TargetFrameRateMaxValue); @@ -63,4 +75,5 @@ namespace Module.NavigationTool.Editor.Toolbar GUI.enabled = true; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/Settings/ToolbarTimeSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarTimeSettings.cs index c03c22f..0e010d3 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarTimeSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarTimeSettings.cs @@ -7,15 +7,24 @@ namespace Module.NavigationTool.Editor.Toolbar { public string Title => "Time"; +#if !UNITY_6000_3_OR_NEWER private const string PREF_IS_TIME_SCALE_ENABLED = "ToolbarSettings.IsTimeScaleEnabled"; +#endif + private const string PREF_TIME_SCALE_MIN = "ToolbarSettings.TimeScaleMin"; private const string PREF_TIME_SCALE_MAX = "ToolbarSettings.TimeScaleMax"; +#if UNITY_6000_3_OR_NEWER + public bool EnableDraw => true; +#endif + +#if !UNITY_6000_3_OR_NEWER public static bool IsTimeScaleEnabled { get => EditorPrefs.GetBool(PREF_IS_TIME_SCALE_ENABLED, false); set => EditorPrefs.SetBool(PREF_IS_TIME_SCALE_ENABLED, value); } +#endif public static float TimeScaleMinValue { @@ -35,9 +44,11 @@ namespace Module.NavigationTool.Editor.Toolbar public void Draw() { +#if !UNITY_6000_3_OR_NEWER IsTimeScaleEnabled = EditorGUILayout.Toggle("Enable Time slider", IsTimeScaleEnabled); - GUI.enabled = IsTimeScaleEnabled; +#endif + float timeScaleMinValue = EditorGUILayout.FloatField("Min Value", TimeScaleMinValue); float timeScaleMaxValue = EditorGUILayout.FloatField("Max Value", TimeScaleMaxValue); diff --git a/Editor/Toolbar/Tools/Settings/ToolbarUiSettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarUiSettings.cs index 7fb062b..6379420 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarUiSettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarUiSettings.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; namespace Module.NavigationTool.Editor.Toolbar { @@ -31,4 +32,5 @@ namespace Module.NavigationTool.Editor.Toolbar IsUiLayerEnabled = EditorGUILayout.Toggle("Enable Layer toggle", IsUiLayerEnabled); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/Settings/ToolbarUnitySettings.cs b/Editor/Toolbar/Tools/Settings/ToolbarUnitySettings.cs index a59e720..d5a8633 100644 --- a/Editor/Toolbar/Tools/Settings/ToolbarUnitySettings.cs +++ b/Editor/Toolbar/Tools/Settings/ToolbarUnitySettings.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; namespace Module.NavigationTool.Editor.Toolbar { @@ -31,4 +32,5 @@ namespace Module.NavigationTool.Editor.Toolbar IsProjectSettingsEnabled = EditorGUILayout.Toggle("Enable Project Settings button", IsProjectSettingsEnabled); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolBuild.cs b/Editor/Toolbar/Tools/ToolBuild.cs index b8acbb7..5257fc7 100644 --- a/Editor/Toolbar/Tools/ToolBuild.cs +++ b/Editor/Toolbar/Tools/ToolBuild.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolBuild : AbstractToolbarDrawer { public override bool Visible => ToolbarBuildSettings.IsBuildEnabled; @@ -80,4 +79,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 100.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolBuildTargetPicker.cs b/Editor/Toolbar/Tools/ToolBuildTargetPicker.cs index 5997587..a89a485 100644 --- a/Editor/Toolbar/Tools/ToolBuildTargetPicker.cs +++ b/Editor/Toolbar/Tools/ToolBuildTargetPicker.cs @@ -1,14 +1,13 @@ -using System; +#if !UNITY_6000_3_OR_NEWER +using System; using System.Collections.Generic; using System.Reflection; -using JetBrains.Annotations; using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolBuildTargetPicker : AbstractToolbarDrawer { public override bool Visible => ToolbarBuildSettings.IsBuildEnabled; @@ -145,4 +144,5 @@ namespace Module.NavigationTool.Editor.Toolbar return ((int)group << 16) + (int)target; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolPlayerPrefs.cs b/Editor/Toolbar/Tools/ToolPlayerPrefs.cs index 5129ccc..78e79ad 100644 --- a/Editor/Toolbar/Tools/ToolPlayerPrefs.cs +++ b/Editor/Toolbar/Tools/ToolPlayerPrefs.cs @@ -1,10 +1,9 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolPlayerPrefs : AbstractToolbarDrawer { public override bool Visible => ToolbarPlayerPrefsSettings.IsPlayerPrefsEnabled; @@ -33,4 +32,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 24.0f; } } -} \ No newline at end of file +} +#endif \ No newline at end of file diff --git a/Editor/Toolbar/Tools/ToolScenePicker.cs b/Editor/Toolbar/Tools/ToolScenePicker.cs index 6fbeb93..e41bbdc 100644 --- a/Editor/Toolbar/Tools/ToolScenePicker.cs +++ b/Editor/Toolbar/Tools/ToolScenePicker.cs @@ -1,6 +1,6 @@ -using System; +#if !UNITY_6000_3_OR_NEWER +using System; using System.Text; -using JetBrains.Annotations; using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine; @@ -8,7 +8,6 @@ using UnityEngine.SceneManagement; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolScenePicker : AbstractToolbarDrawer { public override bool Visible => ToolbarScenePickerSettings.IsSceneEnabled; @@ -230,4 +229,5 @@ namespace Module.NavigationTool.Editor.Toolbar public const float BUTTON_WIDTH = 24.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs index eeddfd7..da1361c 100644 --- a/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs +++ b/Editor/Toolbar/Tools/ToolScenePickerEditorStateChanged.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; @@ -59,4 +60,5 @@ namespace Module.NavigationTool.Editor.Toolbar ToolScenePicker.SetAsDirty(); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolScenePickerPostProcess.cs b/Editor/Toolbar/Tools/ToolScenePickerPostProcess.cs index 9d9d30a..ad16287 100644 --- a/Editor/Toolbar/Tools/ToolScenePickerPostProcess.cs +++ b/Editor/Toolbar/Tools/ToolScenePickerPostProcess.cs @@ -1,4 +1,5 @@ -using System.Linq; +#if !UNITY_6000_3_OR_NEWER +using System.Linq; using UnityEditor; namespace Module.NavigationTool.Editor.Toolbar @@ -17,4 +18,5 @@ namespace Module.NavigationTool.Editor.Toolbar assets.Any(s => s.EndsWith("EditorBuildSettings.asset")); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolTargetFrameRate.cs b/Editor/Toolbar/Tools/ToolTargetFrameRate.cs index 533489c..eebe741 100644 --- a/Editor/Toolbar/Tools/ToolTargetFrameRate.cs +++ b/Editor/Toolbar/Tools/ToolTargetFrameRate.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolTargetFrameRate : AbstractToolbarDrawer { public override bool Visible => ToolbarTargetFrameRateSettings.IsTargetFrameRateEnabled; @@ -42,4 +41,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 100.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolTimeScale.cs b/Editor/Toolbar/Tools/ToolTimeScale.cs index e61b689..78654b3 100644 --- a/Editor/Toolbar/Tools/ToolTimeScale.cs +++ b/Editor/Toolbar/Tools/ToolTimeScale.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolTimeScale : AbstractToolbarDrawer { public override bool Visible => ToolbarTimeSettings.IsTimeScaleEnabled; @@ -53,4 +52,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 100.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolUICanvasPicker.cs b/Editor/Toolbar/Tools/ToolUICanvasPicker.cs index c5126c3..d9ccbe8 100644 --- a/Editor/Toolbar/Tools/ToolUICanvasPicker.cs +++ b/Editor/Toolbar/Tools/ToolUICanvasPicker.cs @@ -1,5 +1,5 @@ -using System.Collections.Generic; -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER +using System.Collections.Generic; using UnityEditor; using UnityEditorInternal; using UnityEngine; @@ -13,7 +13,6 @@ using UnityEditor.Experimental.SceneManagement; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolUICanvasPicker : AbstractToolbarDrawer { public override bool Visible => ToolbarUiSettings.IsUiEnabled; @@ -129,4 +128,5 @@ namespace Module.NavigationTool.Editor.Toolbar IS_DIRTY = true; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs b/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs index 3838c6b..44dccd0 100644 --- a/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs +++ b/Editor/Toolbar/Tools/ToolUICanvasPickerEditorStateChanged.cs @@ -1,4 +1,5 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; using UnityEditor.Experimental.SceneManagement; using UnityEditor.SceneManagement; using UnityEngine.SceneManagement; @@ -43,4 +44,5 @@ namespace Module.NavigationTool.Editor.Toolbar ToolUICanvasPicker.SetAsDirty(); } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolUILayerToggle.cs b/Editor/Toolbar/Tools/ToolUILayerToggle.cs index 324977f..3b54150 100644 --- a/Editor/Toolbar/Tools/ToolUILayerToggle.cs +++ b/Editor/Toolbar/Tools/ToolUILayerToggle.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolUILayerToggle : AbstractToolbarDrawer { public override bool Visible => ToolbarUiSettings.IsUiLayerEnabled; @@ -43,4 +42,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 30.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolUnityProjectOpenSettings.cs b/Editor/Toolbar/Tools/ToolUnityProjectOpenSettings.cs index 766546b..73e3b4e 100644 --- a/Editor/Toolbar/Tools/ToolUnityProjectOpenSettings.cs +++ b/Editor/Toolbar/Tools/ToolUnityProjectOpenSettings.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolUnityProjectOpenSettings : AbstractToolbarDrawer { public override bool Visible => ToolbarUnitySettings.IsProjectSettingsEnabled; @@ -36,4 +35,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 24.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Tools/ToolUnityProjectSave.cs b/Editor/Toolbar/Tools/ToolUnityProjectSave.cs index ead9e86..603deef 100644 --- a/Editor/Toolbar/Tools/ToolUnityProjectSave.cs +++ b/Editor/Toolbar/Tools/ToolUnityProjectSave.cs @@ -1,11 +1,10 @@ -using JetBrains.Annotations; +#if !UNITY_6000_3_OR_NEWER using UnityEditor; using UnityEngine; using UTools = UnityEditor.Tools; namespace Module.NavigationTool.Editor.Toolbar { - [UsedImplicitly] internal sealed class ToolUnityProjectSave : AbstractToolbarDrawer { public override bool Visible => ToolbarUnitySettings.IsProjectSaveEnabled; @@ -29,4 +28,5 @@ namespace Module.NavigationTool.Editor.Toolbar return 24.0f; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Utilities/Styles.cs b/Editor/Toolbar/Utilities/Styles.cs index 6f49d69..dd3be33 100644 --- a/Editor/Toolbar/Utilities/Styles.cs +++ b/Editor/Toolbar/Utilities/Styles.cs @@ -1,19 +1,25 @@ -using UnityEditor; +#if !UNITY_6000_3_OR_NEWER +using UnityEditor; +#endif + using UnityEngine; namespace Module.NavigationTool.Editor.Toolbar { public sealed class Styles { +#if !UNITY_6000_3_OR_NEWER public GUIStyle popup; public GUIStyle button; public GUIStyle buttonNoPadding; public GUIStyle slider; public GUIStyle label; public GUIStyle labelCenter; - public GUIStyle settingsGroup; public GUIStyle centeredMiniLabel; +#endif + public GUIStyle settingsGroup; +#if !UNITY_6000_3_OR_NEWER public GUIContent iconPlusSmall; #if !UNITY_6000_0_OR_NEWER public GUIContent iconSceneAdditive; @@ -22,6 +28,7 @@ namespace Module.NavigationTool.Editor.Toolbar public GUIContent iconDisconnect; public GUIContent iconProject; public GUIContent iconSettings; +#endif private GUISkin skin; @@ -31,6 +38,8 @@ namespace Module.NavigationTool.Editor.Toolbar return; this.skin = skin; + +#if !UNITY_6000_3_OR_NEWER popup = new GUIStyle(skin.FindStyle("ToolbarPopup")); button = new GUIStyle(skin.FindStyle("toolbarbutton")); slider = new GUIStyle(skin.FindStyle("ToolbarSlider")); @@ -55,12 +64,14 @@ namespace Module.NavigationTool.Editor.Toolbar { alignment = TextAnchor.MiddleCenter }; - +#endif + settingsGroup = new GUIStyle { margin = new RectOffset(8, 0, 8, 0) }; +#if !UNITY_6000_3_OR_NEWER if (EditorGUIUtility.isProSkin) { iconPlusSmall = EditorGUIUtility.IconContent("d_CreateAddNew"); @@ -83,6 +94,7 @@ namespace Module.NavigationTool.Editor.Toolbar iconDisconnect = EditorGUIUtility.IconContent("d_CacheServerDisconnected"); iconProject = EditorGUIUtility.IconContent("Project"); iconSettings = new GUIContent(EditorGUIUtility.IconContent("Settings")); +#endif } } } \ No newline at end of file diff --git a/Editor/Toolbar/Utilities/ToolbarIMGUIContainer.cs b/Editor/Toolbar/Utilities/ToolbarIMGUIContainer.cs index d4d24ad..b8d5f55 100644 --- a/Editor/Toolbar/Utilities/ToolbarIMGUIContainer.cs +++ b/Editor/Toolbar/Utilities/ToolbarIMGUIContainer.cs @@ -1,4 +1,5 @@ -using System; +#if !UNITY_6000_3_OR_NEWER +using System; using UnityEngine.UIElements; namespace Module.NavigationTool.Editor.Toolbar @@ -13,4 +14,5 @@ namespace Module.NavigationTool.Editor.Toolbar Priority = priority; } } -} \ No newline at end of file +} +#endif diff --git a/Editor/Toolbar/Utilities/ToolbarUtility.cs b/Editor/Toolbar/Utilities/ToolbarUtility.cs index 01bb660..3ff9442 100644 --- a/Editor/Toolbar/Utilities/ToolbarUtility.cs +++ b/Editor/Toolbar/Utilities/ToolbarUtility.cs @@ -1,4 +1,5 @@ -using System; +#if !UNITY_6000_3_OR_NEWER +using System; using System.Collections.Generic; using UnityEngine; using System.Reflection; @@ -234,4 +235,5 @@ namespace Module.NavigationTool.Editor.Toolbar } #endif } -} \ No newline at end of file +} +#endif diff --git a/package.json b/package.json index 49ba91c..b67e867 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "com.module.navigationtool", - "version": "1.11.4", + "version": "2.0.0", "displayName": "Module.NavigationTool", "description": "Support for navigation tools, like favorites, history and toolbars", "unity": "2019.2",