Beispiel #1
0
        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();
                    }
                }
            }
        }