Skip to content

Instantly share code, notes, and snippets.

@Mikilo
Created September 22, 2020 10:26
Show Gist options
  • Save Mikilo/0f0c0549b264e6a4f7b43a2fe853949a to your computer and use it in GitHub Desktop.
Save Mikilo/0f0c0549b264e6a4f7b43a2fe853949a to your computer and use it in GitHub Desktop.
Utility.AsyncProgressBar (Unity 2019 or lower)
using UnityEditor;
using System.Reflection;
namespace NGToolsEditor
{
using UnityEngine;
[AssemblyVerifier]
public class Utility
{
#if !UNITY_2020_1_OR_NEWER
private static bool initializeAsyncProgressBarMetadata;
private static PropertyInfo AsyncProgressBarProgressInfo;
private static MethodInfo AsyncProgressBarDisplayMethod;
private static MethodInfo AsyncProgressBarClearMethod;
#endif
public static string GetAsyncProgressBarInfo()
{
#if !UNITY_2020_1_OR_NEWER
if (Utility.initializeAsyncProgressBarMetadata == false)
{
Utility.initializeAsyncProgressBarMetadata = true;
Utility.LazyInitializeAsyncProgressBarMetadata();
}
if (Utility.AsyncProgressBarProgressInfo != null)
return Utility.AsyncProgressBarProgressInfo.GetValue(null, null) as string;
#endif
return string.Empty;
}
public static void AsyncProgressBarDisplay(string progressInfo, float progress)
{
#if !UNITY_2020_1_OR_NEWER
if (Utility.initializeAsyncProgressBarMetadata == false)
{
Utility.initializeAsyncProgressBarMetadata = true;
Utility.LazyInitializeAsyncProgressBarMetadata();
}
if (Utility.AsyncProgressBarDisplayMethod != null)
Utility.AsyncProgressBarDisplayMethod.Invoke(null, new object[] { progressInfo, progress });
#endif
}
public static void AsyncProgressBarClear()
{
#if !UNITY_2020_1_OR_NEWER
if (Utility.initializeAsyncProgressBarMetadata == false)
{
Utility.initializeAsyncProgressBarMetadata = true;
Utility.LazyInitializeAsyncProgressBarMetadata();
}
if (Utility.AsyncProgressBarClearMethod != null)
Utility.AsyncProgressBarClearMethod.Invoke(null, null);
#endif
}
#if !UNITY_2020_1_OR_NEWER
[AssemblyVerifier]
private static void LazyInitializeAsyncProgressBarMetadata()
{
Type AsyncProgressBarType = AssemblyVerifier.TryGetType(typeof(EditorWindow).Assembly, "UnityEditor.AsyncProgressBar");
if (AsyncProgressBarType != null)
{
Utility.AsyncProgressBarProgressInfo = AssemblyVerifier.TryGetProperty(AsyncProgressBarType, "progressInfo", BindingFlags.Static | BindingFlags.Public);
Utility.AsyncProgressBarDisplayMethod = AssemblyVerifier.TryGetMethod(AsyncProgressBarType, "Display", BindingFlags.Static | BindingFlags.Public);
Utility.AsyncProgressBarClearMethod = AssemblyVerifier.TryGetMethod(AsyncProgressBarType, "Clear", BindingFlags.Static | BindingFlags.Public);
}
}
#endif
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment