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