Skip to content

Commit b82d836

Browse files
author
ChengNan Yang
committed
Fix Wave hand gesture cannot reset issue
1 parent 0687dfe commit b82d836

1 file changed

Lines changed: 31 additions & 40 deletions

File tree

Assets/HTC.UnityPlugin/VRModule/Submodules/WaveHandTrackingSubmodule.cs

Lines changed: 31 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -74,10 +74,14 @@ protected override void OnUpdateDeviceConnectionAndPoses()
7474
trackingActivator.TryFetchData(WVR_PoseOriginModel.WVR_PoseOriginModel_OriginOnHead);
7575
}
7676

77+
var isFocused = Interop.WVR_IsInputFocusCapturedBySystem();
78+
var isLeftValid = !isFocused && (trackingActivator.isLeftValid || gestureActivator.isLeftValid);
79+
var isRightValid = !isFocused && (trackingActivator.isRightValid || gestureActivator.isRightValid);
80+
7781
IVRModuleDeviceState prevState;
7882
IVRModuleDeviceStateRW currState;
7983
// update connection/pose for left hand devices
80-
if (trackingActivator.isLeftValid)
84+
if (isLeftValid)
8185
{
8286
if (leftDeviceIndex != VRModule.INVALID_DEVICE_INDEX)
8387
{
@@ -97,7 +101,11 @@ protected override void OnUpdateDeviceConnectionAndPoses()
97101
}
98102

99103
currState.isConnected = true;
100-
trackingActivator.UpdateJoints(currState, true);
104+
105+
if (trackingActivator.isLeftValid)
106+
{
107+
trackingActivator.UpdateJoints(currState, true);
108+
}
101109
}
102110
else
103111
{
@@ -109,7 +117,7 @@ protected override void OnUpdateDeviceConnectionAndPoses()
109117
}
110118
}
111119

112-
if (trackingActivator.isRightValid)
120+
if (isRightValid)
113121
{
114122
if (rightDeviceIndex != VRModule.INVALID_DEVICE_INDEX)
115123
{
@@ -129,7 +137,11 @@ protected override void OnUpdateDeviceConnectionAndPoses()
129137
}
130138

131139
currState.isConnected = true;
132-
trackingActivator.UpdateJoints(currState, false);
140+
141+
if (trackingActivator.isRightValid)
142+
{
143+
trackingActivator.UpdateJoints(currState, false);
144+
}
133145
}
134146
else
135147
{
@@ -151,35 +163,13 @@ protected override void OnUpdateDeviceInput()
151163
IVRModuleDeviceState prevState;
152164
IVRModuleDeviceStateRW currState;
153165

154-
if (leftDeviceIndex != VRModule.INVALID_DEVICE_INDEX)
155-
{
156-
if (gestureActivator.isLeftValid)
157-
{
158-
EnsureValidDeviceState(leftDeviceIndex, out prevState, out currState);
159-
gestureActivator.UpdateGestureInput(currState, true);
160-
}
161-
162-
if (trackingActivator.isLeftValid)
163-
{
164-
EnsureValidDeviceState(leftDeviceIndex, out prevState, out currState);
165-
trackingActivator.UpdateDeviceInput(currState, true);
166-
}
167-
}
166+
EnsureValidDeviceState(leftDeviceIndex, out prevState, out currState);
167+
gestureActivator.UpdateDeviceInput(currState, true);
168+
trackingActivator.UpdateDeviceInput(currState, true);
168169

169-
if (rightDeviceIndex != VRModule.INVALID_DEVICE_INDEX)
170-
{
171-
if (gestureActivator.isRightValid)
172-
{
173-
EnsureValidDeviceState(rightDeviceIndex, out prevState, out currState);
174-
gestureActivator.UpdateGestureInput(currState, false);
175-
}
176-
177-
if (trackingActivator.isRightValid)
178-
{
179-
EnsureValidDeviceState(rightDeviceIndex, out prevState, out currState);
180-
trackingActivator.UpdateDeviceInput(currState, false);
181-
}
182-
}
170+
EnsureValidDeviceState(rightDeviceIndex, out prevState, out currState);
171+
gestureActivator.UpdateDeviceInput(currState, false);
172+
trackingActivator.UpdateDeviceInput(currState, false);
183173
}
184174

185175
public override uint GetLeftHandedIndex() { return leftDeviceIndex; }
@@ -492,9 +482,9 @@ public bool TryFetchData(WVR_PoseOriginModel originModel)
492482
return false;
493483
}
494484

495-
public bool isLeftValid { get { return trackingData.left.isValidPose && !Interop.WVR_IsInputFocusCapturedBySystem(); } }
485+
public bool isLeftValid { get { return trackingData.left.isValidPose; } }
496486

497-
public bool isRightValid { get { return trackingData.right.isValidPose && !Interop.WVR_IsInputFocusCapturedBySystem(); } }
487+
public bool isRightValid { get { return trackingData.right.isValidPose; } }
498488

499489
public WVR_HandPoseState_t getLeftPinchData { get { return pinchData.left; } }
500490

@@ -787,20 +777,21 @@ public bool TryFetchData()
787777
return false;
788778
}
789779

790-
public void UpdateGestureInput(IVRModuleDeviceStateRW state, bool isLeft)
780+
public void UpdateDeviceInput(IVRModuleDeviceStateRW state, bool isLeft)
791781
{
792782
var gesture = isLeft ? gestureData.left : gestureData.right;
783+
793784
state.SetButtonPress(VRModuleRawButton.GestureFist, gesture == WVR_HandGestureType.WVR_HandGestureType_Fist);
794-
state.SetButtonPress(VRModuleRawButton.GestureFive, gesture == WVR_HandGestureType.WVR_HandGestureType_Five);
795-
state.SetButtonPress(VRModuleRawButton.GestureIndexUp, gesture == WVR_HandGestureType.WVR_HandGestureType_IndexUp);
796-
state.SetButtonPress(VRModuleRawButton.GestureOk, gesture == WVR_HandGestureType.WVR_HandGestureType_OK);
797-
state.SetButtonPress(VRModuleRawButton.GestureThumbUp, gesture == WVR_HandGestureType.WVR_HandGestureType_ThumbUp);
798-
state.SetButtonPress(VRModuleRawButton.System, gesture == WVR_HandGestureType_WVR_HandGestureType_Palm_Pinch);
799785
state.SetButtonTouch(VRModuleRawButton.GestureFist, gesture == WVR_HandGestureType.WVR_HandGestureType_Fist);
786+
state.SetButtonPress(VRModuleRawButton.GestureFive, gesture == WVR_HandGestureType.WVR_HandGestureType_Five);
800787
state.SetButtonTouch(VRModuleRawButton.GestureFive, gesture == WVR_HandGestureType.WVR_HandGestureType_Five);
788+
state.SetButtonPress(VRModuleRawButton.GestureIndexUp, gesture == WVR_HandGestureType.WVR_HandGestureType_IndexUp);
801789
state.SetButtonTouch(VRModuleRawButton.GestureIndexUp, gesture == WVR_HandGestureType.WVR_HandGestureType_IndexUp);
790+
state.SetButtonPress(VRModuleRawButton.GestureOk, gesture == WVR_HandGestureType.WVR_HandGestureType_OK);
802791
state.SetButtonTouch(VRModuleRawButton.GestureOk, gesture == WVR_HandGestureType.WVR_HandGestureType_OK);
792+
state.SetButtonPress(VRModuleRawButton.GestureThumbUp, gesture == WVR_HandGestureType.WVR_HandGestureType_ThumbUp);
803793
state.SetButtonTouch(VRModuleRawButton.GestureThumbUp, gesture == WVR_HandGestureType.WVR_HandGestureType_ThumbUp);
794+
state.SetButtonPress(VRModuleRawButton.System, gesture == WVR_HandGestureType_WVR_HandGestureType_Palm_Pinch);
804795
state.SetButtonTouch(VRModuleRawButton.System, gesture == WVR_HandGestureType_WVR_HandGestureType_Palm_Pinch);
805796
}
806797

0 commit comments

Comments
 (0)