Files
Infratest/Assets/FastScriptReload/Scripts/Editor/GUI/ProjectWindowReloadStatusIndicatorDrawer.cs
T
ThomasCharester 5f5ace1b52 Essentials + extra crap
Loadings
Startups
Movement
Camera
2026-01-12 18:43:51 +03:00

85 lines
2.9 KiB
C#

using System.Collections.Generic;
using System.Linq;
using ImmersiveVRTools.Editor.Common.Utilities;
using ImmersiveVRTools.Runtime.Common;
using UnityEditor;
using UnityEngine;
namespace FastScriptReload.Editor.GUI
{
[InitializeOnLoad]
public class ProjectWindowReloadStatusIndicatorDrawer
{
private static Texture HelpTexture;
private static bool IsEnabled;
static ProjectWindowReloadStatusIndicatorDrawer()
{
EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI;
FastScriptReloadManager.Instance.HotReloadFailed += OnHotReloadFailed;
EditorApplication.update += () =>
{
IsEnabled = (bool)FastScriptReloadPreference.IsVisualHotReloadIndicationShownInProjectWindow.GetEditorPersistedValueOrDefault();
};
}
private static void OnHotReloadFailed(List<DynamicFileHotReloadState> failedForFileStates)
{
if (!IsEnabled)
{
return;
}
UnityMainThreadDispatcher.Instance.Enqueue(() =>
{
var lastFailed = failedForFileStates.LastOrDefault();
if (lastFailed != null)
{
var script = AssetDatabase.LoadAssetAtPath<MonoScript>(AssetDatabaseHelper.AbsolutePathToAssetPath(lastFailed.FullFileName));
EditorGUIUtility.PingObject(script);
}
});
}
private static void ProjectWindowItemOnGUI(string guid, Rect rect)
{
if (!IsEnabled)
{
return;
}
if (HelpTexture == null)
{
HelpTexture = EditorGUIUtility.TrIconContent("_Help").image;
}
if (FastScriptReloadManager.Instance.LastProcessedDynamicFileHotReloadStatesInSession.TryGetValue(guid, out var fileHotReloadState))
{
var sideLineRect = new Rect(1, rect.y, 2, rect.height);
if (fileHotReloadState.IsFailed)
{
EditorGUI.DrawRect(sideLineRect, Color.red);
var sideInfoRect = new Rect(1, rect.y - 3, 20, 20);
if (UnityEngine.GUI.Button(sideInfoRect,
new GUIContent(new GUIContent(HelpTexture,
@"Fast Script Reload - Error
Last hot reload failed.
Please click for more details.")),
EditorStyles.linkLabel))
{
FastScriptReloadWelcomeScreen.Init().OpenInspectError(fileHotReloadState);
};
}
else if (fileHotReloadState.IsChangeHotSwapped)
{
EditorGUI.DrawRect(sideLineRect, Color.green);
}
}
}
}
}