DelayedCallback.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. namespace UnityEditor.TestTools.TestRunner
  2. {
  3. internal class DelayedCallback
  4. {
  5. private System.Action m_Callback;
  6. private double m_CallbackTime;
  7. private double m_Delay;
  8. public DelayedCallback(System.Action function, double timeFromNow)
  9. {
  10. m_Callback = function;
  11. m_CallbackTime = EditorApplication.timeSinceStartup + timeFromNow;
  12. m_Delay = timeFromNow;
  13. EditorApplication.update += Update;
  14. }
  15. public void Clear()
  16. {
  17. EditorApplication.update -= Update;
  18. m_CallbackTime = 0.0;
  19. m_Callback = null;
  20. }
  21. private void Update()
  22. {
  23. if (EditorApplication.timeSinceStartup > m_CallbackTime)
  24. {
  25. // Clear state before firing callback to ensure reset (callback could call ExitGUI)
  26. var callback = m_Callback;
  27. Clear();
  28. callback?.Invoke();
  29. }
  30. }
  31. public void Reset()
  32. {
  33. if (m_Callback != null)
  34. {
  35. m_CallbackTime = EditorApplication.timeSinceStartup + m_Delay;
  36. }
  37. }
  38. }
  39. }