1
0
Fork 0
MyMonoGame/MyMonoGameAddin/KeyChar.cs

213 lines
6.3 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework.Input;
namespace MyMonoGameAddin
{
public static class KeyChar
{
public enum Layout { QWERTY, AZERTY }
static readonly Dictionary<Keys, CharPair>[] Data = new Dictionary<Keys, CharPair>[2]
{
new Dictionary<Keys, CharPair>() //QWERTY
{
{Keys.OemTilde, new CharPair('`','~')},
{Keys.D1, new CharPair('1','!')},
{Keys.D2, new CharPair('2','@')},
{Keys.D3, new CharPair('3','#')},
{Keys.D4, new CharPair('4','$')},
{Keys.D5, new CharPair('5','%')},
{Keys.D6, new CharPair('6','^')},
{Keys.D7, new CharPair('7','&')},
{Keys.D8, new CharPair('8','*')},
{Keys.D9, new CharPair('9','(')},
{Keys.D0, new CharPair('0',')')},
{Keys.OemMinus, new CharPair('-','_')},
{Keys.OemPlus, new CharPair('=','+')},
{Keys.Q, new CharPair('q','Q')},
{Keys.W, new CharPair('w','W')},
{Keys.E, new CharPair('e','E')},
{Keys.R, new CharPair('r','R')},
{Keys.T, new CharPair('t','T')},
{Keys.Y, new CharPair('y','Y')},
{Keys.U, new CharPair('u','U')},
{Keys.I, new CharPair('i','i')},
{Keys.O, new CharPair('o','O')},
{Keys.P, new CharPair('p','P')},
{Keys.OemOpenBrackets, new CharPair('[','{')},
{Keys.OemCloseBrackets, new CharPair(']','}')},
{Keys.OemPipe, new CharPair('\\','|')},
{Keys.A, new CharPair('a','A')},
{Keys.S, new CharPair('s','S')},
{Keys.D, new CharPair('d','D')},
{Keys.F, new CharPair('f','F')},
{Keys.G, new CharPair('g','G')},
{Keys.H, new CharPair('h','H')},
{Keys.J, new CharPair('j','J')},
{Keys.K, new CharPair('k','K')},
{Keys.L, new CharPair('l','L')},
{Keys.OemSemicolon, new CharPair(';',':')},
{Keys.OemQuotes, new CharPair('\'','"')},
{Keys.Z, new CharPair('z','Z')},
{Keys.X, new CharPair('x','X')},
{Keys.C, new CharPair('c','C')},
{Keys.V, new CharPair('v','V')},
{Keys.B, new CharPair('b','B')},
{Keys.N, new CharPair('n','N')},
{Keys.M, new CharPair('m','M')},
{Keys.OemComma, new CharPair(',','<')},
{Keys.OemPeriod, new CharPair('.','>')},
{Keys.OemQuestion, new CharPair('/','?')},
{Keys.NumPad1, new CharPair('1')},
{Keys.NumPad2, new CharPair('2')},
{Keys.NumPad3, new CharPair('3')},
{Keys.NumPad4, new CharPair('4')},
{Keys.NumPad5, new CharPair('5')},
{Keys.NumPad6, new CharPair('6')},
{Keys.NumPad7, new CharPair('7')},
{Keys.NumPad8, new CharPair('8')},
{Keys.NumPad9, new CharPair('9')},
{Keys.NumPad0, new CharPair('0')},
{Keys.Add, new CharPair('+')},
{Keys.Divide, new CharPair('/')},
{Keys.Multiply, new CharPair('*')},
{Keys.Subtract, new CharPair('-')},
{Keys.Decimal, new CharPair('.')},
{Keys.Space, new CharPair(' ')}
},
new Dictionary<Keys, CharPair>() //AZERTY
{
{Keys.OemTilde, new CharPair('²')},
{Keys.D1, new CharPair('&','1')},
{Keys.D2, new CharPair('é','2','~')},
{Keys.D3, new CharPair('"','3','#')},
{Keys.D4, new CharPair('\'','4','\'')},
{Keys.D5, new CharPair('(','5','[')},
{Keys.D6, new CharPair('-','6','|')},
{Keys.D7, new CharPair('è','7','`')},
{Keys.D8, new CharPair('_','8','\\')},
{Keys.D9, new CharPair('ç','9','^')},
{Keys.D0, new CharPair('à','0','@')},
{Keys.OemMinus, new CharPair(')','°',']')},
{Keys.OemPlus, new CharPair('=','+','}')},
{Keys.Q, new CharPair('a','A')},
{Keys.W, new CharPair('z','Z')},
{Keys.E, new CharPair('e','E')},
{Keys.R, new CharPair('r','R')},
{Keys.T, new CharPair('t','T')},
{Keys.Y, new CharPair('y','Y')},
{Keys.U, new CharPair('u','U')},
{Keys.I, new CharPair('i','i')},
{Keys.O, new CharPair('o','O')},
{Keys.P, new CharPair('p','P')},
{Keys.OemOpenBrackets, new CharPair('^','"')},
{Keys.OemCloseBrackets, new CharPair('$','£','ø')},
{Keys.A, new CharPair('q','Q')},
{Keys.S, new CharPair('s','S')},
{Keys.D, new CharPair('d','D')},
{Keys.F, new CharPair('f','F')},
{Keys.G, new CharPair('g','G')},
{Keys.H, new CharPair('h','H')},
{Keys.J, new CharPair('j','J')},
{Keys.K, new CharPair('k','K')},
{Keys.L, new CharPair('l','L')},
{Keys.OemSemicolon, new CharPair('m','M')},
{Keys.OemQuotes, new CharPair('ù','%')},
{Keys.OemPipe, new CharPair('*','µ')},
{Keys.Z, new CharPair('w','W')},
{Keys.X, new CharPair('x','X')},
{Keys.C, new CharPair('c','C')},
{Keys.V, new CharPair('v','V')},
{Keys.B, new CharPair('b','B')},
{Keys.N, new CharPair('n','N')},
{Keys.M, new CharPair(',','?')},
{Keys.OemComma, new CharPair(';','.')},
{Keys.OemPeriod, new CharPair(':','/')},
{Keys.OemQuestion, new CharPair('!','§')},
{Keys.NumPad1, new CharPair('1')},
{Keys.NumPad2, new CharPair('2')},
{Keys.NumPad3, new CharPair('3')},
{Keys.NumPad4, new CharPair('4')},
{Keys.NumPad5, new CharPair('5')},
{Keys.NumPad6, new CharPair('6')},
{Keys.NumPad7, new CharPair('7')},
{Keys.NumPad8, new CharPair('8')},
{Keys.NumPad9, new CharPair('9')},
{Keys.NumPad0, new CharPair('0')},
{Keys.Add, new CharPair('+')},
{Keys.Divide, new CharPair('/')},
{Keys.Multiply, new CharPair('*')},
{Keys.Subtract, new CharPair('-')},
{Keys.Decimal, new CharPair('.')},
{Keys.Space, new CharPair(' ')}
}
};
class CharPair
{
public CharPair(char normalChar, Nullable<char> shiftChar = null, Nullable<char> altChar = null)
{
NormalChar = normalChar;
ShiftChar = shiftChar;
AltChar = altChar;
}
public char NormalChar;
public Nullable<char> ShiftChar;
public Nullable<char> AltChar;
}
public static bool KeyToChar(Keys key, bool shitKeyPressed, out Nullable<char> character, Layout layout = Layout.QWERTY, bool altKeyPressed = false)
{
bool result = false;
character = null;
CharPair charPair;
if (Data[(int)layout].TryGetValue(key, out charPair))
{
if (shitKeyPressed)
{
if (!altKeyPressed)
{
if (charPair.ShiftChar.HasValue)
{
character = charPair.ShiftChar.Value;
result = true;
}
}
}
else
{
if (altKeyPressed)
{
if (charPair.AltChar.HasValue)
{
character = charPair.AltChar.Value;
result = true;
}
}
else
{
character = charPair.NormalChar;
result = true;
}
}
}
return result;
}
}
}