Exemplo n.º 1
0
        private static void AddDeviceTreeItem(InputControlLayout layout, TreeViewItem parent)
        {
            // Ignore devices that have no controls. We're looking at fully merged layouts here so
            // we're also taking inherited controls into account.
            if (layout.controls.Count == 0)
            {
                return;
            }

            var deviceItem = new DeviceTreeViewItem(layout)
            {
                depth = parent.depth + 1
            };

            AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null);

            parent.AddChild(deviceItem);

            foreach (var commonUsage in layout.commonUsages)
            {
                var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage)
                {
                    depth = parent.depth + 1
                };
                parent.AddChild(commonUsageGroup);
                AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage);
            }
        }
Exemplo n.º 2
0
        private void AddDeviceTreeItem(InputControlLayout layout, AdvancedDropdownItem parent)
        {
            // Ignore devices that have no controls. We're looking at fully merged layouts here so
            // we're also taking inherited controls into account.
            if (layout.controls.Count == 0)
            {
                return;
            }

            var deviceItem = new DeviceTreeViewItem(layout);

            AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null);

            if (deviceItem.children.Any())
            {
                parent.AddChild(deviceItem);
            }

            foreach (var commonUsage in layout.commonUsages)
            {
                var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage);
                AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage);
                if (commonUsageGroup.children.Any())
                {
                    parent.AddChild(commonUsageGroup);
                }
            }
        }
        private AdvancedDropdownItem BuildTreeForSpecificDevices()
        {
            var mainGroup = new AdvancedDropdownItem("Specific Devices");

            foreach (var layout in EditorInputControlLayoutCache.allProductLayouts.OrderBy(a => a.name))
            {
                var rootLayoutName = InputControlLayout.s_Layouts.GetRootLayoutName(layout.name).ToString();
                if (string.IsNullOrEmpty(rootLayoutName))
                {
                    rootLayoutName = "Other";
                }
                else
                {
                    rootLayoutName = rootLayoutName.GetPlural();
                }

                var rootLayoutGroup = mainGroup.children.Any()
                    ? mainGroup.children.FirstOrDefault(x => x.name == rootLayoutName)
                    : null;
                if (rootLayoutGroup == null)
                {
                    rootLayoutGroup = new DeviceTreeViewItem(layout)
                    {
                        name = rootLayoutName,
                        id   = rootLayoutName.GetHashCode(),
                    };
                }

                AddDeviceTreeItem(layout, rootLayoutGroup);

                if (rootLayoutGroup.children.Any() && !mainGroup.children.Contains(rootLayoutGroup))
                {
                    mainGroup.AddChild(rootLayoutGroup);
                }
            }
            return(mainGroup);
        }
        private void AddDeviceTreeItem(InputControlLayout layout, AdvancedDropdownItem parent)
        {
            // Ignore devices that have no controls. We're looking at fully merged layouts here so
            // we're also taking inherited controls into account.
            // EXCEPTION: We're okay with empty devices if we're picking devices and not controls.
            if (layout.controls.Count == 0 && m_Mode != Mode.PickDevice)
            {
                return;
            }

            var deviceItem = new DeviceTreeViewItem(layout);

            // If we have a device filter, see if we should ignore the device.
            if (m_DeviceFilter != null)
            {
                var matchesAnyInDeviceFilter = false;
                foreach (var entry in m_DeviceFilter)
                {
                    if (entry == layout.name ||
                        InputControlLayout.s_Layouts.IsBasedOn(new InternedString(entry), layout.name))
                    {
                        matchesAnyInDeviceFilter = true;
                    }
                    else
                    {
                        ////FIXME: this also needs to work for full control paths and not just stuff like "<Gamepad>"
                        var expectedLayout = InputControlPath.TryGetDeviceLayout(entry);
                        if (!string.IsNullOrEmpty(expectedLayout) &&
                            (expectedLayout == layout.name ||
                             InputControlLayout.s_Layouts.IsBasedOn(new InternedString(expectedLayout), layout.name)))
                        {
                            matchesAnyInDeviceFilter = true;
                        }
                    }
                }

                if (!matchesAnyInDeviceFilter)
                {
                    return;
                }
            }

            if (m_Mode != Mode.PickDevice)
            {
                AddControlTreeItemsRecursive(layout, deviceItem, "", layout.name, null);
            }

            if (deviceItem.children.Any() || m_Mode == Mode.PickDevice)
            {
                parent.AddChild(deviceItem);
            }

            if (m_Mode != Mode.PickDevice)
            {
                foreach (var commonUsage in layout.commonUsages)
                {
                    var commonUsageGroup = new DeviceTreeViewItem(layout, commonUsage);
                    AddControlTreeItemsRecursive(layout, commonUsageGroup, "", layout.name, commonUsage);
                    if (commonUsageGroup.children.Any())
                    {
                        parent.AddChild(commonUsageGroup);
                    }
                }
            }
        }