Browse Source
Add Input class to group gamepad & keyboard inputs together.
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: 80fbed8874
master
Colin McMillen
4 years ago
4 changed files with 67 additions and 30 deletions
@ -0,0 +1,51 @@ |
|||||
|
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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue