sneak/Shared/Input.cs
Colin McMillen db6f3e1425 Add Input class to group gamepad & keyboard inputs together.
For motion directions (up/down & left/right), have them cancel each other out
if the player attempts to go in opposite directions at once.

Refactor Player & SneakGame to use the new Input class & remove direct access
to Keyboard & GamePad.

GitOrigin-RevId: 80fbed887408ae2b80c01273a49b150f38285dcb
2020-02-13 14:49:45 -05:00

52 lines
1.8 KiB
C#

using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;
namespace SemiColinGames {
struct Input {
public bool Jump;
public bool Attack;
public Vector2 Motion;
public bool Exit;
public bool FullScreen;
public bool Debug;
public Input(GamePadState gamePad, KeyboardState keyboard) {
// First we process normal buttons.
Jump = gamePad.IsButtonDown(Buttons.A) || keyboard.IsKeyDown(Keys.J);
Attack = gamePad.IsButtonDown(Buttons.X) || keyboard.IsKeyDown(Keys.K);
// Then special debugging sorts of buttons.
Exit = gamePad.IsButtonDown(Buttons.Start) || keyboard.IsKeyDown(Keys.Escape);
FullScreen = gamePad.IsButtonDown(Buttons.Back) || keyboard.IsKeyDown(Keys.F12) ||
keyboard.IsKeyDown(Keys.OemPlus);
Debug = gamePad.IsButtonDown(Buttons.LeftShoulder) || keyboard.IsKeyDown(Keys.OemMinus);
// Then potential motion directions. If the player attempts to input opposite directions at
// once (up & down or left & right), those inputs cancel out, resulting in no motion.
Motion = new Vector2();
Vector2 leftStick = gamePad.ThumbSticks.Left;
bool left = leftStick.X < -0.5 || gamePad.IsButtonDown(Buttons.DPadLeft) ||
keyboard.IsKeyDown(Keys.A);
bool right = leftStick.X > 0.5 || gamePad.IsButtonDown(Buttons.DPadRight) ||
keyboard.IsKeyDown(Keys.D);
bool up = leftStick.Y > 0.5 || gamePad.IsButtonDown(Buttons.DPadUp) ||
keyboard.IsKeyDown(Keys.W);
bool down = leftStick.Y < -0.5 || gamePad.IsButtonDown(Buttons.DPadDown) ||
keyboard.IsKeyDown(Keys.S);
if (left && !right) {
Motion.X = -1;
}
if (right && !left) {
Motion.X = 1;
}
if (up && !down) {
Motion.Y = 1;
}
if (down && !up) {
Motion.Y = -1;
}
}
}
}