@@ -84,34 +84,51 @@ bool between(float min, float val, float max)
84
84
85
85
void acquireTrackedRemotesData (const ovrMobile * Ovr , double displayTime ) {//The amount of yaw changed by controller
86
86
for ( int i = 0 ; ; i ++ ) {
87
- ovrInputCapabilityHeader cap ;
88
- ovrResult result = vrapi_EnumerateInputDevices (Ovr , i , & cap );
87
+ ovrInputCapabilityHeader capsHeader ;
88
+ ovrResult result = vrapi_EnumerateInputDevices (Ovr , i , & capsHeader );
89
89
if (result < 0 ) {
90
90
break ;
91
91
}
92
92
93
- if (cap .Type == ovrControllerType_TrackedRemote ) {
93
+ if (capsHeader .Type == ovrControllerType_Gamepad ) {
94
+
95
+ ovrInputGamepadCapabilities remoteCaps ;
96
+ remoteCaps .Header = capsHeader ;
97
+ if (vrapi_GetInputDeviceCapabilities (Ovr , & remoteCaps .Header ) >= 0 ) {
98
+ // remote is connected
99
+ ovrInputStateGamepad remoteState ;
100
+ remoteState .Header .ControllerType = ovrControllerType_Gamepad ;
101
+ if ( vrapi_GetCurrentInputState ( Ovr , capsHeader .DeviceID , & remoteState .Header ) >= 0 )
102
+ {
103
+ // act on device state returned in remoteState
104
+ footTrackedRemoteState_new = remoteState ;
105
+ }
106
+ }
107
+ }
108
+ else if (capsHeader .Type == ovrControllerType_TrackedRemote ) {
94
109
ovrTracking remoteTracking ;
95
- ovrInputStateTrackedRemote trackedRemoteState ;
96
- trackedRemoteState .Header .ControllerType = ovrControllerType_TrackedRemote ;
97
- result = vrapi_GetCurrentInputState (Ovr , cap .DeviceID , & trackedRemoteState .Header );
98
-
99
- if (result == ovrSuccess ) {
100
- ovrInputTrackedRemoteCapabilities remoteCapabilities ;
101
- remoteCapabilities .Header = cap ;
102
- result = vrapi_GetInputDeviceCapabilities (Ovr , & remoteCapabilities .Header );
103
-
104
- result = vrapi_GetInputTrackingState (Ovr , cap .DeviceID , displayTime ,
105
- & remoteTracking );
106
-
107
- if (remoteCapabilities .ControllerCapabilities & ovrControllerCaps_RightHand ) {
108
- rightTrackedRemoteState_new = trackedRemoteState ;
109
- rightRemoteTracking_new = remoteTracking ;
110
- controllerIDs [1 ] = cap .DeviceID ;
111
- } else {
112
- leftTrackedRemoteState_new = trackedRemoteState ;
113
- leftRemoteTracking_new = remoteTracking ;
114
- controllerIDs [0 ] = cap .DeviceID ;
110
+ ovrInputTrackedRemoteCapabilities remoteCaps ;
111
+ remoteCaps .Header = capsHeader ;
112
+ if ( vrapi_GetInputDeviceCapabilities ( Ovr , & remoteCaps .Header ) >= 0 )
113
+ {
114
+ // remote is connected
115
+ ovrInputStateTrackedRemote remoteState ;
116
+ remoteState .Header .ControllerType = ovrControllerType_TrackedRemote ;
117
+
118
+ if (vrapi_GetCurrentInputState (Ovr , capsHeader .DeviceID , & remoteState .Header ) >= 0 ) {
119
+ if (vrapi_GetInputTrackingState (Ovr , capsHeader .DeviceID , displayTime ,
120
+ & remoteTracking ) >= 0 ) {
121
+ // act on device state returned in remoteState
122
+ if (remoteCaps .ControllerCapabilities & ovrControllerCaps_RightHand ) {
123
+ rightTrackedRemoteState_new = remoteState ;
124
+ rightRemoteTracking_new = remoteTracking ;
125
+ controllerIDs [1 ] = capsHeader .DeviceID ;
126
+ } else {
127
+ leftTrackedRemoteState_new = remoteState ;
128
+ leftRemoteTracking_new = remoteTracking ;
129
+ controllerIDs [0 ] = capsHeader .DeviceID ;
130
+ }
131
+ }
115
132
}
116
133
}
117
134
}
0 commit comments