You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
126 lines
3.7 KiB
126 lines
3.7 KiB
3 years ago
|
//========= Copyright 2016-2018, HTC Corporation. All rights reserved. ===========
|
||
|
|
||
|
using HTC.UnityPlugin.VRModuleManagement;
|
||
|
using System;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace HTC.UnityPlugin.Vive
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Defines roles for those devices that have tracking data
|
||
|
/// </summary>
|
||
|
[ViveRoleEnum((int)DeviceRole.Invalid)]
|
||
|
public enum DeviceRole
|
||
|
{
|
||
|
Invalid = -2,
|
||
|
Hmd,
|
||
|
Device1,
|
||
|
Device2,
|
||
|
Device3,
|
||
|
Device4,
|
||
|
Device5,
|
||
|
Device6,
|
||
|
Device7,
|
||
|
Device8,
|
||
|
Device9,
|
||
|
Device10,
|
||
|
Device11,
|
||
|
Device12,
|
||
|
Device13,
|
||
|
Device14,
|
||
|
Device15,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.RightHand instead")]
|
||
|
RightHand = Device1,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.LeftHand instead")]
|
||
|
LeftHand,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller3 instead")]
|
||
|
Controller3,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller4 instead")]
|
||
|
Controller4,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller5 instead")]
|
||
|
Controller5,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller6 instead")]
|
||
|
Controller6,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller7 instead")]
|
||
|
Controller7,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller8 instead")]
|
||
|
Controller8,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller9 instead")]
|
||
|
Controller9,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller10 instead")]
|
||
|
Controller10,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller11 instead")]
|
||
|
Controller11,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller12 instead")]
|
||
|
Controller12,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller13 instead")]
|
||
|
Controller13,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller14 instead")]
|
||
|
Controller14,
|
||
|
[HideInInspector]
|
||
|
[Obsolete("Use HandRole.Controller15 instead")]
|
||
|
Controller15,
|
||
|
}
|
||
|
|
||
|
public class DeviceRoleHandler : ViveRole.MapHandler<DeviceRole>
|
||
|
{
|
||
|
public override bool BlockBindings { get { return true; } }
|
||
|
|
||
|
public override void OnAssignedAsCurrentMapHandler() { Refresh(); }
|
||
|
|
||
|
public override void OnConnectedDeviceChanged(uint deviceIndex, VRModuleDeviceClass deviceClass, string deviceSN, bool connected)
|
||
|
{
|
||
|
if (connected)
|
||
|
{
|
||
|
if (RoleMap.IsDeviceBound(deviceSN)) { return; }
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
Refresh();
|
||
|
}
|
||
|
|
||
|
public override void OnBindingChanged(string deviceSN, bool previousIsBound, DeviceRole previousRole, bool currentIsBound, DeviceRole currentRole)
|
||
|
{
|
||
|
uint deviceIndex;
|
||
|
if (!VRModule.TryGetConnectedDeviceIndex(deviceSN, out deviceIndex)) { return; }
|
||
|
|
||
|
Refresh();
|
||
|
}
|
||
|
|
||
|
public void Refresh()
|
||
|
{
|
||
|
var deviceIndex = 0u;
|
||
|
for (var role = RoleInfo.MinValidRole; role <= RoleInfo.MaxValidRole && deviceIndex < VRModule.MAX_DEVICE_COUNT; ++role, ++deviceIndex)
|
||
|
{
|
||
|
if (!RoleInfo.IsValidRole(role)) { continue; }
|
||
|
|
||
|
if (VRModule.GetCurrentDeviceState(deviceIndex).isConnected)
|
||
|
{
|
||
|
MappingRoleIfUnbound(role, deviceIndex);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
UnmappingRole(role);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|