about summary refs log tree commit diff stats
path: root/AnodyneArchipelago/Menu/InputHandler.cs
blob: 65605a2da5efa9ab017dd67a25cb8e55b91bcdea (plain) (blame)
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using AnodyneSharp.Input;
using Microsoft.Xna.Framework.Input;
using System.Collections.Generic;

namespace AnodyneArchipelago.Menu
{
    internal class InputCharacter
    {
        private readonly string _upper;
        private readonly string _lower;
        private readonly Keys _code;

        public InputCharacter(string upper, string lower, Keys code)
        {
            _upper = upper;
            _lower = lower;
            _code = code;
        }

        public string ReturnCharacter(bool shiftDown)
        {
            return shiftDown ? _upper : _lower;
        }

        public Keys ReturnKey()
        {
            return _code;
        }
    }

    internal class InputHandler
    {
        private static List<InputCharacter> _characters = new();

        static InputHandler()
        {
            _characters.Add(new InputCharacter("A", "a", Keys.A));
            _characters.Add(new InputCharacter("B", "b", Keys.B));
            _characters.Add(new InputCharacter("C", "c", Keys.C));
            _characters.Add(new InputCharacter("D", "d", Keys.D));
            _characters.Add(new InputCharacter("E", "e", Keys.E));
            _characters.Add(new InputCharacter("F", "f", Keys.F));
            _characters.Add(new InputCharacter("G", "g", Keys.G));
            _characters.Add(new InputCharacter("H", "h", Keys.H));
            _characters.Add(new InputCharacter("I", "i", Keys.I));
            _characters.Add(new InputCharacter("J", "j", Keys.J));
            _characters.Add(new InputCharacter("K", "k", Keys.K));
            _characters.Add(new InputCharacter("L", "l", Keys.L));
            _characters.Add(new InputCharacter("M", "m", Keys.M));
            _characters.Add(new InputCharacter("N", "n", Keys.N));
            _characters.Add(new InputCharacter("O", "o", Keys.O));
            _characters.Add(new InputCharacter("P", "p", Keys.P));
            _characters.Add(new InputCharacter("Q", "q", Keys.Q));
            _characters.Add(new InputCharacter("R", "r", Keys.R));
            _characters.Add(new InputCharacter("S", "s", Keys.S));
            _characters.Add(new InputCharacter("T", "t", Keys.T));
            _characters.Add(new InputCharacter("U", "u", Keys.U));
            _characters.Add(new InputCharacter("V", "v", Keys.V));
            _characters.Add(new InputCharacter("W", "w", Keys.W));
            _characters.Add(new InputCharacter("X", "x", Keys.X));
            _characters.Add(new InputCharacter("Y", "y", Keys.Y));
            _characters.Add(new InputCharacter("Z", "z", Keys.Z));

            _characters.Add(new InputCharacter("!", "1", Keys.D1));
            _characters.Add(new InputCharacter("@", "2", Keys.D2));
            _characters.Add(new InputCharacter("#", "3", Keys.D3));
            _characters.Add(new InputCharacter("$", "4", Keys.D4));
            _characters.Add(new InputCharacter("%", "5", Keys.D5));
            _characters.Add(new InputCharacter("^", "6", Keys.D6));
            _characters.Add(new InputCharacter("&", "7", Keys.D7));
            _characters.Add(new InputCharacter("*", "8", Keys.D8));
            _characters.Add(new InputCharacter("(", "9", Keys.D9));
            _characters.Add(new InputCharacter(")", "0", Keys.D0));

            _characters.Add(new InputCharacter(" ", " ", Keys.Space));
            _characters.Add(new InputCharacter("<", ",", Keys.OemComma));
            _characters.Add(new InputCharacter("+", "=", Keys.OemPlus));
            _characters.Add(new InputCharacter("?", "/", Keys.OemQuestion));
            _characters.Add(new InputCharacter(">", ".", Keys.OemPeriod));
            _characters.Add(new InputCharacter("_", "-", Keys.OemMinus));
            _characters.Add(new InputCharacter("{", "[", Keys.OemOpenBrackets));
            _characters.Add(new InputCharacter("|", "\"", Keys.OemBackslash));
            _characters.Add(new InputCharacter(":", ";", Keys.OemSemicolon));
        }

        public static string ReturnCharacter()
        {
            foreach (InputCharacter inputCharacter in _characters)
            {
                if (KeyInput.JustPressedKey(inputCharacter.ReturnKey()))
                {
                    return inputCharacter.ReturnCharacter(KeyInput.IsKeyPressed(Keys.LeftShift) || KeyInput.IsKeyPressed(Keys.RightShift));
                }
            }

            return "";
        }
    }
}