示例#1
0
    string GetSourceString(InputControlDescriptor source)
    {
        ControlScheme scheme     = m_ActionMapEditCopy.controlSchemes[selectedScheme];
        var           deviceSlot = scheme.GetDeviceSlot(source.deviceKey);

        return(string.Format("{0} {1} {2}", InputDeviceUtility.GetDeviceNameWithTag(deviceSlot), GetDeviceInstanceString(scheme, deviceSlot), InputDeviceUtility.GetDeviceControlName(deviceSlot, source)));
    }
 void DisplaySource(InputControlDescriptor descriptor)
 {
     if (descriptor == descriptorToBeAssigned)
     {
         GUILayout.Button("...", GUILayout.Width(k_BindingWidth));
     }
     else if (GUILayout.Button(InputDeviceUtility.GetDeviceControlName(descriptor), GUILayout.Width(k_BindingWidth)))
     {
         descriptorToBeAssigned = descriptor;
         InputSystem.ListenForBinding(BindInputControl);
     }
 }
示例#3
0
    void DrawSourceSummary(Rect rect, string label, InputControlDescriptor source)
    {
        if (m_SelectedSource == source)
        {
            GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
        }

        rect       = EditorGUI.PrefixLabel(rect, new GUIContent(label));
        rect.width = (rect.width - 4) * 0.5f;

        int indentLevel = EditorGUI.indentLevel;

        EditorGUI.indentLevel = 0;

        var scheme      = m_ActionMapEditCopy.controlSchemes[selectedScheme];
        var deviceSlots = scheme.deviceSlots;

        string[] deviceNames = deviceSlots.Select(slot =>
        {
            if (slot.type == null)
            {
                return(string.Empty);
            }

            return(string.Format("{0} {1}", InputDeviceUtility.GetDeviceNameWithTag(slot), GetDeviceInstanceString(scheme, slot)));
        }).ToArray();

        EditorGUI.BeginChangeCheck();
        int deviceIndex = EditorGUI.Popup(rect, deviceSlots.FindIndex(slot =>
        {
            return(source != null && source.deviceKey != DeviceSlot.kInvalidKey && slot.key == source.deviceKey);
        }), deviceNames);

        if (EditorGUI.EndChangeCheck())
        {
            source.deviceKey = deviceSlots[deviceIndex].key;
        }

        rect.x += rect.width + 4;

        var deviceSlot = scheme.GetDeviceSlot(source.deviceKey);

        string[] controlNames = InputDeviceUtility.GetDeviceControlNames(deviceSlot != null ? deviceSlot.type : null);
        EditorGUI.BeginChangeCheck();
        int controlIndex = EditorGUI.Popup(rect, source.controlIndex, controlNames);

        if (EditorGUI.EndChangeCheck())
        {
            source.controlIndex = controlIndex;
        }

        EditorGUI.indentLevel = indentLevel;
    }
示例#4
0
    private Node?GetDeviceNode(InputDevice device)
    {
        var tags = InputDeviceUtility.GetDeviceTags(device.GetType());

        if (tags != null && device.tagIndex != -1)
        {
            var  tag = tags[device.tagIndex];
            Node node;
            if (m_TagToNode.TryGetValue(tag, out node))
            {
                return(node);
            }
        }

        return(null);
    }
示例#5
0
 void DrawButtonAxisSourceSummary(Rect rect, ButtonAxisSource source)
 {
     if ((Type)(source.negative.deviceType) == (Type)(source.positive.deviceType))
     {
         EditorGUI.LabelField(rect,
                              string.Format("{0} {1} & {2}",
                                            InputDeviceUtility.GetDeviceName(source.negative),
                                            InputDeviceUtility.GetDeviceControlName(source.negative),
                                            InputDeviceUtility.GetDeviceControlName(source.positive)
                                            )
                              );
     }
     else
     {
         EditorGUI.LabelField(rect, string.Format("{0} & {1}", GetSourceString(source.negative), GetSourceString(source.positive)));
     }
 }
示例#6
0
    void DrawButtonAxisSourceSummary(Rect rect, ButtonAxisSource source)
    {
        ControlScheme scheme             = m_ActionMapEditCopy.controlSchemes[selectedScheme];
        var           negativeDeviceSlot = scheme.GetDeviceSlot(source.negative.deviceKey);
        var           positiveDeviceSlot = scheme.GetDeviceSlot(source.positive.deviceKey);

        if ((Type)(negativeDeviceSlot.type) == (Type)(positiveDeviceSlot.type))
        {
            EditorGUI.LabelField(rect,
                                 string.Format("{0} {1} {2} & {3}",
                                               InputDeviceUtility.GetDeviceNameWithTag(negativeDeviceSlot),
                                               GetDeviceInstanceString(scheme, negativeDeviceSlot),
                                               InputDeviceUtility.GetDeviceControlName(negativeDeviceSlot, source.negative),
                                               InputDeviceUtility.GetDeviceControlName(positiveDeviceSlot, source.positive)
                                               )
                                 );
        }
        else
        {
            EditorGUI.LabelField(rect, string.Format("{0} & {1}", GetSourceString(source.negative), GetSourceString(source.positive)));
        }
    }
示例#7
0
    void DrawSourceSummary(Rect rect, string label, InputControlDescriptor source)
    {
        if (m_SelectedSource == source)
        {
            GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
        }

        rect       = EditorGUI.PrefixLabel(rect, new GUIContent(label));
        rect.width = (rect.width - 4) * 0.5f;

        int indentLevel = EditorGUI.indentLevel;

        EditorGUI.indentLevel = 0;

        List <Type> types = m_ActionMapEditCopy.controlSchemes[selectedScheme].deviceTypes.ToList();

        string[] deviceNames = types.Select(e => e == null ? string.Empty : e.Name).ToArray();
        EditorGUI.BeginChangeCheck();
        int deviceIndex = EditorGUI.Popup(rect, types.IndexOf(source.deviceType), deviceNames);

        if (EditorGUI.EndChangeCheck())
        {
            source.deviceType = types[deviceIndex];
        }

        rect.x += rect.width + 4;

        string[] controlNames = InputDeviceUtility.GetDeviceControlNames(source.deviceType);
        EditorGUI.BeginChangeCheck();
        int controlIndex = EditorGUI.Popup(rect, source.controlIndex, controlNames);

        if (EditorGUI.EndChangeCheck())
        {
            source.controlIndex = controlIndex;
        }

        EditorGUI.indentLevel = indentLevel;
    }
示例#8
0
        public Node GetDeviceNode(InputDevice device)
        {
            string[] tags;

            var deviceType = device.GetType();

            if (!m_DeviceTypeTags.TryGetValue(deviceType, out tags))
            {
                tags = InputDeviceUtility.GetDeviceTags(deviceType);
                m_DeviceTypeTags[deviceType] = tags;
            }

            if (tags != null && device.tagIndex != -1)
            {
                var  tag = tags[device.tagIndex];
                Node node;
                if (m_TagToNode.TryGetValue(tag, out node))
                {
                    return(node);
                }
            }

            return(Node.None);
        }
示例#9
0
    void DrawControlSchemeGUI()
    {
        ControlScheme scheme = m_ActionMapEditCopy.controlSchemes[selectedScheme];

        EditorGUI.BeginChangeCheck();
        string schemeName = EditorGUILayout.TextField("Control Scheme Name", scheme.name);

        if (EditorGUI.EndChangeCheck())
        {
            scheme.name = schemeName;
        }

        for (int i = 0; i < scheme.deviceSlots.Count; i++)
        {
            var deviceSlot = scheme.deviceSlots[i];

            Rect rect = EditorGUILayout.GetControlRect();
            if (Event.current.type == EventType.MouseDown && rect.Contains(Event.current.mousePosition))
            {
                m_SelectedDeviceIndex = i;
                Repaint();
            }
            if (m_SelectedDeviceIndex == i)
            {
                GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
            }

            string[] tagNames   = null;
            Vector2  tagMaxSize = Vector2.zero;
            if (deviceSlot.type != null && deviceSlot.type.value != null)
            {
                tagNames = InputDeviceUtility.GetDeviceTags(deviceSlot.type.value);
                if (tagNames != null)
                {
                    GUIContent content = new GUIContent();
                    for (var j = 0; j < tagNames.Length; j++)
                    {
                        content.text = tagNames[j];
                        Vector2 size = EditorStyles.popup.CalcSize(content);
                        tagMaxSize = Vector2.Max(size, tagMaxSize);
                    }
                }
            }

            rect.width -= tagMaxSize.x; // Adjust width to leave room for tag
            EditorGUI.BeginChangeCheck();
            Type t = TypeGUI.TypeField(rect, new GUIContent("Device Type"), typeof(InputDevice), deviceSlot.type);
            if (EditorGUI.EndChangeCheck())
            {
                deviceSlot.type = t;
            }
            if (tagNames != null)
            {
                EditorGUI.BeginChangeCheck();
                // We want to have the ability to unset a tag after specifying one, so add an "Any" option
                var popupTags = new string[tagNames.Length + 1];
                popupTags[0] = "Any";
                tagNames.CopyTo(popupTags, 1);
                int tagIndex = deviceSlot.tagIndex + 1;
                rect.x    += rect.width;
                rect.width = tagMaxSize.x;
                tagIndex   = EditorGUI.Popup(
                    rect,
                    tagIndex,
                    popupTags);
                if (EditorGUI.EndChangeCheck())
                {
                    deviceSlot.tagIndex = tagIndex - 1;
                }
            }
        }

        // Device remove and add buttons
        EditorGUILayout.BeginHorizontal();
        {
            GUILayout.Space(15 * EditorGUI.indentLevel);

            if (GUILayout.Button(Styles.iconToolbarMinus, GUIStyle.none))
            {
                RemoveDevice();
            }

            if (GUILayout.Button(Styles.iconToolbarPlus, GUIStyle.none))
            {
                AddDevice();
            }

            GUILayout.FlexibleSpace();
        }
        EditorGUILayout.EndHorizontal();

        // Pad this area with spacing so all control schemes use same heights,
        // and the actions table below doesn't move when switching control scheme.
        int maxDevices = 0;

        for (int i = 0; i < m_ActionMapEditCopy.controlSchemes.Count; i++)
        {
            maxDevices = Mathf.Max(maxDevices, m_ActionMapEditCopy.controlSchemes[i].deviceSlots.Count);
        }
        int extraLines = maxDevices - scheme.deviceSlots.Count;

        EditorGUILayout.GetControlRect(true, extraLines * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing));
    }
示例#10
0
 string GetSourceString(InputControlDescriptor source)
 {
     return(string.Format("{0} {1}", InputDeviceUtility.GetDeviceName(source), InputDeviceUtility.GetDeviceControlName(source)));
 }
示例#11
0
    void DrawControlSchemeGUI()
    {
        ControlScheme scheme = m_ActionMapEditCopy.controlSchemes[selectedScheme];

        EditorGUI.BeginChangeCheck();
        string schemeName = EditorGUILayout.TextField("Control Scheme Name", scheme.name);

        if (EditorGUI.EndChangeCheck())
        {
            scheme.name = schemeName;
        }

        string[] deviceNames = InputDeviceUtility.GetDeviceNames();

        for (int i = 0; i < scheme.serializableDeviceTypes.Count; i++)
        {
            Rect rect = EditorGUILayout.GetControlRect();

            if (Event.current.type == EventType.MouseDown && rect.Contains(Event.current.mousePosition))
            {
                m_SelectedDeviceIndex = i;
                Repaint();
            }
            if (m_SelectedDeviceIndex == i)
            {
                GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
            }

            EditorGUI.BeginChangeCheck();
            int deviceIndex = EditorGUI.Popup(
                rect,
                "Device Type",
                InputDeviceUtility.GetDeviceIndex(scheme.serializableDeviceTypes[i]),
                deviceNames);
            if (EditorGUI.EndChangeCheck())
            {
                scheme.serializableDeviceTypes[i].value = InputDeviceUtility.GetDeviceType(deviceIndex);
            }
        }

        // Device remove and add buttons
        EditorGUILayout.BeginHorizontal();
        {
            GUILayout.Space(15 * EditorGUI.indentLevel);

            if (GUILayout.Button(Styles.iconToolbarMinus, GUIStyle.none))
            {
                RemoveDevice();
            }

            if (GUILayout.Button(Styles.iconToolbarPlus, GUIStyle.none))
            {
                AddDevice();
            }

            GUILayout.FlexibleSpace();
        }
        EditorGUILayout.EndHorizontal();

        // Pad this area with spacing so all control schemes use same heights,
        // and the actions table below doesn't move when switching control scheme.
        int maxDevices = 0;

        for (int i = 0; i < m_ActionMapEditCopy.controlSchemes.Count; i++)
        {
            maxDevices = Mathf.Max(maxDevices, m_ActionMapEditCopy.controlSchemes[i].serializableDeviceTypes.Count);
        }
        int extraLines = maxDevices - scheme.serializableDeviceTypes.Count;

        EditorGUILayout.GetControlRect(true, extraLines * (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing));
    }
示例#12
0
        public List <DomainEntry> GetControlEntriesOfType(int domainId, Type controlType)
        {
            DeviceSlot slot = m_TrackedPoseDriver.deviceSlot;

            return(InputDeviceUtility.GetDeviceControlEntriesOfType(slot == null ? null : slot.type, typeof(PoseControl)));
        }