Add ability to move by a single pixel in DEBUG builds.

Fixes #15.

Also enables the LeftShoulder + RightShoulder + [BUTTON] combos only while
we're in DEBUG mode.
This commit is contained in:
Colin McMillen 2020-03-16 15:36:46 -04:00
parent b10e03857f
commit fb3538cea9
2 changed files with 21 additions and 0 deletions

View File

@ -4,29 +4,40 @@ using Microsoft.Xna.Framework.Input;
namespace SemiColinGames { namespace SemiColinGames {
public readonly struct Input { public readonly struct Input {
public readonly Vector2 Motion; public readonly Vector2 Motion;
// If true, the player's x-motion should be treated as an absolute number of pixels in a given
// direction, regardless of modeled time. This is only enabled in DEBUG builds.
public readonly bool IsAbsoluteMotion;
public readonly bool Jump; public readonly bool Jump;
public readonly bool Attack; public readonly bool Attack;
public readonly bool Pause; public readonly bool Pause;
public readonly bool Debug; public readonly bool Debug;
// Button combos for Exit / Restart / FullScreen only work in DEBUG builds.
// Keyboard controls always work for these actions.
public readonly bool Exit; public readonly bool Exit;
public readonly bool Restart; public readonly bool Restart;
public readonly bool FullScreen; public readonly bool FullScreen;
public Input(GamePadState gamePad, KeyboardState keyboard) { public Input(GamePadState gamePad, KeyboardState keyboard) {
Motion = new Vector2(); Motion = new Vector2();
IsAbsoluteMotion = false;
// We check for debugging buttons first. If any are pressed, we suppress normal input; // We check for debugging buttons first. If any are pressed, we suppress normal input;
// other button-presses correspond to special debugging things. // other button-presses correspond to special debugging things.
Exit = keyboard.IsKeyDown(Keys.Escape); Exit = keyboard.IsKeyDown(Keys.Escape);
Restart = keyboard.IsKeyDown(Keys.F5); Restart = keyboard.IsKeyDown(Keys.F5);
FullScreen = keyboard.IsKeyDown(Keys.F12); FullScreen = keyboard.IsKeyDown(Keys.F12);
#if DEBUG
if (gamePad.IsButtonDown(Buttons.LeftShoulder) && if (gamePad.IsButtonDown(Buttons.LeftShoulder) &&
gamePad.IsButtonDown(Buttons.RightShoulder)) { gamePad.IsButtonDown(Buttons.RightShoulder)) {
IsAbsoluteMotion = true;
Exit |= gamePad.IsButtonDown(Buttons.Start); Exit |= gamePad.IsButtonDown(Buttons.Start);
Restart |= gamePad.IsButtonDown(Buttons.Back); Restart |= gamePad.IsButtonDown(Buttons.Back);
FullScreen |= gamePad.IsButtonDown(Buttons.Y); FullScreen |= gamePad.IsButtonDown(Buttons.Y);
} }
#endif
if (Exit || Restart || FullScreen) { if (Exit || Restart || FullScreen) {
Jump = false; Jump = false;
Attack = false; Attack = false;
@ -67,6 +78,7 @@ namespace SemiColinGames {
if (down && !up) { if (down && !up) {
Motion.Y = -1; Motion.Y = -1;
} }
} }
} }
} }

View File

@ -189,6 +189,15 @@ namespace SemiColinGames {
result.Y = ySpeed * modelTime; result.Y = ySpeed * modelTime;
ySpeed += gravity * modelTime; ySpeed += gravity * modelTime;
swordSwingTime -= modelTime; swordSwingTime -= modelTime;
if (input[0].IsAbsoluteMotion) {
if (input[1].Motion.X == 0) {
result.X = input[0].Motion.X;
} else {
result.X = 0;
}
}
return result; return result;
} }