Merged @Baggyg's changes for Cybershoes support

This commit is contained in:
Simon 2021-05-16 19:35:30 +01:00
parent 035881dbdd
commit f8ab514d5c
4 changed files with 55 additions and 28 deletions

View file

@ -1629,13 +1629,17 @@ void QzDoom_getTrackedRemotesOrientation(int vr_control_scheme) {//Get info for
switch ((int)vr_control_scheme) switch ((int)vr_control_scheme)
{ {
case RIGHT_HANDED_DEFAULT: case RIGHT_HANDED_DEFAULT:
HandleInput_Default(vr_control_scheme, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, HandleInput_Default(vr_control_scheme,
&footTrackedRemoteState_new, &footTrackedRemoteState_old,
&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new,
&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new,
ovrButton_A, ovrButton_B, ovrButton_X, ovrButton_Y); ovrButton_A, ovrButton_B, ovrButton_X, ovrButton_Y);
break; break;
case LEFT_HANDED_DEFAULT: case LEFT_HANDED_DEFAULT:
case LEFT_HANDED_ALT: case LEFT_HANDED_ALT:
HandleInput_Default(vr_control_scheme, &leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new, HandleInput_Default(vr_control_scheme,
&footTrackedRemoteState_new, &footTrackedRemoteState_old,
&leftTrackedRemoteState_new, &leftTrackedRemoteState_old, &leftRemoteTracking_new,
&rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new, &rightTrackedRemoteState_new, &rightTrackedRemoteState_old, &rightRemoteTracking_new,
ovrButton_X, ovrButton_Y, ovrButton_A, ovrButton_B); ovrButton_X, ovrButton_Y, ovrButton_A, ovrButton_B);
break; break;

View file

@ -12,6 +12,10 @@ ovrInputStateTrackedRemote rightTrackedRemoteState_old;
ovrInputStateTrackedRemote rightTrackedRemoteState_new; ovrInputStateTrackedRemote rightTrackedRemoteState_new;
ovrTracking rightRemoteTracking_new; ovrTracking rightRemoteTracking_new;
ovrInputStateGamepad footTrackedRemoteState_old;
ovrInputStateGamepad footTrackedRemoteState_new;
ovrDeviceID controllerIDs[2]; ovrDeviceID controllerIDs[2];
float remote_movementSideways; float remote_movementSideways;
@ -26,7 +30,8 @@ float cinemamodePitch;
void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime); void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime);
void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, void HandleInput_Default( int control_scheme, ovrInputStateGamepad *pFootTrackingNew, ovrInputStateGamepad *pFootTrackingOld, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew,
ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking,
int domButton1, int domButton2, int offButton1, int offButton2 ); int domButton1, int domButton2, int offButton1, int offButton2 );

View file

@ -84,34 +84,51 @@ bool between(float min, float val, float max)
void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime) {//The amount of yaw changed by controller void acquireTrackedRemotesData(const ovrMobile *Ovr, double displayTime) {//The amount of yaw changed by controller
for ( int i = 0; ; i++ ) { for ( int i = 0; ; i++ ) {
ovrInputCapabilityHeader cap; ovrInputCapabilityHeader capsHeader;
ovrResult result = vrapi_EnumerateInputDevices(Ovr, i, &cap); ovrResult result = vrapi_EnumerateInputDevices(Ovr, i, &capsHeader);
if (result < 0) { if (result < 0) {
break; break;
} }
if (cap.Type == ovrControllerType_TrackedRemote) { if (capsHeader.Type == ovrControllerType_Gamepad) {
ovrInputGamepadCapabilities remoteCaps;
remoteCaps.Header = capsHeader;
if (vrapi_GetInputDeviceCapabilities(Ovr, &remoteCaps.Header) >= 0) {
// remote is connected
ovrInputStateGamepad remoteState;
remoteState.Header.ControllerType = ovrControllerType_Gamepad;
if ( vrapi_GetCurrentInputState( Ovr, capsHeader.DeviceID, &remoteState.Header ) >= 0 )
{
// act on device state returned in remoteState
footTrackedRemoteState_new = remoteState;
}
}
}
else if (capsHeader.Type == ovrControllerType_TrackedRemote) {
ovrTracking remoteTracking; ovrTracking remoteTracking;
ovrInputStateTrackedRemote trackedRemoteState; ovrInputTrackedRemoteCapabilities remoteCaps;
trackedRemoteState.Header.ControllerType = ovrControllerType_TrackedRemote; remoteCaps.Header = capsHeader;
result = vrapi_GetCurrentInputState(Ovr, cap.DeviceID, &trackedRemoteState.Header); if ( vrapi_GetInputDeviceCapabilities( Ovr, &remoteCaps.Header ) >= 0 )
{
// remote is connected
ovrInputStateTrackedRemote remoteState;
remoteState.Header.ControllerType = ovrControllerType_TrackedRemote;
if (result == ovrSuccess) { if(vrapi_GetCurrentInputState(Ovr, capsHeader.DeviceID, &remoteState.Header) >= 0) {
ovrInputTrackedRemoteCapabilities remoteCapabilities; if (vrapi_GetInputTrackingState(Ovr, capsHeader.DeviceID, displayTime,
remoteCapabilities.Header = cap; &remoteTracking) >= 0) {
result = vrapi_GetInputDeviceCapabilities(Ovr, &remoteCapabilities.Header); // act on device state returned in remoteState
if (remoteCaps.ControllerCapabilities & ovrControllerCaps_RightHand) {
result = vrapi_GetInputTrackingState(Ovr, cap.DeviceID, displayTime, rightTrackedRemoteState_new = remoteState;
&remoteTracking);
if (remoteCapabilities.ControllerCapabilities & ovrControllerCaps_RightHand) {
rightTrackedRemoteState_new = trackedRemoteState;
rightRemoteTracking_new = remoteTracking; rightRemoteTracking_new = remoteTracking;
controllerIDs[1] = cap.DeviceID; controllerIDs[1] = capsHeader.DeviceID;
} else { } else {
leftTrackedRemoteState_new = trackedRemoteState; leftTrackedRemoteState_new = remoteState;
leftRemoteTracking_new = remoteTracking; leftRemoteTracking_new = remoteTracking;
controllerIDs[0] = cap.DeviceID; controllerIDs[0] = capsHeader.DeviceID;
}
}
} }
} }
} }

View file

@ -23,7 +23,8 @@ int getMenuState();
void Joy_GenerateButtonEvents(int oldbuttons, int newbuttons, int numbuttons, int base); void Joy_GenerateButtonEvents(int oldbuttons, int newbuttons, int numbuttons, int base);
float getViewpointYaw(); float getViewpointYaw();
void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking, void HandleInput_Default( int control_scheme, ovrInputStateGamepad *pFootTrackingNew, ovrInputStateGamepad *pFootTrackingOld,
ovrInputStateTrackedRemote *pDominantTrackedRemoteNew, ovrInputStateTrackedRemote *pDominantTrackedRemoteOld, ovrTracking* pDominantTracking,
ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking, ovrInputStateTrackedRemote *pOffTrackedRemoteNew, ovrInputStateTrackedRemote *pOffTrackedRemoteOld, ovrTracking* pOffTracking,
int domButton1, int domButton2, int offButton1, int offButton2 ) int domButton1, int domButton2, int offButton1, int offButton2 )
@ -243,8 +244,8 @@ void HandleInput_Default( int control_scheme, ovrInputStateTrackedRemote *pDomin
//and we don't get movement jitter when the joystick doesn't quite center properly //and we don't get movement jitter when the joystick doesn't quite center properly
float dist = length(pSecondaryTrackedRemoteNew->Joystick.x, pSecondaryTrackedRemoteNew->Joystick.y); float dist = length(pSecondaryTrackedRemoteNew->Joystick.x, pSecondaryTrackedRemoteNew->Joystick.y);
float nlf = nonLinearFilter(dist); float nlf = nonLinearFilter(dist);
float x = nlf * pSecondaryTrackedRemoteNew->Joystick.x; float x = nlf * pSecondaryTrackedRemoteNew->Joystick.x + pFootTrackingNew->LeftJoystick.x;
float y = nlf * pSecondaryTrackedRemoteNew->Joystick.y; float y = nlf * pSecondaryTrackedRemoteNew->Joystick.y - pFootTrackingNew->LeftJoystick.y;
//Apply a simple deadzone //Apply a simple deadzone
player_moving = (fabs(x) + fabs(y)) > 0.05f; player_moving = (fabs(x) + fabs(y)) > 0.05f;