示例#1
0
        public InputSettings()
        {
            UpKey         = Keys.Up;
            DownKey       = Keys.Down;
            LeftKey       = Keys.Left;
            RightKey      = Keys.Right;
            MainActionKey = Keys.Z;
            SubActionKey  = Keys.X;
            OptionalKey   = Keys.C;
            MenuKey       = Keys.Escape;

            UpAxis               = AxisType.YMinus;
            LeftAxis             = AxisType.XMinus;
            AxisAnalogThreshold  = 0.1f;
            AxisDigitalThreshold = 0.4f;

            MainActionButton = JoypadButtons.B01;
            SubActionButton  = JoypadButtons.B02;
            OptionalButton   = JoypadButtons.B03;
            MenuButton       = JoypadButtons.B04;
        }
示例#2
0
        public void ButtonDown(JoypadButtons button)
        {
            var previousState = !Helpers.TestBit(_joyPadState, (int)button);

            Helpers.SetBit(ref _joyPadState, (int)button, false);

            var directionalButton = button <= JoypadButtons.Down;

            var requestInterrupt = false;

            if (directionalButton && !Helpers.TestBit(_joyPadRegister, DIRECTION_BUTTONS_SELECT))
            {
                requestInterrupt = !previousState;
            }
            else if (!directionalButton && !Helpers.TestBit(_joyPadRegister, OTHER_BUTTONS_SELECT))
            {
                requestInterrupt = !previousState;
            }

            if (requestInterrupt)
            {
                MessageBus.Instance.RequestInterrupt(Interrupts.Joypad);
            }
        }
示例#3
0
 public void ButtonUp(JoypadButtons button)
 {
     Helpers.SetBit(ref _joyPadState, (int)button, true);
 }
示例#4
0
 public void ButtonUp(JoypadButtons button)
 {
     _joypad.ButtonUp(button);
 }
示例#5
0
 public void ButtonDown(JoypadButtons button)
 {
     _joypad.ButtonDown(button);
 }
示例#6
0
        public static bool IsPushed(InputUnit u)
        {
            AxisType      ax  = AxisType.None;
            JoypadButtons btn = JoypadButtons.None;

            for (int i = 0; i < JoystickCount; i++)
            {
                if (!joystickAvailable[i])
                {
                    continue;
                }
                switch (u)
                {
                case InputUnit.Up:
                    ax = Program.Configuration.Input.UpAxis;
                    break;

                case InputUnit.Down:
                    ax = Program.Configuration.Input.UpAxis.Invert();
                    break;

                case InputUnit.Left:
                    ax = Program.Configuration.Input.LeftAxis;
                    break;

                case InputUnit.Right:
                    ax = Program.Configuration.Input.LeftAxis.Invert();
                    break;

                case InputUnit.MainAction:
                    btn = Program.Configuration.Input.MainActionButton;
                    break;

                case InputUnit.Subaction:
                    btn = Program.Configuration.Input.SubActionButton;
                    break;

                case InputUnit.Optional:
                    btn = Program.Configuration.Input.OptionalButton;
                    break;

                case InputUnit.Menu:
                    btn = Program.Configuration.Input.MenuButton;
                    break;
                }

                float threshold = Program.Configuration.Input.AxisDigitalThreshold;

                if ((joystickState[i].Buttons & btn) != JoypadButtons.None)
                {
                    return(true);
                }
                else if (joystickState[i].Axis.Get((JoystickID)i, ax) > threshold)
                {
                    return(true);
                }
                else if ((joystickState[i].Flags & JoyInfoFlags.ReturnPOV) != 0)
                {
                    Program.AddStatistics("POV", "[#{0}]{1}", i, joystickState[i].POV);
                    if (joystickState[i].POV != 0xffff)
                    {
                        double povAngle = joystickState[i].POV / 18000.0 * Math.PI;
                        // (0, -1)を0度として右回り
                        double x = Math.Sin(povAngle);
                        double y = -Math.Cos(povAngle);
                        switch (ax)
                        {
                        case AxisType.XPlus:
                            if (x > threshold)
                            {
                                return(true);
                            }
                            break;

                        case AxisType.XMinus:
                            if (-x > threshold)
                            {
                                return(true);
                            }
                            break;

                        case AxisType.YPlus:
                            if (y > threshold)
                            {
                                return(true);
                            }
                            break;

                        case AxisType.YMinus:
                            if (-y > threshold)
                            {
                                return(true);
                            }
                            break;
                        }
                    }
                }
            }


            Keys k = Keys.None;

            switch (u)
            {
            case InputUnit.Up:
                k = Program.Configuration.Input.UpKey;
                break;

            case InputUnit.Down:
                k = Program.Configuration.Input.DownKey;
                break;

            case InputUnit.Left:
                k = Program.Configuration.Input.LeftKey;
                break;

            case InputUnit.Right:
                k = Program.Configuration.Input.RightKey;
                break;

            case InputUnit.MainAction:
                k = Program.Configuration.Input.MainActionKey;
                break;

            case InputUnit.Subaction:
                k = Program.Configuration.Input.SubActionKey;
                break;

            case InputUnit.Optional:
                k = Program.Configuration.Input.OptionalKey;
                break;

            case InputUnit.Menu:
                k = Program.Configuration.Input.MenuKey;
                break;
            }

            return(stat.IsKeyDown(k));
        }