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

73 lines
1.4 KiB
C#

using System;
using UnityEditor;
namespace Unity.PlasticSCM.Editor.UI
{
internal class DelayedActionByFramesRunner
{
internal static bool IsUnitTesting { get; set; }
internal bool IsRunning { get { return mIsOnDelay; } }
internal DelayedActionByFramesRunner(Action action, int delayFrames)
{
mAction = action;
mDelayFrames = delayFrames;
}
internal void Run()
{
if (IsUnitTesting)
{
mAction();
return;
}
if (mIsOnDelay)
{
RefreshDelay();
return;
}
StartDelay();
}
void RefreshDelay()
{
mFramesOnDelay = mDelayFrames;
}
void StartDelay()
{
mIsOnDelay = true;
EditorApplication.update += OnUpdate;
RefreshDelay();
}
void EndDelay()
{
mIsOnDelay = false;
EditorApplication.update -= OnUpdate;
mAction();
}
void OnUpdate()
{
mFramesOnDelay--;
if (mFramesOnDelay <= 0)
EndDelay();
}
bool mIsOnDelay;
int mFramesOnDelay;
readonly int mDelayFrames;
readonly Action mAction;
}
}