PXR_EnterpriseTools.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using System;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. namespace Unity.XR.PICO.TOBSupport
  5. {
  6. public class PXR_EnterpriseTools : MonoBehaviour
  7. {
  8. public struct NoDelayedQueueItem
  9. {
  10. public Action action;
  11. }
  12. private List<NoDelayedQueueItem> _actions = new List<NoDelayedQueueItem>();
  13. List<NoDelayedQueueItem> _currentActions = new List<NoDelayedQueueItem>();
  14. private static PXR_EnterpriseTools instance;
  15. public void StartUp()
  16. {
  17. Debug.Log("ToBService PXR_EnterpriseTools StartUp");
  18. }
  19. public static PXR_EnterpriseTools Instance
  20. {
  21. get
  22. {
  23. if (instance == null)
  24. {
  25. instance = FindObjectOfType<PXR_EnterpriseTools>();
  26. }
  27. if (instance == null)
  28. {
  29. GameObject obj = new GameObject("PXR_EnterpriseTools");
  30. instance = obj.AddComponent<PXR_EnterpriseTools>();
  31. DontDestroyOnLoad(obj);
  32. }
  33. return instance;
  34. }
  35. }
  36. public static void QueueOnMainThread(Action taction)
  37. {
  38. lock (instance._actions)
  39. {
  40. instance._actions.Add(new NoDelayedQueueItem { action = taction });
  41. }
  42. }
  43. void Update()
  44. {
  45. if (_actions.Count > 0)
  46. {
  47. lock (_actions)
  48. {
  49. _currentActions.Clear();
  50. _currentActions.AddRange(_actions);
  51. _actions.Clear();
  52. }
  53. for (int i = 0; i < _currentActions.Count; i++)
  54. {
  55. _currentActions[i].action.Invoke();
  56. }
  57. }
  58. }
  59. }
  60. }