mirror of
https://github.com/DrBeef/QuestZDoom.git
synced 2025-03-04 16:41:34 +00:00
Merged @Baggyg's changes for Cybershoes support
This commit is contained in:
parent
035881dbdd
commit
f8ab514d5c
4 changed files with 55 additions and 28 deletions
|
@ -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;
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
||||||
|
|
|
@ -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);
|
rightRemoteTracking_new = remoteTracking;
|
||||||
|
controllerIDs[1] = capsHeader.DeviceID;
|
||||||
if (remoteCapabilities.ControllerCapabilities & ovrControllerCaps_RightHand) {
|
} else {
|
||||||
rightTrackedRemoteState_new = trackedRemoteState;
|
leftTrackedRemoteState_new = remoteState;
|
||||||
rightRemoteTracking_new = remoteTracking;
|
leftRemoteTracking_new = remoteTracking;
|
||||||
controllerIDs[1] = cap.DeviceID;
|
controllerIDs[0] = capsHeader.DeviceID;
|
||||||
} else{
|
}
|
||||||
leftTrackedRemoteState_new = trackedRemoteState;
|
}
|
||||||
leftRemoteTracking_new = remoteTracking;
|
|
||||||
controllerIDs[0] = cap.DeviceID;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue