/// <summary> /// Constructor /// </summary> /// <param name="deviceNode">Device from which take the input</param> internal InputDeviceWrapper(XRNode deviceNode) { m_inputDevice = InputDevices.GetDeviceAtXRNode(deviceNode); this.m_deviceNode = deviceNode; this.m_isSteamVR = m_inputDevice.subsystem != null && m_inputDevice.subsystem.SubsystemDescriptor.id == "OpenVR Input"; }
TreeViewItem BuildInputDevicesTree() { int id = 0; var rootItem = new Item { id = id++, displayName = "Devices", depth = 0 }; // Build children. var inputDevices = new List <InputDevice>(); InputDevices.GetDevices(inputDevices); var deviceChildren = new List <TreeViewItem>(); // Add device children foreach (var device in inputDevices) { var deviceItem = new Item { id = device.GetHashCode(), displayName = device.name, // TODO: need to display new characteristics API here. #pragma warning disable 612, 618 deviceRole = device.role.ToString(), #pragma warning restore 612, 618 depth = 1 }; deviceItem.parent = rootItem; List <InputFeatureUsage> featureUsages = new List <InputFeatureUsage>(); device.TryGetFeatureUsages(featureUsages); var featureChildren = new List <TreeViewItem>(); foreach (var featureUsage in featureUsages) { Type featureType = featureUsage.type; var featureItem = new Item { id = device.GetHashCode() ^ (featureUsage.GetHashCode() >> 1), displayName = featureUsage.name, featureType = featureType.ToString(), featureValue = GetFeatureValue(device, featureUsage), depth = 2 }; featureItem.parent = deviceItem; featureChildren.Add(featureItem); } deviceItem.children = featureChildren; deviceChildren.Add(deviceItem); } // Sort deviceChildren by name. deviceChildren.Sort((a, b) => string.Compare(a.displayName, b.displayName)); rootItem.children = deviceChildren; return(rootItem); }