Skip to content

Commit 175016c

Browse files
dariollawwong
authored andcommitted
Update ControllerManagerSample.cs
fixed support for StickyGrabbables, cleaned up side cases where updateactivity was needed, added more button options for laser pointer, fixed typo
1 parent c584771 commit 175016c

File tree

1 file changed

+114
-10
lines changed

1 file changed

+114
-10
lines changed

Assets/HTC.UnityPlugin/ViveInputUtility/Scripts/Misc/ControllerManagerSample.cs

Lines changed: 114 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)