private void ShowInputControlPicker(Rect rect, SerializedProperty pathProperty, AdvancedDropdownState pickerState, Action <SerializedProperty> onPickCallback) { if (m_InputControlPickerDropdown == null) { m_InputControlPickerDropdown = new InputControlPickerDropdown(pickerState, pathProperty, onPickCallback); } if (m_Toolbar != null) { if (m_Toolbar.selectedDevice != null) { m_InputControlPickerDropdown.SetDeviceFilter(new[] { m_Toolbar.selectedDevice }); } else { m_InputControlPickerDropdown.SetDeviceFilter(m_Toolbar.allDevices); } if (m_ExpectedControlLayout != null) { m_InputControlPickerDropdown.SetExpectedControlLayoutFilter(m_ExpectedControlLayout); } } m_InputControlPickerDropdown.Show(rect); }
private void ShowInputControlPicker(Rect rect, SerializedProperty pathProperty, InputControlPickerState pickerState, Action onPickCallback) { if (m_InputControlPickerDropdown == null) { m_InputControlPickerDropdown = new InputControlPickerDropdown(pickerState.state, path => { pathProperty.stringValue = path; onPickCallback(); }); } var haveDeviceFilterFromControlScheme = false; if (m_Toolbar != null) { if (m_Toolbar.selectedDevice != null) { // Single device selected from set of devices in control scheme. m_InputControlPickerDropdown.SetDeviceFilter(new[] { m_Toolbar.selectedDevice }); haveDeviceFilterFromControlScheme = true; } else { var allDevices = m_Toolbar.allDevices; if (allDevices.Length > 0) { // Filter by all devices in current control scheme. m_InputControlPickerDropdown.SetDeviceFilter(allDevices); haveDeviceFilterFromControlScheme = true; } } if (m_ExpectedControlLayout != null) { m_InputControlPickerDropdown.SetExpectedControlLayoutFilter(m_ExpectedControlLayout); } } // If there's no device filter coming from a control scheme, filter by supported // devices as given by settings . if (!haveDeviceFilterFromControlScheme) { m_InputControlPickerDropdown.SetDeviceFilter(InputSystem.settings.supportedDevices.ToArray()); } m_InputControlPickerDropdown.Show(rect); }
private void ShowInputControlPicker(Rect rect) { if (m_InputControlPickerDropdown == null) { m_InputControlPickerDropdown = new InputControlPickerDropdown(m_PickerState.state, path => { m_PathProperty.stringValue = path; m_OnModified(); }); } if (m_DeviceFilter != null) { m_InputControlPickerDropdown.SetDeviceFilter(m_DeviceFilter); if (!string.IsNullOrEmpty(m_ExpectedControlLayoutFilter)) { m_InputControlPickerDropdown.SetExpectedControlLayoutFilter(m_ExpectedControlLayoutFilter); } } m_InputControlPickerDropdown.Show(rect); }
/// <summary> /// Grab <see cref="InputSystem.settings"/> and set it up for editing. /// </summary> private void InitializeWithCurrentSettings() { // Find the set of available assets in the project. m_AvailableInputSettingsAssets = FindInputSettingsInProject(); // See which is the active one. m_Settings = InputSystem.settings; var currentSettingsPath = AssetDatabase.GetAssetPath(m_Settings); if (string.IsNullOrEmpty(currentSettingsPath)) { // The current settings aren't coming from an asset. These won't be editable // in the UI but we still have to show something. m_CurrentSelectedInputSettingsAsset = ArrayHelpers.Append(ref m_AvailableInputSettingsAssets, "<No Asset>"); EditorBuildSettings.RemoveConfigObject(kEditorBuildSettingsConfigKey); } else { m_CurrentSelectedInputSettingsAsset = ArrayHelpers.IndexOf(m_AvailableInputSettingsAssets, currentSettingsPath); if (m_CurrentSelectedInputSettingsAsset == -1) { // This is odd and shouldn't happen. Solve by just adding the path to the list. m_CurrentSelectedInputSettingsAsset = ArrayHelpers.Append(ref m_AvailableInputSettingsAssets, currentSettingsPath); } ////REVIEW: should we store this by platform? EditorBuildSettings.AddConfigObject(kEditorBuildSettingsConfigKey, m_Settings, true); } // Refresh the list of assets we display in the UI. m_AvailableSettingsAssetsOptions = new GUIContent[m_AvailableInputSettingsAssets.Length]; for (var i = 0; i < m_AvailableInputSettingsAssets.Length; ++i) { var name = m_AvailableInputSettingsAssets[i]; if (name.StartsWith("Assets/")) { name = name.Substring("Assets/".Length); } if (name.EndsWith(".asset")) { name = name.Substring(0, name.Length - ".asset".Length); } if (name.EndsWith(".inputsettings")) { name = name.Substring(0, name.Length - ".inputsettings".Length); } m_AvailableSettingsAssetsOptions[i] = new GUIContent(name); } // Look up properties. m_SettingsObject = new SerializedObject(m_Settings); m_UpdateMode = m_SettingsObject.FindProperty("m_UpdateMode"); m_ActionUpdateMode = m_SettingsObject.FindProperty("m_ActionUpdateMode"); m_TimesliceEvents = m_SettingsObject.FindProperty("m_TimesliceEvents"); m_RunInBackground = m_SettingsObject.FindProperty("m_RunInBackground"); m_CompensateForScreenOrientation = m_SettingsObject.FindProperty("m_CompensateForScreenOrientation"); m_FilterNoiseOnCurrent = m_SettingsObject.FindProperty("m_FilterNoiseOnCurrent"); m_DefaultDeadzoneMin = m_SettingsObject.FindProperty("m_DefaultDeadzoneMin"); m_DefaultDeadzoneMax = m_SettingsObject.FindProperty("m_DefaultDeadzoneMax"); m_DefaultButtonPressPoint = m_SettingsObject.FindProperty("m_DefaultButtonPressPoint"); m_DefaultTapTime = m_SettingsObject.FindProperty("m_DefaultTapTime"); m_DefaultSlowTapTime = m_SettingsObject.FindProperty("m_DefaultSlowTapTime"); m_DefaultHoldTime = m_SettingsObject.FindProperty("m_DefaultHoldTime"); // Initialize ReorderableList for list of supported devices. var supportedDevicesProperty = m_SettingsObject.FindProperty("m_SupportedDevices"); m_SupportedDevices = new ReorderableList(m_SettingsObject, supportedDevicesProperty) { drawHeaderCallback = rect => { EditorGUI.LabelField(rect, m_SupportedDevicesText); }, onChangedCallback = list => { Apply(); }, onAddDropdownCallback = (rect, list) => { var state = new AdvancedDropdownState(); var dropdown = new InputControlPickerDropdown(state, path => { var layoutName = InputControlPath.TryGetDeviceLayout(path) ?? path; var numDevices = supportedDevicesProperty.arraySize; supportedDevicesProperty.InsertArrayElementAtIndex(numDevices); supportedDevicesProperty.GetArrayElementAtIndex(numDevices) .stringValue = layoutName; Apply(); }, InputControlPickerDropdown.Mode.PickDevice); dropdown.Show(rect); }, drawElementCallback = (rect, index, isActive, isFocused) => { var layoutName = m_Settings.supportedDevices[index]; var icon = EditorInputControlLayoutCache.GetIconForLayout(layoutName); if (icon != null) { var iconRect = rect; iconRect.width = 20; rect.x += 20; rect.width -= 20; GUI.Label(iconRect, icon); } EditorGUI.LabelField(rect, m_Settings.supportedDevices[index]); } }; }