blob: a8fd4f0d9df08e4d67c63506cc526caf2157c817 (
plain)
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
|
using System.Collections.Generic;
using System.Linq;
using Celesteia.Game.Input.Definitions;
using Microsoft.Xna.Framework.Input;
using MonoGame.Extended.Input;
namespace Celesteia.Game.Input {
public static class KeyboardHelper {
private static KeyboardStateExtended _prev;
private static KeyboardStateExtended _curr;
public static void Update() {
_prev = _curr;
_curr = KeyboardExtended.GetState();
}
// Is any key (excluding the exemptions) down in the current state?
public static List<Keys> exemptedFromAny = new List<Keys> {
{ Keys.F3 }, { Keys.F11 }
};
private static Keys[] pressed;
public static bool AnyKey() {
pressed = _curr.GetPressedKeys();
bool anyKey = pressed.Length > 0;
if (anyKey)
for (int i = 0; i < exemptedFromAny.Count; i++)
anyKey = !pressed.Contains(exemptedFromAny[i]);
return anyKey;
}
// Was true, now true.
public static bool Held(Keys keys) => _prev.IsKeyDown(keys) && _curr.IsKeyDown(keys);
// Is true.
public static bool IsDown(Keys keys) => _curr.IsKeyDown(keys);
// Was false, now true.
public static bool Pressed(Keys keys) => !_prev.IsKeyDown(keys) && _curr.IsKeyDown(keys);
// Was true, now false.
public static bool Released(Keys keys) => _prev.IsKeyDown(keys) && !_curr.IsKeyDown(keys);
public static bool Poll(Keys keys, InputPollType type) => type switch {
InputPollType.Held => Held(keys),
InputPollType.IsDown => IsDown(keys),
InputPollType.Pressed => Pressed(keys),
InputPollType.Released => Released(keys),
_ => false
};
}
}
|