Skip to content

Commit e676b0f

Browse files
committed
Refactor how colliders are processed in interactor.preproces step
1 parent 4168c18 commit e676b0f

File tree

3 files changed

+46
-7
lines changed

3 files changed

+46
-7
lines changed

Runtime/Interaction/HPUIInteractor.cs

+8-6
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ public class HPUIInteractor: XRBaseInteractor, IHPUIInteractor
6464
private bool justStarted = false;
6565
private Vector3 lastInteractionPoint;
6666
private PhysicsScene physicsScene;
67-
private RaycastHit[] sphereCastHits = new RaycastHit[25];
68-
private Collider[] overlapSphereHits = new Collider[25];
67+
private RaycastHit[] sphereCastHits = new RaycastHit[200];
68+
private Collider[] overlapSphereHits = new Collider[200];
6969

7070
/// <inheritdoc />
7171
protected override void Awake()
@@ -130,6 +130,7 @@ public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase u
130130
// If no movement is recorded.
131131
// Check if spherecast size is sufficient for proper cast, or if first frame since last frame poke position will be invalid.
132132
int numberOfOverlaps;
133+
List<Collider> colliders;
133134

134135
if (justStarted || overlapSqrMagnitude < 0.001f)
135136
{
@@ -141,6 +142,7 @@ public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase u
141142
Physics.AllLayers,
142143
// FIXME: QueryTriggerInteraction should be allowed to be set in inpsector
143144
QueryTriggerInteraction.Ignore);
145+
colliders = overlapSphereHits.ToList();
144146
}
145147
else
146148
{
@@ -154,17 +156,17 @@ public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase u
154156
Physics.AllLayers,
155157
// FIXME: QueryTriggerInteraction should be allowed to be set in inpsector
156158
QueryTriggerInteraction.Ignore);
157-
159+
colliders = sphereCastHits.Select(s => s.collider).ToList();
158160
}
159161

160162
lastInteractionPoint = pokeInteractionPoint;
161163
justStarted = false;
162164

163165
for (var i = 0; i < numberOfOverlaps; ++i)
164166
{
165-
if (interactionManager.TryGetInteractableForCollider(sphereCastHits[i].collider, out var interactable) &&
166-
interactable is IXRSelectInteractable selectable &&
167-
interactable is IXRHoverInteractable hoverable && hoverable.IsHoverableBy(this))
167+
if (interactionManager.TryGetInteractableForCollider(colliders[i], out var interactable) &&
168+
!validTargets.Contains(interactable) &&
169+
interactable is IHPUIInteractable hpuiInteractable && hpuiInteractable.IsHoverableBy(this))
168170
{
169171
validTargets.Add(interactable);
170172
}

Runtime/Interaction/IHPUIInteractable.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
namespace ubco.ovilab.HPUI.Interaction
55
{
6-
public interface IHPUIInteractable : IXRInteractable, IXRSelectInteractable
6+
public interface IHPUIInteractable : IXRSelectInteractable, IXRHoverInteractable
77
{
88
/// <summary>
99
/// Lower z order will get higher priority.

Tests/HPUIGestureLogicUnifiedTest.cs

+37
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,18 @@ void IHPUIInteractable.OnTap(HPUITapEventArgs args)
425425

426426
Transform IXRInteractable.transform => throw new NotImplementedException();
427427

428+
HoverEnterEvent IXRHoverInteractable.firstHoverEntered => throw new NotImplementedException();
429+
430+
HoverExitEvent IXRHoverInteractable.lastHoverExited => throw new NotImplementedException();
431+
432+
HoverEnterEvent IXRHoverInteractable.hoverEntered => throw new NotImplementedException();
433+
434+
HoverExitEvent IXRHoverInteractable.hoverExited => throw new NotImplementedException();
435+
436+
List<IXRHoverInteractor> IXRHoverInteractable.interactorsHovering => throw new NotImplementedException();
437+
438+
bool IXRHoverInteractable.isHovered => throw new NotImplementedException();
439+
428440
event Action<InteractableRegisteredEventArgs> IXRInteractable.registered
429441
{
430442
add
@@ -509,6 +521,31 @@ void IXRInteractable.ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase up
509521
{
510522
throw new NotImplementedException();
511523
}
524+
525+
bool IXRHoverInteractable.IsHoverableBy(IXRHoverInteractor interactor)
526+
{
527+
throw new NotImplementedException();
528+
}
529+
530+
void IXRHoverInteractable.OnHoverEntering(HoverEnterEventArgs args)
531+
{
532+
throw new NotImplementedException();
533+
}
534+
535+
void IXRHoverInteractable.OnHoverEntered(HoverEnterEventArgs args)
536+
{
537+
throw new NotImplementedException();
538+
}
539+
540+
void IXRHoverInteractable.OnHoverExiting(HoverExitEventArgs args)
541+
{
542+
throw new NotImplementedException();
543+
}
544+
545+
void IXRHoverInteractable.OnHoverExited(HoverExitEventArgs args)
546+
{
547+
throw new NotImplementedException();
548+
}
512549
#endregion
513550
}
514551
}

0 commit comments

Comments
 (0)