summaryrefslogtreecommitdiff
path: root/source/game/input/GamepadHelper.cs
diff options
context:
space:
mode:
Diffstat (limited to 'source/game/input/GamepadHelper.cs')
-rw-r--r--source/game/input/GamepadHelper.cs59
1 files changed, 59 insertions, 0 deletions
diff --git a/source/game/input/GamepadHelper.cs b/source/game/input/GamepadHelper.cs
new file mode 100644
index 0000000..dfc3175
--- /dev/null
+++ b/source/game/input/GamepadHelper.cs
@@ -0,0 +1,59 @@
+using System;
+using Celesteia.Game.Input.Definitions;
+using Microsoft.Xna.Framework;
+using Microsoft.Xna.Framework.Input;
+
+namespace Celesteia.Game.Input {
+ public static class GamepadHelper {
+ private static GamePadState _prev;
+ private static GamePadState _curr;
+
+ public static void Update() {
+ _prev = _curr;
+ _curr = GamePad.GetState(0);
+ }
+
+ public static bool AnyButton() {
+ foreach (Buttons b in Enum.GetValues<Buttons>())
+ if (IsDown(b)) return true;
+
+ return false;
+ }
+
+ // Was true, now true.
+ public static bool Held(Buttons buttons) => _prev.IsButtonDown(buttons) && _curr.IsButtonDown(buttons);
+ // Is true.
+ public static bool IsDown(Buttons buttons) => _curr.IsButtonDown(buttons);
+ // Was false, now true.
+ public static bool Pressed(Buttons buttons) => !_prev.IsButtonDown(buttons) && _curr.IsButtonDown(buttons);
+ // Was true, now false.
+ public static bool Released(Buttons buttons) => _prev.IsButtonDown(buttons) && !_curr.IsButtonDown(buttons);
+
+ public static bool PollButtons(Buttons buttons, InputPollType type) => type switch {
+ InputPollType.Held => Held(buttons),
+ InputPollType.IsDown => IsDown(buttons),
+ InputPollType.Pressed => Pressed(buttons),
+ InputPollType.Released => Released(buttons),
+ _ => false
+ };
+
+ public static float PollSensor(GamePadSensor sensor) => sensor switch {
+ GamePadSensor.LeftThumbStickX => _curr.ThumbSticks.Left.X,
+ GamePadSensor.LeftThumbStickY => _curr.ThumbSticks.Left.Y,
+ GamePadSensor.LeftTrigger => _curr.Triggers.Left,
+ GamePadSensor.RightThumbStickX => _curr.ThumbSticks.Right.X,
+ GamePadSensor.RightThumbStickY => _curr.ThumbSticks.Right.Y,
+ GamePadSensor.RightTrigger => _curr.Triggers.Right,
+ _ => 0f
+ };
+ }
+
+ public enum GamePadSensor {
+ LeftThumbStickX,
+ LeftThumbStickY,
+ LeftTrigger,
+ RightThumbStickX,
+ RightThumbStickY,
+ RightTrigger
+ }
+} \ No newline at end of file