summaryrefslogtreecommitdiff
path: root/source/game/input/KeyboardHelper.cs
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
        };
    }

    
}