/// <summary> /// Get PadSetting from currently selected device. /// </summary> /// <param name="padIndex">Source pad index.</param> public PadSetting GetCurrentPadSetting(MapTo padIndex) { // Get settings related to PAD. var maps = SettingsMap.Where(x => x.MapTo == padIndex).ToArray(); PropertyInfo[] properties; if (!ValidatePropertyNames(maps, out properties)) { return(null); } var ps = new PadSetting(); foreach (var p in properties) { var map = maps.First(x => x.PropertyName == p.Name); var key = map.IniPath.Split('\\')[1]; // Get setting value from the form. var v = GetSettingValue(map.Control); // If value is default then... if (v == map.DefaultValue) { // Remove default value. v = null; } // Set value onto padSetting. p.SetValue(ps, v ?? "", null); } ps.PadSettingChecksum = ps.CleanAndGetCheckSum(); return(ps); }
private void MainDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { lock (selectionLock) { var grid = (DataGrid)sender; var setting = grid.SelectedItems.Cast <UserSetting>().FirstOrDefault(); _CurrentUserSetting = setting; // Get device attached to user setting. _CurrentUserDevice = setting == null ? new UserDevice() : SettingsManager.GetDevice(setting.InstanceGuid); // Get mappings attached to user setting. _CurrentPadSetting = setting == null ? new PadSetting() : SettingsManager.GetPadSetting(setting.PadSettingChecksum); DPadPanel.SetBinding(_CurrentPadSetting); PadListPanel.SetBinding(MappedTo, _CurrentUserSetting); GeneralPanel.SetBinding(MappedTo, _CurrentPadSetting); AdvancedPanel.SetBinding(_CurrentPadSetting); LeftTriggerPanel.SetBinding(_CurrentPadSetting); RightTriggerPanel.SetBinding(_CurrentPadSetting); LeftThumbXPanel.SetBinding(_CurrentPadSetting); LeftThumbYPanel.SetBinding(_CurrentPadSetting); RightThumbXPanel.SetBinding(_CurrentPadSetting); RightThumbYPanel.SetBinding(_CurrentPadSetting); ForceFeedbackPanel.SetBinding(MappedTo, _CurrentPadSetting); ForceFeedbackPanel.LeftForceFeedbackMotorPanel.SetBinding(_CurrentPadSetting, 0); ForceFeedbackPanel.RightForceFeedbackMotorPanel.SetBinding(_CurrentPadSetting, 1); PadFootPanel.SetBinding(MappedTo, _CurrentUserDevice, _CurrentPadSetting); SettingsManager.Current.LoadPadSettingsIntoSelectedDevice(MappedTo, _CurrentPadSetting); OnSettingChanged?.Invoke(this, new EventArgs <UserSetting>(setting)); } }
/// <summary> /// Get PadSetting from currently selected device. /// </summary> public PadSetting CloneCurrentPadSetting() { // Get settings related to PAD. var maps = SettingsManager.Current.SettingsMap.Where(x => x.MapTo == MappedTo).ToArray(); PropertyInfo[] properties; if (!SettingsManager.ValidatePropertyNames(maps, out properties)) { return(null); } var ps = new PadSetting(); foreach (var p in properties) { var map = maps.FirstOrDefault(x => x.PropertyName == p.Name); if (map == null) { continue; } // Get setting value from the form. var v = SettingsManager.Current.GetSettingValue(map.Control); // Set value onto padSetting. p.SetValue(ps, v ?? "", null); } ps.PadSettingChecksum = ps.CleanAndGetCheckSum(); return(ps); }
public void SyncFormFromPadSetting(MapTo padIndex, PadSetting ps) { // Get setting maps for specified PAD Control. var maps = SettingsMap.Where(x => x.MapTo == padIndex).ToArray(); PropertyInfo[] properties; if (!ValidatePropertyNames(maps, out properties)) { return; } // Suspend form events (do not track setting changes on the form). SuspendEvents(); foreach (var p in properties) { var map = maps.First(x => x.PropertyName == p.Name); var key = map.IniPath.Split('\\')[1]; var v = (string)p.GetValue(ps, null) ?? ""; // If value is not set then... if (string.IsNullOrEmpty(v)) { // Restore default value. v = map.DefaultValue ?? ""; } LoadSetting(map.Control, key, v); } // Resume form events (track setting changes on the form). ResumeEvents(); }
/// <summary> /// Load PAD settings to form. /// </summary> /// <param name="padSetting">Settings to read.</param> /// <param name="padIndex">Destination pad index.</param> public void LoadPadSettingsIntoSelectedDevice(MapTo padIndex, PadSetting ps) { // Get pad control with settings. var padControl = MainForm.Current.PadControls[(int)padIndex - 1]; // Get selected setting. var setting = padControl.GetSelectedSetting(); // Return if nothing selected. if (setting == null) { return; } // If setting not supplied then use empty (clear settings). if (ps == null) { ps = new PadSetting(); } LoadPadSettingAndCleanup(setting, ps); SyncFormFromPadSetting(padIndex, ps); RaiseSettingsChanged(null); loadCount++; var ev = ConfigLoaded; if (ev != null) { ev(this, new SettingEventArgs(typeof(PadSetting).Name, loadCount)); } }
public void SetBinding(PadSetting ps, int motor) { // Unbind first. SettingsManager.UnLoadMonitor(DirectionComboBox); SettingsManager.UnLoadMonitor(StrengthUpDown); SettingsManager.UnLoadMonitor(PeriodUpDown); if (ps == null) { return; } switch (motor) { case 0: MainGroupBox.Header = "Left Motor(Big, Strong, Low-Frequency)"; break; case 1: MainGroupBox.Header = "Right Motor (Small, Gentle, High-Frequency)"; break; default: break; } var converter = new Converters.PadSettingToIntegerConverter(); var enumConverter = new Converters.PaddSettingToEnumConverter <ForceEffectDirection>(); // Set binding. SettingsManager.LoadAndMonitor(ps, nameof(ps.LeftMotorDirection), DirectionComboBox, null, enumConverter); SettingsManager.LoadAndMonitor(ps, nameof(ps.LeftMotorStrength), StrengthUpDown, null, converter); SettingsManager.LoadAndMonitor(ps, nameof(ps.LeftMotorPeriod), PeriodUpDown, null, converter); }
/// <summary> /// Read PAD settings from INI file. /// </summary> /// <param name="padSectionName">INI section.</param> /// <param name="s">Settings.</param> /// <param name="p">PAD Settings.</param> /// <remarks>use 'ref' to indicate that objects will be updated inside.</remarks> void ReadWritePadSettings(string padSectionName, ref Setting s, ref PadSetting p, bool write) { s = new Setting(); p = new PadSetting(); // Get PAD1 settings data as a reference. var items = SettingsMap.Where(x => x.MapTo == MapTo.Controller1).ToArray(); var sProps = s.GetType().GetProperties(); var pProps = p.GetType().GetProperties(); var ini2 = new Ini(IniFileName); foreach (var item in items) { string key = item.IniPath.Split('\\')[1]; // Try to find property inside Settings object. var sProp = sProps.FirstOrDefault(x => x.Name == item.PropertyName); if (sProp != null) { if (write) { var sv = (string)sProp.GetValue(s, null) ?? ""; // Write value to INI file. ini2.SetValue(padSectionName, key, sv); } else { // Read value from INI file. var sv = ini2.GetValue(padSectionName, key) ?? ""; sProp.SetValue(s, sv, null); } continue; } // Try to find property inside PAD Settings object. var pProp = pProps.FirstOrDefault(x => x.Name == item.PropertyName); if (pProp != null) { if (write) { var pv = (string)pProp.GetValue(p, null) ?? ""; // Write value to INI file. ini2.SetValue(padSectionName, key, pv); } else { // Read value from INI file. var pv = ini2.GetValue(padSectionName, key) ?? ""; sProp.SetValue(s, pv, null); } continue; } // Property was not found. var message = string.Format("ReadWritePadSettings: Property '{0}' was not found", item.PropertyName); // Inform developer with the message. MessageBoxForm.Show(message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public bool Changed(PadSetting ps) { return (old_ForceType != ps.ForceType || old_LeftPeriod != ps.LeftMotorPeriod || old_RightPeriod != ps.RightMotorPeriod || old_LeftStrength != ps.LeftMotorStrength || old_RightStrength != ps.RightMotorStrength || old_LeftDirection != ps.LeftMotorDirection || old_RightDirection != ps.RightMotorDirection || old_OveralStrength != ps.ForceOverall); }
public void SetBinding(MapTo mappedTo, UserDevice userDevice, PadSetting padSetting) { _MappedTo = mappedTo; _UserDevice = userDevice; _PadSetting = padSetting; var en = padSetting != null; ControlsHelper.SetEnabled(CopyButton, en); ControlsHelper.SetEnabled(PasteButton, en); ControlsHelper.SetEnabled(LoadButton, en); ControlsHelper.SetEnabled(AutoButton, en); ControlsHelper.SetEnabled(ClearButton, en); ControlsHelper.SetEnabled(ResetButton, en); }
public void LoadPadSettingAndCleanup(UserSetting setting, PadSetting ps, bool add = false) { // Link setting with pad setting. setting.PadSettingChecksum = ps.PadSettingChecksum; // Insert pad setting first, because it will be linked with the setting. UpsertPadSettings(ps); // Insert setting if not in the list. if (add) { UserSettings.Add(setting); } // Clean-up pad settings. Current.CleanupPadSettings(); }
private void ClearButton_Click(object sender, RoutedEventArgs e) { var description = Attributes.GetDescription(_MappedTo); var text = string.Format("Do you want to clear all {0} settings?", description); var form = new MessageBoxWindow(); var result = form.ShowDialog(text, "Clear Controller Settings", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result != MessageBoxResult.Yes) { return; } var ps = new PadSetting(); _PadSetting.Load(ps); }
public void SetBinding(PadSetting o) { // Unbind first. SettingsManager.UnLoadMonitor(EnabledCheckBox); SettingsManager.UnLoadMonitor(DeadZoneUpDown); SettingsManager.UnLoadMonitor(OffsetUpDown); if (o == null) { return; } // Set binding. var converter = new Converters.PaddSettingToIntegerConverter(); SettingsManager.LoadAndMonitor(o, nameof(o.AxisToDPadEnabled), EnabledCheckBox); SettingsManager.LoadAndMonitor(o, nameof(o.AxisToDPadDeadZone), DeadZoneUpDown, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.AxisToDPadOffset), OffsetUpDown, null, converter); }
public void SetBinding(PadSetting o) { // Unbind first. SettingsManager.UnLoadMonitor(DeviceSubTypeComboBox); SettingsManager.UnLoadMonitor(PassThroughCheckBox); //SettingsManager.UnLoadMonitor(ForceFeedbackPassThroughCheckBox); if (o == null) { return; } // Set binding. var converter = new Converters.PaddSettingToEnumConverter <DeviceSubType>(); SettingsManager.LoadAndMonitor(o, nameof(o.GamePadType), DeviceSubTypeComboBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.PassThrough), PassThroughCheckBox, null, null); //SettingsManager.LoadAndMonitor(o, nameof(o.ForcesPassThrough), ForceFeedbackPassThroughCheckBox, null, null); }
public void SetBinding(PadSetting ps) { // Unbind first. SettingsManager.UnLoadMonitor(DeviceSubTypeComboBox); SettingsManager.UnLoadMonitor(PassThroughCheckBox); //SettingsManager.UnLoadMonitor(ForceFeedbackPassThroughCheckBox); if (ps == null) { return; } // Set binding. var enumConverter = new Converters.PadSettingToEnumConverter <DeviceSubType>(); var boolConverter = new Converters.PadSettingToBoolConverter(); SettingsManager.LoadAndMonitor(ps, nameof(ps.GamePadType), DeviceSubTypeComboBox, null, enumConverter); SettingsManager.LoadAndMonitor(ps, nameof(ps.PassThrough), PassThroughCheckBox, null, boolConverter); }
public void SetBinding(PadSetting ps) { // Unbind first. SettingsManager.UnLoadMonitor(EnabledCheckBox); SettingsManager.UnLoadMonitor(DeadZoneUpDown); SettingsManager.UnLoadMonitor(OffsetUpDown); if (ps == null) { return; } // Set binding. var intConverter = new Converters.PadSettingToIntegerConverter(); var boolConverter = new Converters.PadSettingToBoolConverter(); SettingsManager.LoadAndMonitor(ps, nameof(ps.AxisToDPadEnabled), EnabledCheckBox, null, boolConverter); SettingsManager.LoadAndMonitor(ps, nameof(ps.AxisToDPadDeadZone), DeadZoneUpDown, null, intConverter); SettingsManager.LoadAndMonitor(ps, nameof(ps.AxisToDPadOffset), OffsetUpDown, null, intConverter); }
public string SaveSetting(UserSetting s, PadSetting ps) { var db = new x360ceModelContainer(); var checksum = ps.CleanAndGetCheckSum(); // Update checksum. ps.PadSettingChecksum = checksum; // Look for existing PadSetting. var pDB = db.PadSettings.FirstOrDefault(x => x.PadSettingChecksum == checksum); // If PadSetting doesn't exists then... if (pDB == null) { pDB = ps; pDB.EntityKey = null; db.PadSettings.AddObject(pDB); } // Look for existing setting. var sDB = db.UserSettings.FirstOrDefault(x => x.InstanceGuid == s.InstanceGuid && x.FileName == s.FileName && x.FileProductName == s.FileProductName); var n = DateTime.Now; if (sDB == null) { sDB = s; sDB.EntityKey = null; // Assign brand new ID. s.SettingId = Guid.NewGuid(); s.DateCreated = n; s.DateUpdated = n; s.DateSelected = n; // Link PadSetting with setting. s.PadSettingChecksum = pDB.PadSettingChecksum; db.UserSettings.AddObject(sDB); } db.SaveChanges(); db.Dispose(); db = null; return(""); }
public void SavePadSetting(UserSetting setting, PadSetting padSetting) { var ps = new PadSetting(); ps.Load(padSetting); // If setting doesn't exists then... if (!PadSettings.Items.Any(x => x.PadSettingChecksum == ps.PadSettingChecksum)) { // Add setting to configuration. lock (PadSettings.SyncRoot) PadSettings.Items.Add(ps); } // If pad setting checksum changed then... if (setting.PadSettingChecksum != ps.PadSettingChecksum) { // Assign updated checksum. setting.PadSettingChecksum = ps.PadSettingChecksum; var ud = GetDevice(setting.InstanceGuid); setting.Completion = UserSetting.GetCompletionPoints(ps, ud); } CleanupPadSettings(); }
/// <summary> /// Load PAD settings to form. /// </summary> /// <param name="padSetting">Settings to read.</param> /// <param name="padIndex">Destination pad index.</param> public void LoadPadSettingsIntoSelectedDevice(MapTo padIndex, PadSetting ps) { // Get pad control with settings. var padControl = Global._MainWindow.MainPanel.MainBodyPanel.PadControls[(int)padIndex - 1]; // Get selected setting. var setting = padControl.CurrentUserSetting; // Return if nothing selected. if (setting == null) { return; } // If setting not supplied then use empty (clear settings). if (ps == null) { ps = new PadSetting(); } LoadPadSettingAndCleanup(setting, ps); SyncFormFromPadSetting(padIndex, ps); RaiseSettingsChanged(null); loadCount++; ConfigLoaded?.Invoke(this, new SettingEventArgs(typeof(PadSetting).Name, loadCount)); }
private void OkButton_Click(object sender, EventArgs e) { Guid?checksum = null; if (MainTabControl.SelectedTab == PresetsTabPage) { var row = PresetsGridPanel.PresetsDataGridView.SelectedRows.Cast <DataGridViewRow>().FirstOrDefault(); if (row != null) { var preset = (Preset)row.DataBoundItem; checksum = preset.PadSettingChecksum; } } if (MainTabControl.SelectedTab == SummariesTabPage) { var row = SummariesGridPanel.SummariesDataGridView.SelectedRows.Cast <DataGridViewRow>().FirstOrDefault(); if (row != null) { var summary = (Summary)row.DataBoundItem; checksum = summary.PadSettingChecksum; } } if (MainTabControl.SelectedTab == SettingsTabPage) { var row = SettingsGridPanel.SettingsDataGridView.SelectedRows.Cast <DataGridViewRow>().FirstOrDefault(); if (row != null) { var setting = (Setting)row.DataBoundItem; checksum = setting.PadSettingChecksum; } } if (checksum.HasValue) { SelectedItem = SettingsManager.PadSettings.Items.FirstOrDefault(x => x.PadSettingChecksum == checksum.Value); } DialogResult = DialogResult.OK; }
public string SaveSetting(Setting s, PadSetting ps) { var checksum = ps.GetCheckSum(); var db = new x360ceModelContainer(); var s1 = db.Settings.FirstOrDefault(x => x.InstanceGuid == s.InstanceGuid && x.FileName == s.FileName && x.FileProductName == s.FileProductName); var n = DateTime.Now; if (s1 == null) { s1 = new Setting(); s1.SettingId = Guid.NewGuid(); s1.DateCreated = n; db.Settings.AddObject(s1); } s1.Comment = s.Comment; s1.DateUpdated = n; s1.DateSelected = n; s1.DeviceType = s.DeviceType; s1.FileName = s.FileName; s1.FileProductName = s.FileProductName; s1.InstanceGuid = s.InstanceGuid; s1.InstanceName = s.InstanceName; s1.ProductGuid = s.ProductGuid; s1.ProductName = s.ProductName; s1.IsEnabled = s.IsEnabled; s1.PadSettingChecksum = checksum; // Save Pad Settings. var p1 = db.PadSettings.FirstOrDefault(x => x.PadSettingChecksum == checksum); if (p1 == null) { p1 = new PadSetting(); p1.PadSettingChecksum = checksum; db.PadSettings.AddObject(p1); } p1.AxisToDPadDeadZone = ps.AxisToDPadDeadZone; p1.AxisToDPadEnabled = ps.AxisToDPadEnabled; p1.AxisToDPadOffset = ps.AxisToDPadOffset; p1.ButtonA = ps.ButtonA; p1.ButtonB = ps.ButtonB; p1.ButtonBig = string.IsNullOrEmpty(ps.ButtonBig) ? "" : ps.ButtonBig; p1.ButtonGuide = string.IsNullOrEmpty(ps.ButtonGuide) ? "" : ps.ButtonGuide; p1.ButtonBack = ps.ButtonBack; p1.ButtonStart = ps.ButtonStart; p1.ButtonX = ps.ButtonX; p1.ButtonY = ps.ButtonY; p1.DPad = ps.DPad; p1.DPadDown = ps.DPadDown; p1.DPadLeft = ps.DPadLeft; p1.DPadRight = ps.DPadRight; p1.DPadUp = ps.DPadUp; p1.ForceEnable = ps.ForceEnable; p1.ForceOverall = ps.ForceOverall; p1.ForceSwapMotor = ps.ForceSwapMotor; p1.ForceType = ps.ForceType; p1.GamePadType = ps.GamePadType; p1.LeftMotorPeriod = ps.LeftMotorPeriod; p1.LeftMotorStrength = string.IsNullOrEmpty(ps.LeftMotorStrength) ? "100" : ps.LeftMotorStrength; p1.LeftMotorDirection = string.IsNullOrEmpty(ps.LeftMotorDirection) ? "0" : ps.LeftMotorDirection; p1.LeftShoulder = ps.LeftShoulder; p1.LeftThumbAntiDeadZoneX = ps.LeftThumbAntiDeadZoneX; p1.LeftThumbAntiDeadZoneY = ps.LeftThumbAntiDeadZoneY; p1.LeftThumbAxisX = ps.LeftThumbAxisX; p1.LeftThumbAxisY = ps.LeftThumbAxisY; p1.LeftThumbButton = ps.LeftThumbButton; p1.LeftThumbDeadZoneX = ps.LeftThumbDeadZoneX; p1.LeftThumbDeadZoneY = ps.LeftThumbDeadZoneY; p1.LeftThumbLinearX = string.IsNullOrEmpty(ps.LeftThumbLinearX) ? "" : ps.LeftThumbLinearX; p1.LeftThumbLinearY = string.IsNullOrEmpty(ps.LeftThumbLinearY) ? "" : ps.LeftThumbLinearY; p1.LeftThumbDown = ps.LeftThumbDown; p1.LeftThumbLeft = ps.LeftThumbLeft; p1.LeftThumbRight = ps.LeftThumbRight; p1.LeftThumbUp = ps.LeftThumbUp; p1.LeftTrigger = ps.LeftTrigger; p1.LeftTriggerDeadZone = ps.LeftTriggerDeadZone; p1.PassThrough = ps.PassThrough; p1.RightMotorPeriod = ps.RightMotorPeriod; p1.RightMotorStrength = string.IsNullOrEmpty(ps.RightMotorStrength) ? "100" : ps.RightMotorStrength; p1.RightMotorDirection = string.IsNullOrEmpty(ps.RightMotorDirection) ? "0" : ps.RightMotorDirection; p1.RightShoulder = ps.RightShoulder; p1.RightThumbAntiDeadZoneX = ps.RightThumbAntiDeadZoneX; p1.RightThumbAntiDeadZoneY = ps.RightThumbAntiDeadZoneY; p1.RightThumbLinearX = string.IsNullOrEmpty(ps.RightThumbLinearX) ? "" : ps.RightThumbLinearX; p1.RightThumbLinearY = string.IsNullOrEmpty(ps.RightThumbLinearY) ? "" : ps.RightThumbLinearY; p1.RightThumbAxisX = ps.RightThumbAxisX; p1.RightThumbAxisY = ps.RightThumbAxisY; p1.RightThumbButton = ps.RightThumbButton; p1.RightThumbDeadZoneX = ps.RightThumbDeadZoneX; p1.RightThumbDeadZoneY = ps.RightThumbDeadZoneY; p1.RightThumbDown = ps.RightThumbDown; p1.RightThumbLeft = ps.RightThumbLeft; p1.RightThumbRight = ps.RightThumbRight; p1.RightThumbUp = ps.RightThumbUp; p1.RightTrigger = ps.RightTrigger; p1.RightTriggerDeadZone = ps.RightTriggerDeadZone; // Axis to button dead-zones. p1.ButtonADeadZone = ps.ButtonADeadZone ?? ""; p1.ButtonBDeadZone = ps.ButtonBDeadZone ?? ""; p1.ButtonBackDeadZone = ps.ButtonBackDeadZone ?? ""; p1.ButtonStartDeadZone = ps.ButtonStartDeadZone ?? ""; p1.ButtonXDeadZone = ps.ButtonXDeadZone ?? ""; p1.ButtonYDeadZone = ps.ButtonYDeadZone ?? ""; p1.LeftThumbButtonDeadZone = ps.LeftThumbButtonDeadZone ?? ""; p1.RightThumbButtonDeadZone = ps.RightThumbButtonDeadZone ?? ""; p1.LeftShoulderDeadZone = ps.LeftShoulderDeadZone ?? ""; p1.RightShoulderDeadZone = ps.RightShoulderDeadZone ?? ""; p1.DPadDownDeadZone = ps.DPadDownDeadZone ?? ""; p1.DPadLeftDeadZone = ps.DPadLeftDeadZone ?? ""; p1.DPadRightDeadZone = ps.DPadRightDeadZone ?? ""; p1.DPadUpDeadZone = ps.DPadUpDeadZone ?? ""; db.SaveChanges(); db.Dispose(); db = null; return(""); }
/// <summary> /// Set INI settings from PadSetting object by device Instance GUID. /// </summary> /// <param name="instanceGuid">Instance GUID.</param> /// <returns>PadSettings object.</returns> public void SetPadSetting(string padSectionName, PadSetting ps) { var ini2 = new Ini(IniFileName); //ps.PadSettingChecksum = Guid.Empty; ini2.SetValue(padSectionName, SettingName.AxisToDPadDeadZone, ps.AxisToDPadDeadZone); ini2.SetValue(padSectionName, SettingName.AxisToDPadEnabled, ps.AxisToDPadEnabled); ini2.SetValue(padSectionName, SettingName.AxisToDPadOffset, ps.AxisToDPadOffset); ini2.SetValue(padSectionName, SettingName.ButtonA, ps.ButtonA); ini2.SetValue(padSectionName, SettingName.ButtonB, ps.ButtonB); ini2.SetValue(padSectionName, SettingName.ButtonGuide, ps.ButtonBig); ini2.SetValue(padSectionName, SettingName.ButtonBack, ps.ButtonBack); ini2.SetValue(padSectionName, SettingName.ButtonStart, ps.ButtonStart); ini2.SetValue(padSectionName, SettingName.ButtonX, ps.ButtonX); ini2.SetValue(padSectionName, SettingName.ButtonY, ps.ButtonY); ini2.SetValue(padSectionName, SettingName.DPad, ps.DPad); ini2.SetValue(padSectionName, SettingName.DPadDown, ps.DPadDown); ini2.SetValue(padSectionName, SettingName.DPadLeft, ps.DPadLeft); ini2.SetValue(padSectionName, SettingName.DPadRight, ps.DPadRight); ini2.SetValue(padSectionName, SettingName.DPadUp, ps.DPadUp); ini2.SetValue(padSectionName, SettingName.ForceEnable, ps.ForceEnable); ini2.SetValue(padSectionName, SettingName.ForceOverall, ps.ForceOverall); ini2.SetValue(padSectionName, SettingName.ForceSwapMotor, ps.ForceSwapMotor); ini2.SetValue(padSectionName, SettingName.ForceType, ps.ForceType); ini2.SetValue(padSectionName, SettingName.DeviceSubType, ps.GamePadType); ini2.SetValue(padSectionName, SettingName.LeftMotorPeriod, ps.LeftMotorPeriod); ini2.SetValue(padSectionName, SettingName.LeftMotorStrength, ps.LeftMotorStrength); ini2.SetValue(padSectionName, SettingName.LeftShoulder, ps.LeftShoulder); ini2.SetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneX, ps.LeftThumbAntiDeadZoneX); ini2.SetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneY, ps.LeftThumbAntiDeadZoneY); ini2.SetValue(padSectionName, SettingName.LeftThumbLinearX, ps.LeftThumbLinearX); ini2.SetValue(padSectionName, SettingName.LeftThumbLinearY, ps.LeftThumbLinearY); ini2.SetValue(padSectionName, SettingName.LeftThumbAxisX, ps.LeftThumbAxisX); ini2.SetValue(padSectionName, SettingName.LeftThumbAxisY, ps.LeftThumbAxisY); ini2.SetValue(padSectionName, SettingName.LeftThumbButton, ps.LeftThumbButton); ini2.SetValue(padSectionName, SettingName.LeftThumbDeadZoneX, ps.LeftThumbDeadZoneX); ini2.SetValue(padSectionName, SettingName.LeftThumbDeadZoneY, ps.LeftThumbDeadZoneY); ini2.SetValue(padSectionName, SettingName.LeftThumbDown, ps.LeftThumbDown); ini2.SetValue(padSectionName, SettingName.LeftThumbLeft, ps.LeftThumbLeft); ini2.SetValue(padSectionName, SettingName.LeftThumbRight, ps.LeftThumbRight); ini2.SetValue(padSectionName, SettingName.LeftThumbUp, ps.LeftThumbUp); ini2.SetValue(padSectionName, SettingName.LeftTrigger, ps.LeftTrigger); ini2.SetValue(padSectionName, SettingName.LeftTriggerDeadZone, ps.LeftTriggerDeadZone); ini2.SetValue(padSectionName, SettingName.PassThrough, ps.PassThrough); ini2.SetValue(padSectionName, SettingName.RightMotorPeriod, ps.RightMotorPeriod); ini2.SetValue(padSectionName, SettingName.RightMotorStrength, ps.RightMotorStrength); ini2.SetValue(padSectionName, SettingName.RightShoulder, ps.RightShoulder); ini2.SetValue(padSectionName, SettingName.RightThumbAntiDeadZoneX, ps.RightThumbAntiDeadZoneX); ini2.SetValue(padSectionName, SettingName.RightThumbAntiDeadZoneY, ps.RightThumbAntiDeadZoneY); ini2.SetValue(padSectionName, SettingName.RightThumbLinearX, ps.RightThumbLinearX); ini2.SetValue(padSectionName, SettingName.RightThumbLinearY, ps.RightThumbLinearY); ini2.SetValue(padSectionName, SettingName.RightThumbAxisX, ps.RightThumbAxisX); ini2.SetValue(padSectionName, SettingName.RightThumbAxisY, ps.RightThumbAxisY); ini2.SetValue(padSectionName, SettingName.RightThumbButton, ps.RightThumbButton); ini2.SetValue(padSectionName, SettingName.RightThumbDeadZoneX, ps.RightThumbDeadZoneX); ini2.SetValue(padSectionName, SettingName.RightThumbDeadZoneY, ps.RightThumbDeadZoneY); ini2.SetValue(padSectionName, SettingName.RightThumbDown, ps.RightThumbDown); ini2.SetValue(padSectionName, SettingName.RightThumbLeft, ps.RightThumbLeft); ini2.SetValue(padSectionName, SettingName.RightThumbRight, ps.RightThumbRight); ini2.SetValue(padSectionName, SettingName.RightThumbUp, ps.RightThumbUp); ini2.SetValue(padSectionName, SettingName.RightTrigger, ps.RightTrigger); ini2.SetValue(padSectionName, SettingName.RightTriggerDeadZone, ps.RightTriggerDeadZone); }
/// <summary> /// Get PadSetting object from INI by device Instance GUID. /// </summary> /// <param name="instanceGuid">Instance GUID.</param> /// <returns>PadSettings object.</returns> public PadSetting GetPadSetting(string padSectionName) { var ini2 = new Ini(IniFileName); var ps = new PadSetting(); ps.PadSettingChecksum = Guid.Empty; ps.AxisToDPadDeadZone = ini2.GetValue(padSectionName, SettingName.AxisToDPadDeadZone); ps.AxisToDPadEnabled = ini2.GetValue(padSectionName, SettingName.AxisToDPadEnabled); ps.AxisToDPadOffset = ini2.GetValue(padSectionName, SettingName.AxisToDPadOffset); ps.ButtonA = ini2.GetValue(padSectionName, SettingName.ButtonA); ps.ButtonB = ini2.GetValue(padSectionName, SettingName.ButtonB); ps.ButtonGuide = ini2.GetValue(padSectionName, SettingName.ButtonGuide); ps.ButtonBig = ini2.GetValue(padSectionName, SettingName.ButtonBig); ps.ButtonBack = ini2.GetValue(padSectionName, SettingName.ButtonBack); ps.ButtonStart = ini2.GetValue(padSectionName, SettingName.ButtonStart); ps.ButtonX = ini2.GetValue(padSectionName, SettingName.ButtonX); ps.ButtonY = ini2.GetValue(padSectionName, SettingName.ButtonY); ps.DPad = ini2.GetValue(padSectionName, SettingName.DPad); ps.DPadDown = ini2.GetValue(padSectionName, SettingName.DPadDown); ps.DPadLeft = ini2.GetValue(padSectionName, SettingName.DPadLeft); ps.DPadRight = ini2.GetValue(padSectionName, SettingName.DPadRight); ps.DPadUp = ini2.GetValue(padSectionName, SettingName.DPadUp); ps.ForceEnable = ini2.GetValue(padSectionName, SettingName.ForceEnable); ps.ForceOverall = ini2.GetValue(padSectionName, SettingName.ForceOverall); ps.ForceSwapMotor = ini2.GetValue(padSectionName, SettingName.ForceSwapMotor); ps.ForceType = ini2.GetValue(padSectionName, SettingName.ForceType); ps.GamePadType = ini2.GetValue(padSectionName, SettingName.DeviceSubType); ps.LeftMotorPeriod = ini2.GetValue(padSectionName, SettingName.LeftMotorPeriod); ps.LeftMotorStrength = ini2.GetValue(padSectionName, SettingName.LeftMotorStrength); ps.LeftShoulder = ini2.GetValue(padSectionName, SettingName.LeftShoulder); ps.LeftThumbAntiDeadZoneX = ini2.GetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneX); ps.LeftThumbAntiDeadZoneY = ini2.GetValue(padSectionName, SettingName.LeftThumbAntiDeadZoneY); ps.LeftThumbLinearX = ini2.GetValue(padSectionName, SettingName.LeftThumbLinearX); ps.LeftThumbLinearY = ini2.GetValue(padSectionName, SettingName.LeftThumbLinearY); ps.LeftThumbAxisX = ini2.GetValue(padSectionName, SettingName.LeftThumbAxisX); ps.LeftThumbAxisY = ini2.GetValue(padSectionName, SettingName.LeftThumbAxisY); ps.LeftThumbButton = ini2.GetValue(padSectionName, SettingName.LeftThumbButton); ps.LeftThumbDeadZoneX = ini2.GetValue(padSectionName, SettingName.LeftThumbDeadZoneX); ps.LeftThumbDeadZoneY = ini2.GetValue(padSectionName, SettingName.LeftThumbDeadZoneY); ps.LeftThumbDown = ini2.GetValue(padSectionName, SettingName.LeftThumbDown); ps.LeftThumbLeft = ini2.GetValue(padSectionName, SettingName.LeftThumbLeft); ps.LeftThumbRight = ini2.GetValue(padSectionName, SettingName.LeftThumbRight); ps.LeftThumbUp = ini2.GetValue(padSectionName, SettingName.LeftThumbUp); ps.LeftTrigger = ini2.GetValue(padSectionName, SettingName.LeftTrigger); ps.LeftTriggerDeadZone = ini2.GetValue(padSectionName, SettingName.LeftTriggerDeadZone); ps.PassThrough = ini2.GetValue(padSectionName, SettingName.PassThrough); ps.RightMotorPeriod = ini2.GetValue(padSectionName, SettingName.RightMotorPeriod); ps.RightMotorStrength = ini2.GetValue(padSectionName, SettingName.RightMotorStrength); ps.RightShoulder = ini2.GetValue(padSectionName, SettingName.RightShoulder); ps.RightThumbAntiDeadZoneX = ini2.GetValue(padSectionName, SettingName.RightThumbAntiDeadZoneX); ps.RightThumbAntiDeadZoneY = ini2.GetValue(padSectionName, SettingName.RightThumbAntiDeadZoneY); ps.RightThumbAxisX = ini2.GetValue(padSectionName, SettingName.RightThumbAxisX); ps.RightThumbAxisY = ini2.GetValue(padSectionName, SettingName.RightThumbAxisY); ps.RightThumbButton = ini2.GetValue(padSectionName, SettingName.RightThumbButton); ps.RightThumbDeadZoneX = ini2.GetValue(padSectionName, SettingName.RightThumbDeadZoneX); ps.RightThumbDeadZoneY = ini2.GetValue(padSectionName, SettingName.RightThumbDeadZoneY); ps.RightThumbLinearX = ini2.GetValue(padSectionName, SettingName.RightThumbLinearX); ps.RightThumbLinearY = ini2.GetValue(padSectionName, SettingName.RightThumbLinearY); ps.RightThumbDown = ini2.GetValue(padSectionName, SettingName.RightThumbDown); ps.RightThumbLeft = ini2.GetValue(padSectionName, SettingName.RightThumbLeft); ps.RightThumbRight = ini2.GetValue(padSectionName, SettingName.RightThumbRight); ps.RightThumbUp = ini2.GetValue(padSectionName, SettingName.RightThumbUp); ps.RightTrigger = ini2.GetValue(padSectionName, SettingName.RightTrigger); ps.RightTriggerDeadZone = ini2.GetValue(padSectionName, SettingName.RightTriggerDeadZone); return(ps); }
public static PadSetting GetAutoPreset(UserDevice ud) { var ps = new PadSetting(); if (ud == null) { return(ps); } var objects = ud.DeviceObjects; if (objects == null) { return(ps); } var list = objects.ToList(); // Get information about device. var o = list.FirstOrDefault(x => x.Type == ObjectGuid.RxAxis); var deviceType = (SharpDX.DirectInput.DeviceType)ud.CapType; // If Right thumb triggers are missing then... if (deviceType == DeviceType.Gamepad && o == null) { // Logitech RumblePad 2 USB ps.ButtonA = GetButtonValue(list, 1, true, "Cross"); ps.ButtonB = GetButtonValue(list, 2, true, "Circle"); ps.ButtonX = GetButtonValue(list, 0, true, "Square"); ps.ButtonY = GetButtonValue(list, 3, true, "Triangle"); ps.LeftShoulder = GetButtonValue(list, 4, true, "L1"); ps.RightShoulder = GetButtonValue(list, 5, true, "R1"); ps.ButtonBack = GetButtonValue(list, 8, true, "Select", "Back"); ps.ButtonStart = GetButtonValue(list, 9, true, "Start"); ps.LeftThumbButton = GetButtonValue(list, 10, true, "Left Paddle"); ps.RightThumbButton = GetButtonValue(list, 11, true, "Right Paddle"); // Triggers. ps.LeftTrigger = GetButtonValue(list, 6, true, "L2"); ps.RightTrigger = GetButtonValue(list, 7, true, "R2"); // Right Thumb. ps.RightThumbAxisX = GetAxisValue(list, false, ObjectGuid.ZAxis, true); ps.RightThumbAxisY = GetAxisValue(list, true, ObjectGuid.RzAxis, true); } else { // ---------------------------------------------------------------------------------------------- // Controller (Xbox One For Windows) // ---------------------------------------------------------------------------------------------- // Offset Usage Instance Guid Name Flags // ------ ------ -------- ------------- ------------------------------ --------------------- // 0 49 1 YAxis Y Axis AbsoluteAxis // 0 5 0 Unknown Collection 0 - Game Pad Collection, NoData // 0 0 1 Unknown Collection 1 Collection, NoData // 0 0 2 Unknown Collection 2 Collection, NoData // 0 0 3 Unknown Collection 3 Collection, NoData // 0 128 4 Unknown Collection 4 - System Controls Collection, NoData // 4 48 0 XAxis X Axis AbsoluteAxis // 8 52 4 RyAxis Y Rotation AbsoluteAxis // 12 51 3 RxAxis X Rotation AbsoluteAxis // 16 50 2 ZAxis Z Axis AbsoluteAxis // 20 53 5 RzAxis Z Rotation AbsoluteAxis // 24 57 0 PovController Hat Switch PointOfViewController // 32 151 19 Unknown DC Enable Actuators NoData, Output // 36 1 20 Unknown Physical Interface Device NoData, Output // 40 112 21 Unknown Magnitude NoData, Output // 44 80 22 Unknown Duration NoData, Output // 48 167 23 Unknown Start Delay NoData, Output // 52 124 24 Unknown Loop Count NoData, Output // 56 1 0 Button Button 0 PushButton // 57 2 1 Button Button 1 PushButton // 58 3 2 Button Button 2 PushButton // 59 4 3 Button Button 3 PushButton // 60 5 4 Button Button 4 PushButton // 61 6 5 Button Button 5 PushButton // 62 7 6 Button Button 6 PushButton // 63 8 7 Button Button 7 PushButton // 64 9 8 Button Button 8 PushButton // 65 10 9 Button Button 9 PushButton // 66 133 10 Button System Main Menu PushButton ps.ButtonA = GetButtonValue(list, 0, true, "Cross"); ps.ButtonB = GetButtonValue(list, 1, true, "Circle"); ps.ButtonX = GetButtonValue(list, 2, true, "Square", "SPACE"); // Jump/Kick ps.ButtonY = GetButtonValue(list, 3, true, "Triangle"); ps.LeftShoulder = GetButtonValue(list, 4, true, "L1"); ps.RightShoulder = GetButtonValue(list, 5, true, "R1"); ps.ButtonBack = GetButtonValue(list, 6, true, "Select", "Back"); ps.ButtonStart = GetButtonValue(list, 7, true, "Start"); ps.LeftThumbButton = GetButtonValue(list, 8, true, "Left Paddle"); ps.RightThumbButton = GetButtonValue(list, 9, true, "Right Paddle"); //Combined pedals // Triggers. ps.LeftTrigger = GetAxisValue(list, false, ObjectGuid.ZAxis, true, "L2"); ps.RightTrigger = GetAxisValue(list, false, ObjectGuid.RzAxis, true, "R2"); // Right Thumb. ps.RightThumbAxisX = GetAxisValue(list, false, ObjectGuid.RxAxis, true); // Y is inverted by default. ps.RightThumbAxisY = GetAxisValue(list, true, ObjectGuid.RyAxis, true); } // Right Thumb. ps.LeftThumbAxisX = GetAxisValue(list, false, ObjectGuid.XAxis, true, "Wheel axis"); // Y is inverted by default. ps.LeftThumbAxisY = GetAxisValue(list, true, ObjectGuid.YAxis, true); // D-Pad o = list.FirstOrDefault(x => x.Type == ObjectGuid.PovController); ps.DPad = o == null ? "" : string.Format("{0}{1}", SettingName.SType.POV, o.Instance + 1); ps.PadSettingChecksum = ps.CleanAndGetCheckSum(); return(ps); }
public void SaveSettingAsync(Setting s, PadSetting ps, object userState = null) { InvokeAsync("SaveSetting", SaveSettingCompleted, userState, new object[] { s, ps }); }
public string SaveSetting(Setting s, PadSetting ps) { object[] results = Invoke("SaveSetting", new object[] { s, ps }); return((string)results[0]); }
public void SetBinding(MapTo mappedTo, PadSetting o) { _MappedTo = mappedTo; if (_padSetting != null) { _padSetting.PropertyChanged -= _padSetting_PropertyChanged; } // Unbind right side controls. SettingsManager.UnLoadMonitor(LeftTriggerTextBox); SettingsManager.UnLoadMonitor(LeftShoulderTextBox); SettingsManager.UnLoadMonitor(ButtonBackTextBox); SettingsManager.UnLoadMonitor(ButtonStartTextBox); SettingsManager.UnLoadMonitor(ButtonGuideTextBox); SettingsManager.UnLoadMonitor(DPadTextBox); SettingsManager.UnLoadMonitor(LeftThumbAxisXTextBox); SettingsManager.UnLoadMonitor(LeftThumbAxisYTextBox); SettingsManager.UnLoadMonitor(LeftThumbButtonTextBox); SettingsManager.UnLoadMonitor(LeftThumbUpTextBox); SettingsManager.UnLoadMonitor(LeftThumbLeftTextBox); SettingsManager.UnLoadMonitor(LeftThumbRightTextBox); SettingsManager.UnLoadMonitor(LeftThumbDownTextBox); // Unbind middle controls. SettingsManager.UnLoadMonitor(DPadUpTextBox); SettingsManager.UnLoadMonitor(DPadLeftTextBox); SettingsManager.UnLoadMonitor(DPadRightTextBox); SettingsManager.UnLoadMonitor(DPadDownTextBox); // Unbind right side controls. SettingsManager.UnLoadMonitor(RightTriggerTextBox); SettingsManager.UnLoadMonitor(RightShoulderTextBox); SettingsManager.UnLoadMonitor(ButtonYTextBox); SettingsManager.UnLoadMonitor(ButtonXTextBox); SettingsManager.UnLoadMonitor(ButtonBTextBox); SettingsManager.UnLoadMonitor(ButtonATextBox); SettingsManager.UnLoadMonitor(RightThumbAxisXTextBox); SettingsManager.UnLoadMonitor(RightThumbAxisYTextBox); SettingsManager.UnLoadMonitor(RightThumbButtonTextBox); SettingsManager.UnLoadMonitor(RightThumbUpTextBox); SettingsManager.UnLoadMonitor(RightThumbRightTextBox); SettingsManager.UnLoadMonitor(RightThumbRightTextBox); SettingsManager.UnLoadMonitor(RightThumbDownTextBox); if (o == null) { return; } _padSetting = o; var converter = new Converters.PaddSettingToText(); // Bind right side controls. SettingsManager.LoadAndMonitor(o, nameof(o.LeftTrigger), LeftTriggerTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftShoulder), LeftShoulderTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonBack), ButtonBackTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonStart), ButtonStartTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonGuide), ButtonGuideTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.DPad), DPadTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbAxisX), LeftThumbAxisXTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbAxisY), LeftThumbAxisYTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbButton), LeftThumbButtonTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbUp), LeftThumbUpTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbLeft), LeftThumbLeftTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbRight), LeftThumbRightTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.LeftThumbDown), LeftThumbDownTextBox, null, converter); // Bind middle controls. SettingsManager.LoadAndMonitor(o, nameof(o.DPadUp), DPadUpTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.DPadLeft), DPadLeftTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.DPadRight), DPadRightTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.DPadDown), DPadDownTextBox, null, converter); // Bind right side controls. SettingsManager.LoadAndMonitor(o, nameof(o.RightTrigger), RightTriggerTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightShoulder), RightShoulderTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonY), ButtonYTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonX), ButtonXTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonB), ButtonBTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.ButtonA), ButtonATextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbAxisX), RightThumbAxisXTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbAxisY), RightThumbAxisYTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbButton), RightThumbButtonTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbUp), RightThumbUpTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbRight), RightThumbRightTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbRight), RightThumbRightTextBox, null, converter); SettingsManager.LoadAndMonitor(o, nameof(o.RightThumbDown), RightThumbDownTextBox, null, converter); _padSetting.PropertyChanged += _padSetting_PropertyChanged; }
/// <summary> /// Read PAD settings from INI file. /// </summary> /// <param name="padSectionName">INI section.</param> /// <param name="s">Settings.</param> /// <param name="p">PAD Settings.</param> public void ReadPadSettingsFromIni(string padSectionName, out Setting s, out PadSetting p) { s = new Setting(); p = new PadSetting(); ReadWritePadSettings(padSectionName, ref s, ref p, false); }
/// <summary> /// Write PAD settings to INI file. /// </summary> /// <param name="padSectionName">INI section.</param> /// <param name="s">Settings.</param> /// <param name="p">PAD Settings.</param> public void WritePadSettingsToIni(string padSectionName, Setting s, PadSetting p) { ReadWritePadSettings(padSectionName, ref s, ref p, true); }
public string SaveSetting(UserSetting s, PadSetting ps) { return(Invoke <string>("SaveSetting", s, ps)); }
public static PadSetting GetAutoPreset(UserDevice ud) { var ps = new PadSetting(); if (ud == null) { return(ps); } var objects = ud.DeviceObjects; if (objects == null) { return(ps); } var list = objects.ToList(); // Get information about device. var deviceType = (SharpDX.DirectInput.DeviceType)ud.CapType; if (deviceType == DeviceType.Mouse) { // Offset Type Aspect Flags Instance Name // ------ ------ -------- ------------ -------- -------- // 0 XAxis Position RelativeAxis 0 X-axis // 4 YAxis Position RelativeAxis 1 Y-axis // 8 ZAxis Position RelativeAxis 2 Wheel // 12 Button PushButton 3 Button 0 // 13 Button PushButton 4 Button 1 // 14 Button PushButton 5 Button 2 // 15 Button PushButton 6 Button 3 // 16 Button PushButton 7 Button 4 // 17 Button PushButton 8 Button 5 // 18 Button PushButton 9 Button 6 // 19 Button PushButton 10 Button 7 // ps.ButtonA = GetButtonValue(list, 0, true, "Button 0"); ps.ButtonB = GetButtonValue(list, 1, true, "Button 1"); ps.ButtonX = GetButtonValue(list, 2, true, "Button 2"); ps.ButtonY = GetButtonValue(list, 3, true, "Button 3"); ps.LeftShoulder = GetButtonValue(list, 4, true, "Button 4"); ps.RightShoulder = GetButtonValue(list, 5, true, "Button 5"); ps.ButtonBack = GetButtonValue(list, 6, true, "Button 6"); ps.ButtonStart = GetButtonValue(list, 7, true, "Button 7"); ps.LeftThumbButton = GetButtonValue(list, 8, true, "Button 8"); ps.RightThumbButton = GetButtonValue(list, 9, true, "Button 9"); // Left Thumb (Look). ps.LeftThumbAxisX = GetAxisValue(list, false, false, ObjectGuid.XAxis, true, "X-Axis"); ps.LeftThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.YAxis, true, "Y-Axis"); // Wheel. ps.RightThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.ZAxis, true, "Wheel"); } else if (deviceType == DeviceType.Keyboard) { ps.ButtonX = GetButtonValue(list, null, true, "^SPACE$"); // Jump/Kick ps.LeftThumbUp = GetButtonValue(list, null, true, "^W$"); // Move Forward ps.LeftThumbLeft = GetButtonValue(list, null, true, "^A$"); // Move Left ps.LeftThumbDown = GetButtonValue(list, null, true, "^S$"); // Move Backward ps.LeftThumbRight = GetButtonValue(list, null, true, "^D$"); // Move Right //ps.DPadUp = GetButtonValue(list, null, true, "^$"); // Phone Up //ps.DPadDown = GetButtonValue(list, null, true, "^]$"); // Phone Down ps.DPadLeft = GetButtonValue(list, null, true, "^\\[$"); // Previous Weapon ps.DPadRight = GetButtonValue(list, null, true, "^\\]$"); // Next Weapon } else { // ---------------------------------------------------------------------------------------------- // Controller (Xbox One For Windows) // ---------------------------------------------------------------------------------------------- // Offset Usage Instance Guid Name Flags // ------ ------ -------- ------------- ------------------------------ --------------------- // 0 49 1 YAxis Y Axis AbsoluteAxis // 0 5 0 Unknown Collection 0 - Game Pad Collection, NoData // 0 0 1 Unknown Collection 1 Collection, NoData // 0 0 2 Unknown Collection 2 Collection, NoData // 0 0 3 Unknown Collection 3 Collection, NoData // 0 128 4 Unknown Collection 4 - System Controls Collection, NoData // 4 48 0 XAxis X Axis AbsoluteAxis // 8 52 4 RyAxis Y Rotation AbsoluteAxis // 12 51 3 RxAxis X Rotation AbsoluteAxis // 16 50 2 ZAxis Z Axis AbsoluteAxis // 20 53 5 RzAxis Z Rotation AbsoluteAxis // 24 57 0 PovController Hat Switch PointOfViewController // 32 151 19 Unknown DC Enable Actuators NoData, Output // 36 1 20 Unknown Physical Interface Device NoData, Output // 40 112 21 Unknown Magnitude NoData, Output // 44 80 22 Unknown Duration NoData, Output // 48 167 23 Unknown Start Delay NoData, Output // 52 124 24 Unknown Loop Count NoData, Output // 56 1 0 Button Button 0 PushButton // 57 2 1 Button Button 1 PushButton // 58 3 2 Button Button 2 PushButton // 59 4 3 Button Button 3 PushButton // 60 5 4 Button Button 4 PushButton // 61 6 5 Button Button 5 PushButton // 62 7 6 Button Button 6 PushButton // 63 8 7 Button Button 7 PushButton // 64 9 8 Button Button 8 PushButton // 65 10 9 Button Button 9 PushButton // 66 133 10 Button System Main Menu PushButton // // If Sony then... if (ud.DevVendorId == 0x054C) { ps.ButtonA = GetButtonValue(list, 1, true, "Cross"); ps.ButtonB = GetButtonValue(list, 2, true, "Circle"); ps.ButtonX = GetButtonValue(list, 0, true, "Square"); // Jump/Kick ps.ButtonY = GetButtonValue(list, 3, true, "Triangle"); ps.LeftShoulder = GetButtonValue(list, 4, true, "L1"); ps.RightShoulder = GetButtonValue(list, 5, true, "R1"); ps.ButtonBack = GetButtonValue(list, 8, true, "Select", "Back"); ps.ButtonStart = GetButtonValue(list, 9, true, "Start"); ps.LeftThumbButton = GetButtonValue(list, 10, true, "Left Paddle"); ps.RightThumbButton = GetButtonValue(list, 11, true, "Right Paddle"); // Map triggers from two different axis. ps.LeftTrigger = GetAxisValue(list, false, false, ObjectGuid.RxAxis, true, "L2"); ps.RightTrigger = GetAxisValue(list, false, false, ObjectGuid.RyAxis, true, "R2"); // Right Thumb. ps.RightThumbAxisX = GetAxisValue(list, false, false, ObjectGuid.ZAxis, true); // Y is inverted by default. ps.RightThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.RzAxis, true); // Right Thumb. ps.LeftThumbAxisX = GetAxisValue(list, false, false, ObjectGuid.XAxis, true, "Wheel axis"); // Y is inverted by default. ps.LeftThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.YAxis, true); } else { ps.ButtonA = GetButtonValue(list, 0, true, "Cross"); ps.ButtonB = GetButtonValue(list, 1, true, "Circle"); ps.ButtonX = GetButtonValue(list, 2, true, "Square"); // Jump/Kick ps.ButtonY = GetButtonValue(list, 3, true, "Triangle"); ps.LeftShoulder = GetButtonValue(list, 4, true, "L1"); ps.RightShoulder = GetButtonValue(list, 5, true, "R1"); ps.ButtonBack = GetButtonValue(list, 6, true, "Select", "Back"); ps.ButtonStart = GetButtonValue(list, 7, true, "Start"); ps.LeftThumbButton = GetButtonValue(list, 8, true, "Left Paddle"); ps.RightThumbButton = GetButtonValue(list, 9, true, "Right Paddle"); // Triggers. var rightTrigger = GetAxisValue(list, false, false, ObjectGuid.RzAxis, true, "R2"); // If RzAxis or "R2" name is missing then... if (string.IsNullOrEmpty(rightTrigger)) { // Map triggers form single combinex axis. ps.LeftTrigger = GetAxisValue(list, false, true, ObjectGuid.ZAxis, true, "L2"); ps.RightTrigger = GetAxisValue(list, true, true, ObjectGuid.ZAxis, true, "L2"); } else { // Map triggers from two different axis. ps.LeftTrigger = GetAxisValue(list, false, false, ObjectGuid.ZAxis, true, "L2"); ps.RightTrigger = GetAxisValue(list, false, false, ObjectGuid.RzAxis, true, "R2"); } // Right Thumb. ps.RightThumbAxisX = GetAxisValue(list, false, false, ObjectGuid.RxAxis, true); // Y is inverted by default. ps.RightThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.RyAxis, true); // Right Thumb. ps.LeftThumbAxisX = GetAxisValue(list, false, false, ObjectGuid.XAxis, true, "Wheel axis"); // Y is inverted by default. ps.LeftThumbAxisY = GetAxisValue(list, true, false, ObjectGuid.YAxis, true); } // D-Pad var o = list.FirstOrDefault(x => x.Type == ObjectGuid.PovController); ps.DPad = o == null ? "" : string.Format("{0}{1}", SettingName.SType.POV, o.Instance + 1); } ps.PadSettingChecksum = ps.CleanAndGetCheckSum(); return(ps); }