@@ -11,13 +11,15 @@ public enum CustomModelActiveModeEnum
1111 {
1212 None ,
1313 ActiveOnGripped ,
14- ToggleByDoubleGrip ,
14+ ToggleByDoubleGrip
1515 }
1616
1717 public enum LaserPointerActiveModeEnum
1818 {
1919 None ,
2020 ToggleByMenuClick ,
21+ ActiveOnPadPressed ,
22+ ToggleByTriggerClick
2123 }
2224
2325 public enum CurvePointerActiveModeEnum
@@ -59,6 +61,9 @@ public enum CurvePointerActiveModeEnum
5961 private bool m_leftLaserPointerActive ;
6062 private bool m_leftCurvePointerActive ;
6163
64+ private bool isLeftStickyGrab = false ;
65+ private bool isRightStickyGrab = false ;
66+
6267 private HashSet < GameObject > rightGrabbingSet = new HashSet < GameObject > ( ) ;
6368 private HashSet < GameObject > leftGrabbingSet = new HashSet < GameObject > ( ) ;
6469
@@ -224,6 +229,23 @@ protected virtual void LateUpdate()
224229 needUpdate = true ;
225230 }
226231 break ;
232+ case LaserPointerActiveModeEnum . ToggleByTriggerClick :
233+ if ( ViveInput . GetPressUpEx ( HandRole . RightHand , ControllerButton . Trigger ) )
234+ {
235+ ToggleRightLaserPointer ( ) ;
236+ needUpdate = true ;
237+ }
238+
239+ if ( ViveInput . GetPressUpEx ( HandRole . LeftHand , ControllerButton . Trigger ) )
240+ {
241+ ToggleLeftLaserPointer ( ) ;
242+ needUpdate = true ;
243+ }
244+ break ;
245+ case LaserPointerActiveModeEnum . ActiveOnPadPressed :
246+ needUpdate |= SetRightLaserPointerActive ( ViveInput . GetPressEx ( HandRole . RightHand , ControllerButton . Pad ) ) ;
247+ needUpdate |= SetLeftLaserPointerActive ( ViveInput . GetPressEx ( HandRole . LeftHand , ControllerButton . Pad ) ) ;
248+ break ;
227249 }
228250
229251 switch ( curvePointerActiveMode )
@@ -304,12 +326,44 @@ public void OnGrabbed(BasicGrabbable grabbedObj)
304326 break ;
305327 }
306328 }
329+ public void OnStickyGrabbed ( StickyGrabbable grabbedObj )
330+ {
331+ ViveColliderButtonEventData viveEventData ;
332+ if ( ! grabbedObj . grabbedEvent . TryGetViveButtonEventData ( out viveEventData ) )
333+ {
334+ return ;
335+ }
336+ UpdateActivity ( ) ;
337+ switch ( viveEventData . viveRole . ToRole < HandRole > ( ) )
338+ {
339+ case HandRole . RightHand :
340+ if ( rightGrabbingSet . Count > 0 || isRightStickyGrab )
341+ {
342+ return ;
343+ }
344+ if ( rightGrabbingSet . Add ( grabbedObj . gameObject ) && rightGrabbingSet . Count == 1 )
345+ {
346+ UpdateActivity ( ) ;
347+ }
348+ break ;
307349
350+ case HandRole . LeftHand :
351+ if ( leftGrabbingSet . Count > 0 || isLeftStickyGrab )
352+ {
353+ return ;
354+ }
355+ if ( leftGrabbingSet . Add ( grabbedObj . gameObject ) && leftGrabbingSet . Count == 1 )
356+ {
357+ UpdateActivity ( ) ;
358+ }
359+ break ;
360+ }
361+ }
308362 public void OnRelease ( BasicGrabbable releasedObj )
309363 {
310364 ViveColliderButtonEventData viveEventData ;
311365 if ( ! releasedObj . grabbedEvent . TryGetViveButtonEventData ( out viveEventData ) ) { return ; }
312-
366+ UpdateActivity ( ) ;
313367 switch ( viveEventData . viveRole . ToRole < HandRole > ( ) )
314368 {
315369 case HandRole . RightHand :
@@ -327,14 +381,63 @@ public void OnRelease(BasicGrabbable releasedObj)
327381 break ;
328382 }
329383 }
384+ public void OnLetGo ( BasicGrabbable releaseObj )
385+ {
386+ leftGrabbingSet . Clear ( ) ;
387+ rightGrabbingSet . Clear ( ) ;
388+ UpdateActivity ( ) ;
389+ }
330390
391+ public void OnStickyLetGo ( StickyGrabbable releaseObj )
392+ {
393+ leftGrabbingSet . Clear ( ) ;
394+ rightGrabbingSet . Clear ( ) ;
395+ UpdateActivity ( ) ;
396+ }
397+ public void OnStickyRelease ( StickyGrabbable releasedObj )
398+ {
399+ UpdateActivity ( ) ;
400+
401+ ViveColliderButtonEventData viveEventData ;
402+ if ( ! releasedObj . grabbedEvent . TryGetViveButtonEventData ( out viveEventData ) ) { return ; }
403+
404+ switch ( viveEventData . viveRole . ToRole < HandRole > ( ) )
405+ {
406+ case HandRole . RightHand :
407+
408+ if ( rightGrabbingSet . Remove ( releasedObj . gameObject ) && rightGrabbingSet . Count == 0 )
409+ {
410+ isRightStickyGrab = false ;
411+ UpdateActivity ( ) ;
412+ }
413+ break ;
414+
415+ case HandRole . LeftHand :
416+
417+ if ( leftGrabbingSet . Remove ( releasedObj . gameObject ) && leftGrabbingSet . Count == 0 )
418+ {
419+ isLeftStickyGrab = false ;
420+ UpdateActivity ( ) ;
421+ }
422+ break ;
423+ }
424+ }
425+ public void OnDropped ( BasicGrabbable grabbedObj )
426+ {
427+ OnRelease ( grabbedObj ) ;
428+ }
429+ public void OnDropped ( StickyGrabbable grabbedObj )
430+ {
431+ OnStickyRelease ( grabbedObj ) ;
432+ }
331433 public void UpdateActivity ( )
332434 {
333- var rightRenderModelShouldActive = ! m_rightCustomModelActive && ( ! hideRenderModelOnGrab || rightGrabbingSet . Count == 0 ) ;
435+ //var rightRenderModelShouldActive = !m_rightCustomModelActive && (!hideRenderModelOnGrab || rightGrabbingSet.Count == 0);
436+ var rightRenderModelShouldActive = ! hideRenderModelOnGrab || rightGrabbingSet . Count == 0 ;
334437 var rightCustomModelShouldActive = m_rightCustomModelActive ;
335438 var rightLaserPointerShouldActive = m_rightLaserPointerActive ;
336439 var rightCurvePointerShouldActive = m_rightCurvePointerActive ;
337- var rightGraggerShouldActive = ! m_rightLaserPointerActive && ! m_rightCustomModelActive && ! m_rightCurvePointerActive ;
440+ var rightGrabberShouldActive = ! m_rightLaserPointerActive && ! m_rightCustomModelActive && ! m_rightCurvePointerActive ;
338441
339442 if ( rightRenderModel != null && rightRenderModel . activeSelf != rightRenderModelShouldActive )
340443 {
@@ -356,16 +459,17 @@ public void UpdateActivity()
356459 rightCurvePointer . SetActive ( rightCurvePointerShouldActive ) ;
357460 }
358461
359- if ( rightGrabber != null && rightGrabber . activeSelf != rightGraggerShouldActive )
462+ if ( rightGrabber != null && rightGrabber . activeSelf != rightGrabberShouldActive )
360463 {
361- rightGrabber . SetActive ( rightGraggerShouldActive ) ;
464+ rightGrabber . SetActive ( rightGrabberShouldActive ) ;
362465 }
363466
364- var leftRenderModelShouldActive = ! m_leftCustomModelActive && ( ! hideRenderModelOnGrab || leftGrabbingSet . Count == 0 ) ;
467+ // var leftRenderModelShouldActive = !m_leftCustomModelActive && (!hideRenderModelOnGrab || leftGrabbingSet.Count == 0);
468+ var leftRenderModelShouldActive = ! hideRenderModelOnGrab || leftGrabbingSet . Count == 0 ;
365469 var leftCustomModelShouldActive = m_leftCustomModelActive ;
366470 var leftLaserPointerShouldActive = m_leftLaserPointerActive ;
367471 var leftCurvePointerShouldActive = m_leftCurvePointerActive ;
368- var leftGraggerShouldActive = ! m_leftLaserPointerActive && ! m_leftCustomModelActive && ! m_leftCurvePointerActive ;
472+ var leftGrabberShouldActive = ! m_leftLaserPointerActive && ! m_leftCustomModelActive && ! m_leftCurvePointerActive ;
369473
370474 if ( leftRenderModel != null && leftRenderModel . activeSelf != leftRenderModelShouldActive )
371475 {
@@ -387,9 +491,9 @@ public void UpdateActivity()
387491 leftCurvePointer . SetActive ( leftCurvePointerShouldActive ) ;
388492 }
389493
390- if ( leftGrabber != null && leftGrabber . activeSelf != leftGraggerShouldActive )
494+ if ( leftGrabber != null && leftGrabber . activeSelf != leftGrabberShouldActive )
391495 {
392- leftGrabber . SetActive ( leftGraggerShouldActive ) ;
496+ leftGrabber . SetActive ( leftGrabberShouldActive ) ;
393497 }
394498 }
395499}
0 commit comments