Make drag hand swap action functional
This commit is contained in:
@@ -635,17 +635,27 @@ void MoveCenterTabController::leftHandSpaceDrag( bool leftHandDragActive )
|
|||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
|
// otherwise check right hand for activated swap drag
|
||||||
|
if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
// override of left hand still active?
|
// override of left hand still active?
|
||||||
else if ( m_overrideLeftHandDragPressed )
|
else if ( m_overrideLeftHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
|
// swap activation of left hand still active?
|
||||||
|
else if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
// check non-override right hand action
|
// check non-override right hand action
|
||||||
if ( m_rightHandDragPressed )
|
if ( m_rightHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
// nothing else is pressed, deactivate move
|
// nothing else is pressed, deactivate drag
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
@@ -678,17 +688,27 @@ void MoveCenterTabController::rightHandSpaceDrag( bool rightHandDragActive )
|
|||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
|
// otherwise check left hand for activated swap drag
|
||||||
|
if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
// override of right hand still active?
|
// override of right hand still active?
|
||||||
else if ( m_overrideRightHandDragPressed )
|
else if ( m_overrideRightHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
|
// swap activation of right hand still active?
|
||||||
|
else if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
// check non-override left hand action
|
// check non-override left hand action
|
||||||
if ( m_leftHandDragPressed )
|
if ( m_leftHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
// nothing else is pressed, deactivate move
|
// nothing else is pressed, deactivate drag
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
@@ -721,17 +741,27 @@ void MoveCenterTabController::optionalOverrideLeftHandSpaceDrag(
|
|||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
|
// otherwise check right hand for activated swap drag
|
||||||
|
if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
// otherwise check normal action
|
// otherwise check normal action
|
||||||
else if ( m_rightHandDragPressed )
|
else if ( m_rightHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
|
// swap activation of left hand still active?
|
||||||
|
else if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
// check if we should fall back to non-override left hand
|
// check if we should fall back to non-override left hand
|
||||||
else if ( m_leftHandDragPressed )
|
else if ( m_leftHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
// nothing else is pressed, deactivate move
|
// nothing else is pressed, deactivate drag
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
@@ -763,17 +793,27 @@ void MoveCenterTabController::optionalOverrideRightHandSpaceDrag(
|
|||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
|
// otherwise check left hand for activated swap drag
|
||||||
|
if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
// otherwise check normal action
|
// otherwise check normal action
|
||||||
else if ( m_leftHandDragPressed )
|
else if ( m_leftHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
// check if we should fall back to non-override left hand
|
// swap activation of right hand still active?
|
||||||
|
else if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// check if we should fall back to non-override right hand
|
||||||
else if ( m_rightHandDragPressed )
|
else if ( m_rightHandDragPressed )
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
}
|
}
|
||||||
// nothing else is pressed, deactivate move
|
// nothing else is pressed, deactivate drag
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
@@ -782,6 +822,164 @@ void MoveCenterTabController::optionalOverrideRightHandSpaceDrag(
|
|||||||
m_overrideRightHandDragPressed = overrideRightHandDragActive;
|
m_overrideRightHandDragPressed = overrideRightHandDragActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MoveCenterTabController::swapSpaceDragToLeftHandOverride(
|
||||||
|
bool swapDragToLeftHand )
|
||||||
|
{
|
||||||
|
if ( !m_settingsLeftHandDragEnabled )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// detect new press
|
||||||
|
if ( swapDragToLeftHand && !m_swapDragToLeftHandPressed )
|
||||||
|
{
|
||||||
|
// check for active right hand drag to swap from
|
||||||
|
if ( m_activeDragHand == vr::TrackedControllerRole_RightHand )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
// stop any active rotate because we're in override mode
|
||||||
|
m_activeTurnHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
// set this hand's swap action to successfully activated for
|
||||||
|
// tracking if we should pass the drag back if another hand is
|
||||||
|
// released
|
||||||
|
m_swapDragToLeftHandActivated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// detect new release
|
||||||
|
else if ( !swapDragToLeftHand && m_swapDragToLeftHandPressed )
|
||||||
|
{
|
||||||
|
// check if the left hand swap had even activated
|
||||||
|
if ( m_swapDragToLeftHandActivated
|
||||||
|
&& m_activeDragHand == vr::TrackedControllerRole_LeftHand )
|
||||||
|
{
|
||||||
|
// check if we should pass back to other hand
|
||||||
|
// give priority to override action
|
||||||
|
if ( m_overrideRightHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// otherwise check if other hand's swap drag was active
|
||||||
|
else if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// otherwise check if we retain left hand via its override
|
||||||
|
// action
|
||||||
|
else if ( m_overrideLeftHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
|
// otherwise check normal action on right hand
|
||||||
|
else if ( m_rightHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// otherwise check if we retain left hand via its normal action
|
||||||
|
else if ( m_leftHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
|
// nothing else is pressed, deactivate drag.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_swapDragToLeftHandPressed = swapDragToLeftHand;
|
||||||
|
// we only set activated flag when the swap was successfull, but we always
|
||||||
|
// deactivate when swap action isn't pressed.
|
||||||
|
if ( !swapDragToLeftHand )
|
||||||
|
{
|
||||||
|
m_swapDragToLeftHandActivated = false;
|
||||||
|
}
|
||||||
|
// deactivate turning even when not detecting a new press as long as a swap
|
||||||
|
// is successfully activated now
|
||||||
|
if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeTurnHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MoveCenterTabController::swapSpaceDragToRightHandOverride(
|
||||||
|
bool swapDragToRightHand )
|
||||||
|
{
|
||||||
|
if ( !m_settingsRightHandDragEnabled )
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// detect new press
|
||||||
|
if ( swapDragToRightHand && !m_swapDragToRightHandPressed )
|
||||||
|
{
|
||||||
|
// check for active left hand drag to swap from
|
||||||
|
if ( m_activeDragHand == vr::TrackedControllerRole_LeftHand )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
// stop any active rotate because we're in override mode
|
||||||
|
m_activeTurnHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
// set this hand's swap action to successfully activated for
|
||||||
|
// tracking if we should pass the drag back if another hand is
|
||||||
|
// released
|
||||||
|
m_swapDragToRightHandActivated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// detect new release
|
||||||
|
else if ( !swapDragToRightHand && m_swapDragToRightHandPressed )
|
||||||
|
{
|
||||||
|
// check if the right hand swap had even activated
|
||||||
|
if ( m_swapDragToRightHandActivated
|
||||||
|
&& m_activeDragHand == vr::TrackedControllerRole_RightHand )
|
||||||
|
{
|
||||||
|
// check if we should pass back to other hand
|
||||||
|
// give priority to override action
|
||||||
|
if ( m_overrideLeftHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
|
// otherwise check if other hand's swap drag was active
|
||||||
|
else if ( m_swapDragToLeftHandActivated )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
|
// otherwise check if we retain right hand via its override
|
||||||
|
// action
|
||||||
|
else if ( m_overrideRightHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// otherwise check normal action on left hand
|
||||||
|
else if ( m_leftHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_LeftHand;
|
||||||
|
}
|
||||||
|
// otherwise check if we retain right hand via its normal action
|
||||||
|
else if ( m_rightHandDragPressed )
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_RightHand;
|
||||||
|
}
|
||||||
|
// nothing else is pressed, deactivate drag.
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_activeDragHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_swapDragToRightHandPressed = swapDragToRightHand;
|
||||||
|
|
||||||
|
// we only set activated flag when the swap was successfull, but we always
|
||||||
|
// deactivate when swap action isn't pressed.
|
||||||
|
if ( !swapDragToRightHand )
|
||||||
|
{
|
||||||
|
m_swapDragToRightHandActivated = false;
|
||||||
|
}
|
||||||
|
// deactivate turning even when not detecting a new press as long as a swap
|
||||||
|
// is successfully activated now
|
||||||
|
if ( m_swapDragToRightHandActivated )
|
||||||
|
{
|
||||||
|
m_activeTurnHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// END of drag bindings
|
// END of drag bindings
|
||||||
|
|
||||||
// START of turn bindgins
|
// START of turn bindgins
|
||||||
@@ -942,7 +1140,7 @@ void MoveCenterTabController::optionalOverrideRightHandSpaceTurn(
|
|||||||
{
|
{
|
||||||
m_activeTurnHand = vr::TrackedControllerRole_LeftHand;
|
m_activeTurnHand = vr::TrackedControllerRole_LeftHand;
|
||||||
}
|
}
|
||||||
// check if we should fall back to non-override left hand
|
// check if we should fall back to non-override right hand
|
||||||
else if ( m_rightHandTurnPressed )
|
else if ( m_rightHandTurnPressed )
|
||||||
{
|
{
|
||||||
m_activeTurnHand = vr::TrackedControllerRole_RightHand;
|
m_activeTurnHand = vr::TrackedControllerRole_RightHand;
|
||||||
@@ -960,28 +1158,6 @@ void MoveCenterTabController::optionalOverrideRightHandSpaceTurn(
|
|||||||
|
|
||||||
// START of other bindings.
|
// START of other bindings.
|
||||||
|
|
||||||
void MoveCenterTabController::swapSpaceDragToLeftHandOverride(
|
|
||||||
bool swapDragToLeftHand )
|
|
||||||
{
|
|
||||||
// temp stuff for compliner warnings
|
|
||||||
if ( !swapDragToLeftHand )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO STUFF
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::swapSpaceDragToRightHandOverride(
|
|
||||||
bool swapDragToRightHand )
|
|
||||||
{
|
|
||||||
// temp stuff for compliner warnings
|
|
||||||
if ( !swapDragToRightHand )
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// TODO STUFF
|
|
||||||
}
|
|
||||||
|
|
||||||
void MoveCenterTabController::gravityToggle( bool gravityToggleJustPressed )
|
void MoveCenterTabController::gravityToggle( bool gravityToggleJustPressed )
|
||||||
{
|
{
|
||||||
// temp stuff for compliner warnings
|
// temp stuff for compliner warnings
|
||||||
@@ -1056,6 +1232,8 @@ void MoveCenterTabController::snapTurnRight( bool snapTurnRightJustPressed )
|
|||||||
setRotation( newRotationAngleDeg );
|
setRotation( newRotationAngleDeg );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// END of other bindings
|
||||||
|
|
||||||
void MoveCenterTabController::updateHmdRotationCounter(
|
void MoveCenterTabController::updateHmdRotationCounter(
|
||||||
vr::TrackedDevicePose_t hmdPose,
|
vr::TrackedDevicePose_t hmdPose,
|
||||||
double angle )
|
double angle )
|
||||||
|
|||||||
@@ -106,6 +106,10 @@ private:
|
|||||||
bool m_rightHandTurnPressed = false;
|
bool m_rightHandTurnPressed = false;
|
||||||
bool m_overrideLeftHandTurnPressed = false;
|
bool m_overrideLeftHandTurnPressed = false;
|
||||||
bool m_overrideRightHandTurnPressed = false;
|
bool m_overrideRightHandTurnPressed = false;
|
||||||
|
bool m_swapDragToLeftHandPressed = false;
|
||||||
|
bool m_swapDragToRightHandPressed = false;
|
||||||
|
bool m_swapDragToLeftHandActivated = false;
|
||||||
|
bool m_swapDragToRightHandActivated = false;
|
||||||
unsigned settingsUpdateCounter = 0;
|
unsigned settingsUpdateCounter = 0;
|
||||||
int m_hmdRotationStatsUpdateCounter = 0;
|
int m_hmdRotationStatsUpdateCounter = 0;
|
||||||
unsigned m_dragComfortFrameSkipCounter = 0;
|
unsigned m_dragComfortFrameSkipCounter = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user