70 lines
1.9 KiB
C#
70 lines
1.9 KiB
C#
|
using UnityEngine;
|
||
|
|
||
|
#if UNITY_2019_1_OR_NEWER
|
||
|
using UnityEngine.UIElements;
|
||
|
#else
|
||
|
using UnityEngine.Experimental.UIElements;
|
||
|
#endif
|
||
|
|
||
|
namespace UnityEditor.Collaboration
|
||
|
{
|
||
|
internal class HistoryProgressSpinner : Image
|
||
|
{
|
||
|
private readonly Texture2D[] m_StatusWheelTextures;
|
||
|
private bool m_ProgressEnabled;
|
||
|
private IVisualElementScheduledItem m_Animation;
|
||
|
|
||
|
public bool ProgressEnabled
|
||
|
{
|
||
|
set
|
||
|
{
|
||
|
if (m_ProgressEnabled == value)
|
||
|
return;
|
||
|
|
||
|
m_ProgressEnabled = value;
|
||
|
visible = value;
|
||
|
|
||
|
|
||
|
if (value)
|
||
|
{
|
||
|
if (m_Animation == null)
|
||
|
{
|
||
|
m_Animation = this.schedule.Execute(AnimateProgress).Every(33);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
m_Animation.Resume();
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if (m_Animation != null)
|
||
|
{
|
||
|
m_Animation.Pause();
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public HistoryProgressSpinner()
|
||
|
{
|
||
|
m_StatusWheelTextures = new Texture2D[12];
|
||
|
for (int i = 0; i < 12; i++)
|
||
|
{
|
||
|
m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00"));
|
||
|
}
|
||
|
image = m_StatusWheelTextures[0];
|
||
|
style.width = m_StatusWheelTextures[0].width;
|
||
|
style.height = m_StatusWheelTextures[0].height;
|
||
|
visible = false;
|
||
|
}
|
||
|
|
||
|
private void AnimateProgress(TimerState obj)
|
||
|
{
|
||
|
int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f);
|
||
|
image = m_StatusWheelTextures[frame];
|
||
|
MarkDirtyRepaint();
|
||
|
}
|
||
|
}
|
||
|
}
|