Spelunx Cavern SDK
 
Loading...
Searching...
No Matches
OVRT_BoundTrackedObject.cs
Go to the documentation of this file.
1using UnityEngine;
2using UnityEngine.Events;
3using Valve.VR;
4
5namespace Spelunx.Vive
6{
7 /// <summary>
8 /// Maps tracked OpenVR poses to transform by serial number bindings. Can use tracker roles defined by SteamVR.
9 /// </summary>
11 {
12 public string binding;
13 [Tooltip("If not set, relative to parent")]
14
15 private UnityAction<string, TrackedDevicePose_t, int> _onNewBoundPoseAction;
16 private UnityAction _onTrackerRolesChanged;
17
18 private void OnDeviceConnected(int index, bool connected)
19 {
20 if (DeviceIndex == index && !connected)
21 {
22 IsConnected = false;
23 }
24 }
25
26 private void OnNewBoundPose(string binding, TrackedDevicePose_t pose, int deviceIndex)
27 {
28 if (this.binding != binding)
29 return;
30
31 IsValid = false;
32
33 if (DeviceIndex != deviceIndex)
34 {
35 DeviceIndex = deviceIndex;
37 }
38 IsConnected = pose.bDeviceIsConnected;
39
40 if (!pose.bDeviceIsConnected)
41 return;
42
43 if (!pose.bPoseIsValid)
44 return;
45
46 IsValid = true;
47
48 var rigidTransform = new OVRT_Utils.RigidTransform(pose.mDeviceToAbsoluteTracking);
49
50 if (origin != null)
51 {
52 transform.position = origin.transform.TransformPoint(rigidTransform.pos);
53 transform.rotation = origin.rotation * rigidTransform.rot;
54 }
55 else
56 {
57 transform.localPosition = rigidTransform.pos;
58 transform.localRotation = rigidTransform.rot;
59 }
60 }
61
62 private void OnTrackerRolesChanged()
63 {
64 IsValid = false;
65 IsConnected = false;
66 }
67
68 private void Awake()
69 {
70 _onNewBoundPoseAction += OnNewBoundPose;
71 _onDeviceConnectedAction += OnDeviceConnected;
72 _onTrackerRolesChanged += OnTrackerRolesChanged;
73 }
74
75 private void OnEnable()
76 {
77 OVRT_Events.NewBoundPose.AddListener(_onNewBoundPoseAction);
78 OVRT_Events.TrackedDeviceConnected.AddListener(_onDeviceConnectedAction);
79 OVRT_Events.TrackerRolesChanged.AddListener(_onTrackerRolesChanged);
80 }
81
82 private void OnDisable()
83 {
84 OVRT_Events.NewBoundPose.RemoveListener(_onNewBoundPoseAction);
85 OVRT_Events.TrackedDeviceConnected.RemoveListener(_onDeviceConnectedAction);
86 OVRT_Events.TrackerRolesChanged.RemoveListener(_onTrackerRolesChanged);
87 IsValid = false;
88 IsConnected = false;
89 }
90 }
91}
Maps tracked OpenVR poses to transform by serial number bindings. Can use tracker roles defined by St...
UnityAction< int, bool > _onDeviceConnectedAction