Add a sanity check on space drag distance per frame
Limits space drag to 100m per frame. This is to address a bug where universe offset openvr clamping triggering a reset might send the play back out of bounds because an active hand drag repositioned them back there (moving the user either 1000m or 40,000m in a single frame.
This commit is contained in:
@@ -1323,6 +1323,11 @@ void MoveCenterTabController::reset()
|
|||||||
m_offsetY = 0.0f;
|
m_offsetY = 0.0f;
|
||||||
m_offsetZ = 0.0f;
|
m_offsetZ = 0.0f;
|
||||||
m_rotation = 0;
|
m_rotation = 0;
|
||||||
|
m_lastControllerPosition[0] = 0.0f;
|
||||||
|
m_lastControllerPosition[1] = 0.0f;
|
||||||
|
m_lastControllerPosition[2] = 0.0f;
|
||||||
|
m_lastMoveHand = vr::TrackedControllerRole_Invalid;
|
||||||
|
m_lastRotateHand = vr::TrackedControllerRole_Invalid;
|
||||||
applyChaperoneResetData();
|
applyChaperoneResetData();
|
||||||
emit offsetXChanged( m_offsetX );
|
emit offsetXChanged( m_offsetX );
|
||||||
emit offsetYChanged( m_offsetY );
|
emit offsetYChanged( m_offsetY );
|
||||||
@@ -2546,6 +2551,14 @@ void MoveCenterTabController::updateHandDrag(
|
|||||||
|
|
||||||
// offset is un-rotated coordinates
|
// offset is un-rotated coordinates
|
||||||
|
|
||||||
|
// prevent positional glitches from exceeding max openvr offset clamps.
|
||||||
|
// We do this by detecting a drag larger than 100m in a single frame.
|
||||||
|
if ( abs( diff[0] ) > 100.0 || abs( diff[1] ) > 100.0
|
||||||
|
|| abs( diff[2] ) > 100.0 )
|
||||||
|
{
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
// prevents updating if axis movement is locked
|
// prevents updating if axis movement is locked
|
||||||
if ( !m_lockXToggle )
|
if ( !m_lockXToggle )
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user