arenos-nexus/Arenos Nexus/Library/PackageCache/com.unity.collab-proxy@ab839cc7d2ad/Editor/UI/DelayedActionBySecondsRunner.cs
Daniel 2e704cae70 init
Init Commit Unity
2025-09-25 22:01:28 +02:00

99 lines
2.0 KiB
C#

using System;
using UnityEditor;
namespace Unity.PlasticSCM.Editor.UI
{
internal class DelayedActionBySecondsRunner
{
internal static bool IsUnitTesting { get; set; }
internal bool IsRunning { get { return mIsOnDelay; } }
internal DelayedActionBySecondsRunner(Action action, double delaySeconds)
{
mAction = action;
mDelaySeconds = delaySeconds;
}
internal void Run()
{
if (IsUnitTesting)
{
mAction();
return;
}
if (mIsOnDelay)
{
RefreshDelay();
return;
}
StartDelay();
}
internal void Pause()
{
mIsPaused = true;
}
internal void Resume()
{
if (!mIsPaused)
return;
mIsPaused = false;
mLastUpdateTime = EditorApplication.timeSinceStartup;
}
void RefreshDelay()
{
mIsOnDelay = true;
mSecondsOnDelay = mDelaySeconds;
}
void StartDelay()
{
mLastUpdateTime = EditorApplication.timeSinceStartup;
EditorApplication.update += OnUpdate;
RefreshDelay();
}
void EndDelay()
{
EditorApplication.update -= OnUpdate;
mIsOnDelay = false;
mAction();
}
void OnUpdate()
{
if (mIsPaused)
return;
double updateTime = EditorApplication.timeSinceStartup;
double deltaSeconds = updateTime - mLastUpdateTime;
mSecondsOnDelay -= deltaSeconds;
if (mSecondsOnDelay < 0)
EndDelay();
mLastUpdateTime = updateTime;
}
bool mIsOnDelay;
bool mIsPaused;
double mLastUpdateTime;
double mSecondsOnDelay;
readonly double mDelaySeconds;
readonly Action mAction;
}
}