1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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
}
}
|