12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- 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;
- }
- }
|