private static void ImportXInputButton(GameProfile userProfile, InputConfig c, InputKey key, params InputMapping[] mapping) { var start = userProfile.JoystickButtons.FirstOrDefault(j => !j.HideWithXInput && mapping.Contains(j.InputMapping)); bool reverseAxis = false; if (c[key] == null && key == InputKey.leftanalogdown) { reverseAxis = true; key = InputKey.leftanalogup; } if (c[key] == null && key == InputKey.leftanalogright) { reverseAxis = true; key = InputKey.leftanalogleft; } if (start != null && c[key] != null) { start.XInputButton = new XInputButton(); GamepadButtonFlags result; if (c[key].Type == "axis") { start.XInputButton.IsLeftThumbX = false; start.XInputButton.IsRightThumbX = false; start.XInputButton.IsLeftThumbY = false; start.XInputButton.IsRightThumbY = false; start.XInputButton.IsAxisMinus = false; start.XInputButton.IsLeftTrigger = false; start.XInputButton.IsRightTrigger = false; start.XInputButton.XInputIndex = 0; start.XInputButton.ButtonIndex = 0; start.XInputButton.IsButton = false; start.XInputButton.ButtonCode = 0; start.BindNameXi = "Input Device 0 " + c.GetXInputMapping(key, reverseAxis).ToString(); start.BindName = "Input Device 0 " + c.GetXInputMapping(key, reverseAxis).ToString(); switch (c.GetXInputMapping(key, reverseAxis)) { case XINPUTMAPPING.LEFTANALOG_LEFT: start.XInputButton.IsLeftThumbX = true; start.XInputButton.IsAxisMinus = true; break; case XINPUTMAPPING.LEFTANALOG_RIGHT: start.XInputButton.IsLeftThumbX = true; start.XInputButton.IsAxisMinus = false; break; case XINPUTMAPPING.LEFTANALOG_UP: start.XInputButton.IsLeftThumbY = true; start.XInputButton.IsAxisMinus = false; break; case XINPUTMAPPING.LEFTANALOG_DOWN: start.XInputButton.IsLeftThumbY = true; start.XInputButton.IsAxisMinus = true; break; case XINPUTMAPPING.RIGHTANALOG_LEFT: start.XInputButton.IsRightThumbX = true; start.XInputButton.IsAxisMinus = true; break; case XINPUTMAPPING.RIGHTANALOG_RIGHT: start.XInputButton.IsRightThumbX = true; start.XInputButton.IsAxisMinus = false; break; case XINPUTMAPPING.RIGHTANALOG_UP: start.XInputButton.IsRightThumbY = true; start.XInputButton.IsAxisMinus = false; break; case XINPUTMAPPING.RIGHTANALOG_DOWN: start.XInputButton.IsRightThumbY = true; start.XInputButton.IsAxisMinus = true; break; case XINPUTMAPPING.LEFTTRIGGER: start.XInputButton.IsLeftTrigger = true; break; case XINPUTMAPPING.RIGHTTRIGGER: start.XInputButton.IsRightTrigger = true; break; } } else if (c[key].Type == "button" || c[key].Type == "hat") { if (Enum.TryParse <GamepadButtonFlags>(c.GetXInputMapping(key).ToString(), out result)) { start.XInputButton.IsLeftThumbX = false; start.XInputButton.IsRightThumbX = false; start.XInputButton.IsLeftThumbY = false; start.XInputButton.IsRightThumbY = false; start.XInputButton.IsAxisMinus = false; start.XInputButton.IsLeftTrigger = false; start.XInputButton.IsRightTrigger = false; start.XInputButton.XInputIndex = 0; start.XInputButton.ButtonIndex = 0; start.XInputButton.IsButton = true; start.XInputButton.ButtonCode = (short)result; start.BindNameXi = "Input Device 0 " + c.GetXInputMapping(key).ToString(); start.BindName = "Input Device 0 " + c.GetXInputMapping(key).ToString(); } } } }