Files
2024-11-20 15:21:28 +01:00

99 lines
3.3 KiB
C#

using JetBrains.Collections.Viewable;
using JetBrains.Lifetimes;
using JetBrains.RiderFlow.Core.Launchers;
using JetBrains.RiderFlow.Core.ReEditor.Notifications;
using JetBrains.RiderFlow.Core.Requirements;
using JetBrains.RiderFlow.Core.Services.Caches.RecentFiles;
using JetBrains.RiderFlow.Core.Threading;
using JetBrains.RiderFlow.Core.UI.SceneIntegration;
using JetBrains.RiderFlow.Core.UI.SceneIntegration.Tools.SceneHighlighting;
using JetBrains.RiderFlow.Core.UI.SearchEverywhere;
using JetBrains.RiderFlow.Since2021_2.SceneIntegration;
using UnityEditor;
using UnityEditor.Overlays;
using UnityEngine;
namespace JetBrains.RiderFlow.Since2021_2
{
[InitializeOnLoad]
public class DelayedEntryPoint
{
static DelayedEntryPoint()
{
SearchEverywhereWindow.Settings = SearchWindowSettings.instance;
RecentFilesCacheController.Cache = RecentFilesCache.instance;
ProgressManagerOwner.ProgressManager = new ProgressManager();
EditorApplication.delayCall += OnEnable;
SceneIntegrationSettings.IsClassicToolboxEnabled = false;
}
protected static void OnEnable()
{
if (!IsPrimaryUnityProcess())
return;
InstallBackendRequirement.Instance.IsReady.AdviseUntil(Lifetime.Eternal, v =>
{
if (v)
{
MainThreadScheduler.Instance.Queue(StartToolbar);
return true;
}
return false;
});
Launcher.Run();
}
private static bool IsPrimaryUnityProcess()
{
if (AssetDatabase.IsAssetImportWorkerProcess())
return false;
#if UNITY_2021_1_OR_NEWER
if (UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Secondary)
return false;
#elif UNITY_2020_2_OR_NEWER
if (UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Slave)
return false;
#elif UNITY_2020_1_OR_NEWER
if (Unity.MPE.ProcessService.level == Unity.MPE.ProcessLevel.UMP_SLAVE)
return false;
#endif
return true;
}
private static void StartToolbar()
{
if (SceneView.lastActiveSceneView.TryGetOverlay(RiderFlowToolbarConstants.ToolbarId, out var toolbox))
{
SceneIntegrationActions.ChangeToolbarDisplay(new VisualElementToolbarDisplay(toolbox));
if (!SceneIntegrationSettings.AutoShowToolbox)
return;
if (toolbox.displayed)
return;
toolbox.collapsed = false;
toolbox.displayed = true;
toolbox.Undock();
toolbox.floatingPosition = new Vector2(150, 150);
UpdateLayout(toolbox);
}
}
private static void UpdateLayout(Overlay toolbox)
{
var layoutSetter = typeof(Overlay).GetProperty(nameof(Overlay.layout))?.GetSetMethod(true);
if (layoutSetter == null)
return;
layoutSetter.Invoke(toolbox, new object[] { Layout.HorizontalToolbar });
}
}
}