using System; using System.Collections.Generic; using UnityEngine; namespace Unity.XR.PXR { public class PXR_EnterpriseTools : MonoBehaviour { public struct NoDelayedQueueItem { public Action action; } private List _actions = new List(); List _currentActions = new List(); private static PXR_EnterpriseTools instance; public static PXR_EnterpriseTools Instance { get { if (instance == null) { instance = FindObjectOfType(); } if (instance == null) { GameObject obj = new GameObject("PXR_EnterpriseTools"); instance = obj.AddComponent(); DontDestroyOnLoad(obj); } return instance; } } private void Awake() { instance = this; } public void QueueOnMainThread(Action taction) { lock (instance._actions) { instance._actions.Add(new NoDelayedQueueItem { action = taction }); } } void OnDisable() { if (instance == this) { instance = null; } } void Update() { if (_actions.Count > 0) { lock (_actions) { _currentActions.Clear(); _currentActions.AddRange(_actions); _actions.Clear(); } for (int i = 0; i < _currentActions.Count; i++) { _currentActions[i].action(); } } } } }