Skip to content

Commit f8ab514

Browse files
committed
Merged @baggyg's changes for Cybershoes support
1 parent 035881d commit f8ab514

File tree

4 files changed

+56
-29
lines changed

4 files changed

+56
-29
lines changed

Projects/Android/jni/QzDoom/QzDoom_SurfaceView.c

+6-2
Original file line numberDiff line numberDiff line change
@@ -1629,13 +1629,17 @@ void QzDoom_getTrackedRemotesOrientation(int vr_control_scheme) {//Get info for
16291629
switch ((int)vr_control_scheme)
16301630
{
16311631
case RIGHT_HANDED_DEFAULT:
1632-
HandleInput_Default(vr_control_scheme, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new,
1632+
HandleInput_Default(vr_control_scheme,
1633+
&footTrackedRemoteState_new, &footTrackedRemoteState_old,
1634+
&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new,
16331635
&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new,
16341636
ovrButton_A, ovrButton_B, ovrButton_X, ovrButton_Y);
16351637
break;
16361638
case LEFT_HANDED_DEFAULT:
16371639
case LEFT_HANDED_ALT:
1638-
HandleInput_Default(vr_control_scheme, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new,
1640+
HandleInput_Default(vr_control_scheme,
1641+
&footTrackedRemoteState_new, &footTrackedRemoteState_old,
1642+
&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new,
16391643
&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new,
16401644
ovrButton_X, ovrButton_Y, ovrButton_A, ovrButton_B);
16411645
break;

Projects/Android/jni/QzDoom/VrInput.h

+6-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ ovrInputStateTrackedRemote rightTrackedRemoteState_old;
1212
ovrInputStateTrackedRemote rightTrackedRemoteState_new;
1313
ovrTracking rightRemoteTracking_new;
1414

15+
ovrInputStateGamepad footTrackedRemoteState_old;
16+
ovrInputStateGamepad footTrackedRemoteState_new;
17+
18+
1519
ovrDeviceID controllerIDs[2];
1620

1721
float remote_movementSideways;
@@ -26,7 +30,8 @@ float cinemamodePitch;
2630

2731
void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime);
2832

29-
void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
33+
void HandleInput_Default( int control_scheme, ovrInputStateGamepad *pFootTrackingNew, ovrInputStateGamepad *pFootTrackingOld, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
34+
ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
3035
ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking,
3136
int domButton1, int domButton2, int offButton1, int offButton2 );
3237

Projects/Android/jni/QzDoom/VrInputCommon.c

+40-23
Original file line numberDiff line numberDiff line change
@@ -84,34 +84,51 @@ bool between(float min, float val, float max)
8484

8585
void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime) {//The amount of yaw changed by controller
8686
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);
8989
if (result < 0) {
9090
break;
9191
}
9292

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) {
94109
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+
}
115132
}
116133
}
117134
}

Projects/Android/jni/QzDoom/VrInputDefault.c

+4-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ int getMenuState();
2323
void Joy_GenerateButtonEvents(int oldbuttons, int newbuttons, int numbuttons, int base);
2424
float getViewpointYaw();
2525

26-
void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
26+
void HandleInput_Default( int control_scheme, ovrInputStateGamepad *pFootTrackingNew, ovrInputStateGamepad *pFootTrackingOld,
27+
ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
2728
ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking,
2829
int domButton1, int domButton2, int offButton1, int offButton2 )
2930

@@ -243,8 +244,8 @@ void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDomin
243244
//and we don't get movement jitter when the joystick doesn't quite center properly
244245
float dist = length(pSecondaryTrackedRemoteNew->Joystick.x, pSecondaryTrackedRemoteNew->Joystick.y);
245246
float nlf = nonLinearFilter(dist);
246-
float x = nlf * pSecondaryTrackedRemoteNew->Joystick.x;
247-
float y = nlf * pSecondaryTrackedRemoteNew->Joystick.y;
247+
float x = nlf * pSecondaryTrackedRemoteNew->Joystick.x + pFootTrackingNew->LeftJoystick.x;
248+
float y = nlf * pSecondaryTrackedRemoteNew->Joystick.y - pFootTrackingNew->LeftJoystick.y;
248249

249250
//Apply a simple deadzone
250251
player_moving = (fabs(x) + fabs(y)) > 0.05f;

0 commit comments

Comments
 (0)