Skip to content

Commit 0de89dd

Browse files
author
lawwong
committed
Now UnityXRModule manage connected device without reseting device connection state
1 parent 577c279 commit 0de89dd

1 file changed

Lines changed: 29 additions & 5 deletions

File tree

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

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,16 @@ private struct XRInputSubsystemProfile
8888
new WaveTrackerSubmodule()
8989
);
9090

91+
private bool[] prevDeviceConnected = new bool[VRModule.MAX_DEVICE_COUNT];
92+
private bool[] currDeviceConnected = new bool[VRModule.MAX_DEVICE_COUNT];
93+
private void FlushDeviceConnectedState()
94+
{
95+
var temp = prevDeviceConnected;
96+
prevDeviceConnected = currDeviceConnected;
97+
currDeviceConnected = temp;
98+
Array.Clear(currDeviceConnected, 0, (int)VRModule.MAX_DEVICE_COUNT);
99+
}
100+
91101
protected VRModuleKnownXRLoader KnownActiveLoader { get { return knownActiveLoader; } }
92102
protected VRModuleKnownXRInputSubsystem KnownActiveInputSubsystem { get { return knownActiveInputSubsystem; } }
93103

@@ -219,26 +229,40 @@ public sealed override void BeforeRenderUpdate()
219229
currState.angularVelocity = GetDeviceFeatureValueOrDefault(device, CommonUsages.deviceAngularVelocity);
220230
}
221231

232+
currDeviceConnected[deviceIndex] = true;
233+
222234
// TODO: update hand skeleton pose
223235
}
224236

225237
// unmap index for disconnected device state
226-
deviceIndex = 0u;
227-
for (var len = GetDeviceStateLength(); deviceIndex < len; ++deviceIndex)
238+
for (uint i = 0u, imax = VRModule.MAX_DEVICE_COUNT; i < imax; ++i)
228239
{
229-
if (indexMap.IsMapped(deviceIndex))
240+
if (prevDeviceConnected[i] && !currDeviceConnected[i])
230241
{
231-
EnsureValidDeviceState(deviceIndex, out prevState, out currState);
232-
if (prevState.isConnected && !currState.isConnected)
242+
if (indexMap.IsMapped(deviceIndex))
233243
{
234244
indexMap.UnmapByIndex(deviceIndex);
245+
}
246+
else
247+
{
248+
Debug.LogWarning("[UnityXRModule] Disconnected device[" + deviceIndex + "] already unmapped");
249+
}
250+
251+
if (TryGetValidDeviceState(deviceIndex, out prevState, out currState) && currState.isConnected)
252+
{
235253
currState.Reset();
236254
if (uxrRightIndex == deviceIndex) { uxrRightIndex = INVALID_DEVICE_INDEX; }
237255
if (uxrLeftIndex == deviceIndex) { uxrLeftIndex = INVALID_DEVICE_INDEX; }
238256
}
257+
else
258+
{
259+
Debug.LogWarning("[UnityXRModule] Disconnected device[" + deviceIndex + "] already been reset");
260+
}
239261
}
240262
}
241263

264+
FlushDeviceConnectedState();
265+
242266
submodules.UpdateModulesDeviceConnectionAndPoses();
243267

244268
// process hand role

0 commit comments

Comments
 (0)