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; }
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); } }
public void ButtonUp(JoypadButtons button) { Helpers.SetBit(ref _joyPadState, (int)button, true); }
public void ButtonUp(JoypadButtons button) { _joypad.ButtonUp(button); }
public void ButtonDown(JoypadButtons button) { _joypad.ButtonDown(button); }
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)); }