Skip to content

Commit 61f23c1

Browse files
committed
Add z order for HPUI Interactables
1 parent 26a2b13 commit 61f23c1

File tree

4 files changed

+28
-6
lines changed

4 files changed

+28
-6
lines changed

Editor/HPUIBaseInteractableEditor.cs

+4
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,9 @@ protected override List<string> GetDerivedSerializedPropertyNames()
5454
props.AddRange(EventPropertyNames);
5555
return props;
5656
}
57+
58+
/// <inheritdoc />
59+
protected override void DrawSelectionConfiguration()
60+
{}
5761
}
5862
}

Runtime/Interaction/HPUIBaseInteractable.cs

+7
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ public Handedness Handedness
2424

2525
public Collider boundsCollider;
2626

27+
[SerializeField]
28+
private int _zOrder;
29+
30+
/// <inheritdoc />
31+
public int zOrder { get => _zOrder; set => _zOrder = value; }
32+
2733
[SerializeField]
2834
private HPUITapEvent tapEvent = new HPUITapEvent();
2935

@@ -48,6 +54,7 @@ protected override void Awake()
4854
{
4955
base.Awake();
5056
getDistanceOverride = GetDistanceOverride;
57+
selectMode = InteractableSelectMode.Single;
5158
}
5259

5360
/// <inheritdoc />

Runtime/Interaction/HPUIInteractor.cs

+12-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Linq;
34
using UnityEngine;
45
using UnityEngine.Pool;
56
using UnityEngine.XR.Hands;
@@ -14,7 +15,7 @@ namespace ubco.ovilab.HPUI.Interaction
1415
[DisallowMultipleComponent]
1516
public class HPUIInteractor: XRPokeInteractor, IHPUIInteractor
1617
{
17-
public Handedness handedness;
18+
public new Handedness handedness;
1819

1920
// TODO move these to an asset?
2021
[SerializeField]
@@ -87,16 +88,21 @@ public override void GetValidTargets(List<IXRInteractable> targets)
8788
List<IXRInteractable> recievedTargets = ListPool<IXRInteractable>.Get();
8889
recievedTargets.AddRange(targets);
8990

90-
foreach(IXRInteractable target in recievedTargets)
91+
targets.Clear();
92+
foreach(IXRInteractable target in recievedTargets.Select(t => t as IHPUIInteractable).Where(ht => ht != null).OrderBy(ht => ht.zOrder))
9193
{
92-
if (!(target is HPUIBaseInteractable hpuiTarget) || hpuiTarget.Handedness != handedness)
93-
{
94-
targets.Remove(target);
95-
}
94+
targets.Add(target);
9695
}
9796
ListPool<IXRInteractable>.Release(recievedTargets);
9897
}
9998

99+
/// <inheritdoc />
100+
public override bool CanSelect(IXRSelectInteractable interactable)
101+
{
102+
return ProcessSelectFilters(interactable);
103+
}
104+
105+
100106
#region IHPUIInteractor interface
101107
/// <inheritdoc />
102108
public void OnTap(HPUITapEventArgs args)

Runtime/Interaction/IHPUIInteractable.cs

+5
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ namespace ubco.ovilab.HPUI.Interaction
55
{
66
public interface IHPUIInteractable : IXRInteractable, IXRSelectInteractable
77
{
8+
/// <summary>
9+
/// Lower z order will get higher priority.
10+
/// </summary>
11+
int zOrder { get; set; }
12+
813
/// <summary>
914
/// Get the projection of the interactors position on the xz plane of this interactable, normalized.
1015
/// the returned Vector2 - (x, z) on the xz-plane.

0 commit comments

Comments
 (0)