using System.Collections.Generic;
using UnityEngine.XR.Interaction.Toolkit.Filtering;
using UnityEngine.XR.Interaction.Toolkit.Interactables;
namespace UnityEngine.XR.Interaction.Toolkit.Samples.VisionOS
{
///
/// Reset helper script that resets all objects that have a Resetable component attached.
///
[RequireComponent(typeof(XRBaseInteractable))]
public class ResetAll : MonoBehaviour
{
List m_Resetables = new List();
XRBaseInteractable m_Interactable;
void Awake()
{
#if UNITY_2023_1_OR_NEWER
m_Resetables.AddRange(FindObjectsByType(FindObjectsSortMode.None));
#else
m_Resetables.AddRange(FindObjectsOfType());
#endif
m_Interactable = GetComponent();
m_Interactable.selectExited.AddListener(OnSelectExited);
}
void OnSelectExited(SelectExitEventArgs args)
{
// If the interactor is a poke interactor, reset all objects.
if (args.interactorObject is IPokeStateDataProvider)
ResetAllObjects();
}
public void ResetAllObjects()
{
foreach (var resetable in m_Resetables)
{
resetable.DoReset();
}
}
}
}