summaryrefslogtreecommitdiff
path: root/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs')
-rw-r--r--Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs66
1 files changed, 66 insertions, 0 deletions
diff --git a/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs b/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs
new file mode 100644
index 0000000..7605a2d
--- /dev/null
+++ b/Assets/Samples/OpenXR Plugin/1.14.3/Controller/Scripts/AutomaticTrackingModeChanger.cs
@@ -0,0 +1,66 @@
+using System;
+using System.Collections.Generic;
+
+namespace UnityEngine.XR.OpenXR.Samples.ControllerSample
+{
+ public class AutomaticTrackingModeChanger : MonoBehaviour
+ {
+ [SerializeField]
+ float m_ChangeInterval = 5.0f;
+
+ private float m_TimeRemainingTillChange;
+
+ static List<XRInputSubsystem> s_InputSubsystems = new List<XRInputSubsystem>();
+ static List<TrackingOriginModeFlags> s_SupportedTrackingOriginModes = new List<TrackingOriginModeFlags>();
+
+ void OnEnable()
+ {
+ m_TimeRemainingTillChange = m_ChangeInterval;
+ }
+
+ void Update()
+ {
+ m_TimeRemainingTillChange -= Time.deltaTime;
+ if (m_TimeRemainingTillChange <= 0.0f)
+ {
+ List<XRInputSubsystem> inputSubsystems = new List<XRInputSubsystem>();
+ SubsystemManager.GetSubsystems(inputSubsystems);
+ XRInputSubsystem subsystem = inputSubsystems?[0];
+ if (subsystem != null)
+ {
+ UpdateSupportedTrackingOriginModes(subsystem);
+ SetToNextMode(subsystem);
+ }
+ m_TimeRemainingTillChange += m_ChangeInterval;
+ }
+ }
+
+ void UpdateSupportedTrackingOriginModes(XRInputSubsystem subsystem)
+ {
+ TrackingOriginModeFlags supportedOriginModes = subsystem.GetSupportedTrackingOriginModes();
+ s_SupportedTrackingOriginModes.Clear();
+ for (int i = 0; i < 31; i++)
+ {
+ uint modeToCheck = 1u << i;
+ if ((modeToCheck & ((UInt32)supportedOriginModes)) != 0)
+ {
+ s_SupportedTrackingOriginModes.Add((TrackingOriginModeFlags)modeToCheck);
+ }
+ }
+ }
+
+ void SetToNextMode(XRInputSubsystem subsystem)
+ {
+ TrackingOriginModeFlags currentOriginMode = subsystem.GetTrackingOriginMode();
+ for (int i = 0; i < s_SupportedTrackingOriginModes.Count; i++)
+ {
+ if (currentOriginMode == s_SupportedTrackingOriginModes[i])
+ {
+ int nextModeIndex = (i + 1) % s_SupportedTrackingOriginModes.Count;
+ subsystem.TrySetTrackingOriginMode(s_SupportedTrackingOriginModes[nextModeIndex]);
+ break;
+ }
+ }
+ }
+ }
+}