Skip to content

Commit 18adab6

Browse files
author
lawwong
committed
Merge from develop
1 parent 2e1a301 commit 18adab6

32 files changed

+13410
-533
lines changed

Assets/HTC.UnityPlugin/Pointer3D/Pointer3DInputModule.cs

Lines changed: 52 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class Pointer3DInputModule : BaseInputModule
1414
private static bool isApplicationQuitting = false;
1515

1616
private static readonly IndexedSet<Pointer3DRaycaster> raycasters = new IndexedSet<Pointer3DRaycaster>();
17-
private static readonly List<Pointer3DRaycaster> processingRaycasters = new List<Pointer3DRaycaster>();
17+
private static IndexedSet<Pointer3DRaycaster> processingRaycasters = new IndexedSet<Pointer3DRaycaster>();
1818
private static int validEventDataId = PointerInputModule.kFakeTouchesId - 1;
1919

2020
#if UNITY_5_5_OR_NEWER
@@ -138,7 +138,7 @@ protected override void OnDisable()
138138
{
139139
base.OnDisable();
140140

141-
if (Active)
141+
if (Active && processingRaycasters.Count == 0)
142142
{
143143
for (var i = raycasters.Count - 1; i >= 0; --i)
144144
{
@@ -210,22 +210,28 @@ public static void AddRaycaster(Pointer3DRaycaster raycaster)
210210
raycasters.AddUnique(raycaster);
211211
}
212212

213-
public static void RemoveRaycasters(Pointer3DRaycaster raycaster)
213+
public static void RemoveRaycaster(Pointer3DRaycaster raycaster)
214214
{
215-
raycasters.Remove(raycaster);
215+
if (!raycasters.Remove(raycaster)) { return; }
216+
217+
if (!processingRaycasters.Contains(raycaster) && Active)
218+
{
219+
Instance.CleanUpRaycaster(raycaster);
220+
}
216221
}
217222

223+
[Obsolete("Use RemoveRaycaster instead")]
224+
public static void RemoveRaycasters(Pointer3DRaycaster raycaster) { RemoveRaycaster(raycaster); }
225+
218226
protected void CleanUpRaycaster(Pointer3DRaycaster raycaster)
219227
{
220-
raycaster.CleanUpRaycast();
221-
222228
var hoverEventData = raycaster.HoverEventData;
223229

224-
// hover event
225-
hoverEventData.pointerCurrentRaycast = default(RaycastResult);
230+
hoverEventData.Reset();
226231

227232
if (hoverEventData.pointerEnter != null)
228233
{
234+
hoverEventData.pointerEnter = null;
229235
HandlePointerExitAndEnter(hoverEventData, null);
230236
}
231237

@@ -236,15 +242,26 @@ protected void CleanUpRaycaster(Pointer3DRaycaster raycaster)
236242
if (buttonEventData == null) { continue; }
237243

238244
buttonEventData.Reset();
239-
buttonEventData.pointerCurrentRaycast = default(RaycastResult);
240245

241246
ProcessPressUp(buttonEventData);
242247

243248
if (buttonEventData.pointerEnter != null)
244249
{
250+
hoverEventData.pointerEnter = null;
245251
HandlePointerExitAndEnter(buttonEventData, null);
246252
}
247253
}
254+
255+
raycaster.CleanUpRaycast();
256+
257+
for (int i = 0, imax = raycaster.ButtonEventDataList.Count; i < imax; ++i)
258+
{
259+
raycaster.ButtonEventDataList[i].pointerPressRaycast = default(RaycastResult);
260+
raycaster.ButtonEventDataList[i].pointerCurrentRaycast = default(RaycastResult);
261+
}
262+
263+
hoverEventData.pointerPressRaycast = default(RaycastResult);
264+
hoverEventData.pointerCurrentRaycast = default(RaycastResult);
248265
}
249266

250267
protected virtual void ProcessRaycast()
@@ -254,13 +271,20 @@ protected virtual void ProcessRaycast()
254271

255272
// use another list to iterate raycasters
256273
// incase that raycasters may changed during this process cycle
257-
processingRaycasters.AddRange(raycasters);
274+
for (int i = 0, imax = raycasters.Count; i < imax; ++i)
275+
{
276+
var r = raycasters[i];
277+
278+
if (r != null)
279+
{
280+
processingRaycasters.Add(r);
281+
}
282+
}
283+
258284
for (var i = processingRaycasters.Count - 1; i >= 0; --i)
259285
{
260286
var raycaster = processingRaycasters[i];
261287

262-
if (raycaster == null || !raycaster.isActiveAndEnabled) { continue; }
263-
264288
raycaster.Raycast();
265289
var result = raycaster.FirstRaycastResult();
266290

@@ -321,10 +345,24 @@ protected virtual void ProcessRaycast()
321345
var scrollHandler = ExecuteEvents.GetEventHandler<IScrollHandler>(result.gameObject);
322346
ExecuteEvents.ExecuteHierarchy(scrollHandler, hoverEventData, ExecuteEvents.scrollHandler);
323347
}
348+
}
324349

325-
if (!raycaster.isActiveAndEnabled)
350+
if (isActiveAndEnabled)
351+
{
352+
for (var i = processingRaycasters.Count - 1; i >= 0; --i)
353+
{
354+
var r = processingRaycasters[i];
355+
if (!raycasters.Contains(r))
356+
{
357+
CleanUpRaycaster(r);
358+
}
359+
}
360+
}
361+
else
362+
{
363+
for (var i = processingRaycasters.Count - 1; i >= 0; --i)
326364
{
327-
CleanUpRaycaster(raycaster);
365+
CleanUpRaycaster(processingRaycasters[i]);
328366
}
329367
}
330368

Assets/HTC.UnityPlugin/Pointer3D/Raycaster/Pointer3DRaycaster.cs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,25 +100,19 @@ protected override void Start()
100100
SetLagacyRaycastMode(m_raycastMode);
101101
m_raycastMode = RaycastMode.DefaultRaycast;
102102
}
103-
104-
Pointer3DInputModule.AddRaycaster(this);
105103
}
106104

107105
// override OnEnable & OnDisable on purpose so that this BaseRaycaster won't be registered into RaycasterManager
108106
protected override void OnEnable()
109107
{
110108
//base.OnEnable();
109+
Pointer3DInputModule.AddRaycaster(this);
111110
}
112111

113112
protected override void OnDisable()
114113
{
115114
//base.OnDisable();
116-
}
117-
118-
protected override void OnDestroy()
119-
{
120-
base.OnDestroy();
121-
Pointer3DInputModule.RemoveRaycasters(this);
115+
Pointer3DInputModule.RemoveRaycaster(this);
122116
}
123117

124118
public virtual void CleanUpRaycast()

Assets/HTC.UnityPlugin/VRModule/Modules/SteamVRModule.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
//========= Copyright 2016-2017, HTC Corporation. All rights reserved. ===========
22

33
#if VIU_STEAMVR
4-
using HTC.UnityPlugin.PoseTracker;
54
using System.Text;
65
using UnityEngine;
76
using Valve.VR;
7+
using Pose = HTC.UnityPlugin.PoseTracker.Pose;
88
#endif
99

1010
namespace HTC.UnityPlugin.VRModuleManagement

0 commit comments

Comments
 (0)