You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.6 KiB
79 lines
1.6 KiB
using System; |
|
|
|
using UnityEditor; |
|
|
|
namespace Unity.PlasticSCM.Editor.UI |
|
{ |
|
public class CooldownWindowDelayer |
|
{ |
|
internal static bool IsUnitTesting { get; set; } |
|
|
|
public CooldownWindowDelayer(Action action, double cooldownSeconds) |
|
{ |
|
mAction = action; |
|
mCooldownSeconds = cooldownSeconds; |
|
} |
|
|
|
public void Ping() |
|
{ |
|
if (IsUnitTesting) |
|
{ |
|
mAction(); |
|
return; |
|
} |
|
|
|
if (mIsOnCooldown) |
|
{ |
|
RefreshCooldown(); |
|
return; |
|
} |
|
|
|
StartCooldown(); |
|
} |
|
|
|
void RefreshCooldown() |
|
{ |
|
mIsOnCooldown = true; |
|
|
|
mSecondsOnCooldown = mCooldownSeconds; |
|
} |
|
|
|
void StartCooldown() |
|
{ |
|
mLastUpdateTime = EditorApplication.timeSinceStartup; |
|
|
|
EditorApplication.update += OnUpdate; |
|
|
|
RefreshCooldown(); |
|
} |
|
|
|
void EndCooldown() |
|
{ |
|
EditorApplication.update -= OnUpdate; |
|
|
|
mIsOnCooldown = false; |
|
|
|
mAction(); |
|
} |
|
|
|
void OnUpdate() |
|
{ |
|
double updateTime = EditorApplication.timeSinceStartup; |
|
double deltaSeconds = updateTime - mLastUpdateTime; |
|
|
|
mSecondsOnCooldown -= deltaSeconds; |
|
|
|
if (mSecondsOnCooldown < 0) |
|
EndCooldown(); |
|
|
|
mLastUpdateTime = updateTime; |
|
} |
|
|
|
readonly Action mAction; |
|
readonly double mCooldownSeconds; |
|
|
|
double mLastUpdateTime; |
|
bool mIsOnCooldown; |
|
double mSecondsOnCooldown; |
|
} |
|
}
|
|
|