File tree 4 files changed +28
-6
lines changed
4 files changed +28
-6
lines changed Original file line number Diff line number Diff line change @@ -54,5 +54,9 @@ protected override List<string> GetDerivedSerializedPropertyNames()
54
54
props . AddRange ( EventPropertyNames ) ;
55
55
return props ;
56
56
}
57
+
58
+ /// <inheritdoc />
59
+ protected override void DrawSelectionConfiguration ( )
60
+ { }
57
61
}
58
62
}
Original file line number Diff line number Diff line change @@ -24,6 +24,12 @@ public Handedness Handedness
24
24
25
25
public Collider boundsCollider ;
26
26
27
+ [ SerializeField ]
28
+ private int _zOrder ;
29
+
30
+ /// <inheritdoc />
31
+ public int zOrder { get => _zOrder ; set => _zOrder = value ; }
32
+
27
33
[ SerializeField ]
28
34
private HPUITapEvent tapEvent = new HPUITapEvent ( ) ;
29
35
@@ -48,6 +54,7 @@ protected override void Awake()
48
54
{
49
55
base . Awake ( ) ;
50
56
getDistanceOverride = GetDistanceOverride ;
57
+ selectMode = InteractableSelectMode . Single ;
51
58
}
52
59
53
60
/// <inheritdoc />
Original file line number Diff line number Diff line change 1
1
using System ;
2
2
using System . Collections . Generic ;
3
+ using System . Linq ;
3
4
using UnityEngine ;
4
5
using UnityEngine . Pool ;
5
6
using UnityEngine . XR . Hands ;
@@ -14,7 +15,7 @@ namespace ubco.ovilab.HPUI.Interaction
14
15
[ DisallowMultipleComponent ]
15
16
public class HPUIInteractor : XRPokeInteractor , IHPUIInteractor
16
17
{
17
- public Handedness handedness ;
18
+ public new Handedness handedness ;
18
19
19
20
// TODO move these to an asset?
20
21
[ SerializeField ]
@@ -87,16 +88,21 @@ public override void GetValidTargets(List<IXRInteractable> targets)
87
88
List < IXRInteractable > recievedTargets = ListPool < IXRInteractable > . Get ( ) ;
88
89
recievedTargets . AddRange ( targets ) ;
89
90
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 ) )
91
93
{
92
- if ( ! ( target is HPUIBaseInteractable hpuiTarget ) || hpuiTarget . Handedness != handedness )
93
- {
94
- targets . Remove ( target ) ;
95
- }
94
+ targets . Add ( target ) ;
96
95
}
97
96
ListPool < IXRInteractable > . Release ( recievedTargets ) ;
98
97
}
99
98
99
+ /// <inheritdoc />
100
+ public override bool CanSelect ( IXRSelectInteractable interactable )
101
+ {
102
+ return ProcessSelectFilters ( interactable ) ;
103
+ }
104
+
105
+
100
106
#region IHPUIInteractor interface
101
107
/// <inheritdoc />
102
108
public void OnTap ( HPUITapEventArgs args )
Original file line number Diff line number Diff line change @@ -5,6 +5,11 @@ namespace ubco.ovilab.HPUI.Interaction
5
5
{
6
6
public interface IHPUIInteractable : IXRInteractable , IXRSelectInteractable
7
7
{
8
+ /// <summary>
9
+ /// Lower z order will get higher priority.
10
+ /// </summary>
11
+ int zOrder { get ; set ; }
12
+
8
13
/// <summary>
9
14
/// Get the projection of the interactors position on the xz plane of this interactable, normalized.
10
15
/// the returned Vector2 - (x, z) on the xz-plane.
You can’t perform that action at this time.
0 commit comments