274 lines
11 KiB
C#
274 lines
11 KiB
C#
|
using ANX.Framework;
|
|||
|
using ANX.Framework.Input;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using Input = OpenTK.Input;
|
|||
|
|
|||
|
namespace ANX.InputDevices.OpenTK
|
|||
|
{
|
|||
|
static class Extensions
|
|||
|
{
|
|||
|
#region GamePad
|
|||
|
public static GamePadState ToAnx(this Input.GamePadState state)
|
|||
|
{
|
|||
|
return new GamePadState(state.ThumbSticks.ToAnx(), state.Triggers.ToAnx(), state.Buttons.ToAnx(), state.DPad.ToAnx())
|
|||
|
{
|
|||
|
IsConnected = state.IsConnected,
|
|||
|
PacketNumber = state.PacketNumber,
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
public static GamePadThumbSticks ToAnx(this Input.GamePadThumbSticks sticks)
|
|||
|
{
|
|||
|
return new GamePadThumbSticks(sticks.Left.ToAnx(), sticks.Right.ToAnx());
|
|||
|
}
|
|||
|
|
|||
|
public static GamePadTriggers ToAnx(this Input.GamePadTriggers triggers)
|
|||
|
{
|
|||
|
return new GamePadTriggers(triggers.Left, triggers.Right);
|
|||
|
}
|
|||
|
|
|||
|
public static GamePadDPad ToAnx(this Input.GamePadDPad dpad)
|
|||
|
{
|
|||
|
return new GamePadDPad(dpad.Up.ToAnx(), dpad.Down.ToAnx(), dpad.Left.ToAnx(), dpad.Right.ToAnx());
|
|||
|
}
|
|||
|
|
|||
|
public static GamePadButtons ToAnx(this Input.GamePadButtons buttons)
|
|||
|
{
|
|||
|
return new GamePadButtons(buttons.ToButtons());
|
|||
|
}
|
|||
|
|
|||
|
public static Buttons ToButtons(this Input.GamePadButtons buttons)
|
|||
|
{
|
|||
|
Buttons anxButtons = default(Buttons);
|
|||
|
if (buttons.A == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.A;
|
|||
|
|
|||
|
if (buttons.B == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.B;
|
|||
|
|
|||
|
if (buttons.Back == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.Back;
|
|||
|
|
|||
|
if (buttons.BigButton == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.BigButton;
|
|||
|
|
|||
|
if (buttons.LeftShoulder == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.LeftShoulder;
|
|||
|
|
|||
|
if (buttons.LeftStick == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.LeftStick;
|
|||
|
|
|||
|
if (buttons.RightShoulder == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.RightShoulder;
|
|||
|
|
|||
|
if (buttons.RightStick == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.RightStick;
|
|||
|
|
|||
|
if (buttons.Start == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.Start;
|
|||
|
|
|||
|
if (buttons.X == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.X;
|
|||
|
|
|||
|
if (buttons.Y == Input.ButtonState.Pressed)
|
|||
|
anxButtons |= Buttons.Y;
|
|||
|
|
|||
|
return anxButtons;
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
#region Keyboard
|
|||
|
|
|||
|
private static Dictionary<Input.Key, Keys> keyMap = null;
|
|||
|
|
|||
|
private static void initKeyMap()
|
|||
|
{
|
|||
|
if (keyMap != null)
|
|||
|
return;
|
|||
|
|
|||
|
keyMap = new Dictionary<Input.Key, Keys>();
|
|||
|
keyMap[Input.Key.A] = Keys.A;
|
|||
|
keyMap[Input.Key.AltLeft] = Keys.LeftAlt;
|
|||
|
keyMap[Input.Key.AltRight] = Keys.RightAlt;
|
|||
|
keyMap[Input.Key.B] = Keys.B;
|
|||
|
keyMap[Input.Key.Back] = Keys.Back;
|
|||
|
keyMap[Input.Key.BackSlash] = Keys.OemBackslash;
|
|||
|
//keyMap[Input.Key.BackSpace] = Keys.Back;
|
|||
|
keyMap[Input.Key.BracketLeft] = Keys.OemOpenBrackets;
|
|||
|
keyMap[Input.Key.BracketRight] = Keys.OemCloseBrackets;
|
|||
|
keyMap[Input.Key.C] = Keys.C;
|
|||
|
keyMap[Input.Key.CapsLock] = Keys.CapsLock;
|
|||
|
keyMap[Input.Key.Clear] = Keys.OemClear;
|
|||
|
keyMap[Input.Key.Comma] = Keys.OemComma;
|
|||
|
keyMap[Input.Key.ControlLeft] = Keys.LeftControl;
|
|||
|
keyMap[Input.Key.ControlRight] = Keys.RightControl;
|
|||
|
keyMap[Input.Key.D] = Keys.D;
|
|||
|
keyMap[Input.Key.Delete] = Keys.Delete;
|
|||
|
keyMap[Input.Key.Down] = Keys.Down;
|
|||
|
keyMap[Input.Key.E] = Keys.E;
|
|||
|
keyMap[Input.Key.End] = Keys.End;
|
|||
|
keyMap[Input.Key.Enter] = Keys.Enter;
|
|||
|
keyMap[Input.Key.Escape] = Keys.Escape;
|
|||
|
keyMap[Input.Key.F] = Keys.F;
|
|||
|
keyMap[Input.Key.F1] = Keys.F1;
|
|||
|
keyMap[Input.Key.F10] = Keys.F10;
|
|||
|
keyMap[Input.Key.F11] = Keys.F11;
|
|||
|
keyMap[Input.Key.F12] = Keys.F12;
|
|||
|
keyMap[Input.Key.F13] = Keys.F13;
|
|||
|
keyMap[Input.Key.F14] = Keys.F14;
|
|||
|
keyMap[Input.Key.F15] = Keys.F15;
|
|||
|
keyMap[Input.Key.F16] = Keys.F16;
|
|||
|
keyMap[Input.Key.F17] = Keys.F17;
|
|||
|
keyMap[Input.Key.F18] = Keys.F18;
|
|||
|
keyMap[Input.Key.F19] = Keys.F19;
|
|||
|
keyMap[Input.Key.F2] = Keys.F2;
|
|||
|
keyMap[Input.Key.F20] = Keys.F20;
|
|||
|
keyMap[Input.Key.F21] = Keys.F21;
|
|||
|
keyMap[Input.Key.F22] = Keys.F22;
|
|||
|
keyMap[Input.Key.F23] = Keys.F23;
|
|||
|
keyMap[Input.Key.F24] = Keys.F24;
|
|||
|
//keyMap[Input.Key.F25] = Keys.;
|
|||
|
//... F35
|
|||
|
keyMap[Input.Key.F3] = Keys.F3;
|
|||
|
keyMap[Input.Key.F4] = Keys.F4;
|
|||
|
keyMap[Input.Key.F5] = Keys.F5;
|
|||
|
keyMap[Input.Key.F6] = Keys.F6;
|
|||
|
keyMap[Input.Key.F7] = Keys.F7;
|
|||
|
keyMap[Input.Key.F8] = Keys.F8;
|
|||
|
keyMap[Input.Key.F9] = Keys.F9;
|
|||
|
keyMap[Input.Key.G] = Keys.G;
|
|||
|
keyMap[Input.Key.Grave] = Keys.OemTilde;
|
|||
|
keyMap[Input.Key.H] = Keys.H;
|
|||
|
keyMap[Input.Key.Home] = Keys.Home;
|
|||
|
keyMap[Input.Key.I] = Keys.I;
|
|||
|
keyMap[Input.Key.Insert] = Keys.Insert;
|
|||
|
keyMap[Input.Key.J] = Keys.J;
|
|||
|
keyMap[Input.Key.K] = Keys.K;
|
|||
|
keyMap[Input.Key.Keypad0] = Keys.NumPad0;
|
|||
|
keyMap[Input.Key.Keypad1] = Keys.NumPad1;
|
|||
|
keyMap[Input.Key.Keypad2] = Keys.NumPad2;
|
|||
|
keyMap[Input.Key.Keypad3] = Keys.NumPad3;
|
|||
|
keyMap[Input.Key.Keypad4] = Keys.NumPad4;
|
|||
|
keyMap[Input.Key.Keypad5] = Keys.NumPad5;
|
|||
|
keyMap[Input.Key.Keypad6] = Keys.NumPad6;
|
|||
|
keyMap[Input.Key.Keypad7] = Keys.NumPad7;
|
|||
|
keyMap[Input.Key.Keypad8] = Keys.NumPad8;
|
|||
|
keyMap[Input.Key.Keypad9] = Keys.NumPad9;
|
|||
|
keyMap[Input.Key.KeypadAdd] = Keys.Add;
|
|||
|
keyMap[Input.Key.KeypadDecimal] = Keys.Decimal;
|
|||
|
keyMap[Input.Key.KeypadDivide] = Keys.Divide;
|
|||
|
//keyMap[Input.Key.KeypadEnter] = Keys.Enter;
|
|||
|
keyMap[Input.Key.KeypadMinus] = Keys.Subtract;
|
|||
|
keyMap[Input.Key.KeypadMultiply] = Keys.Multiply;
|
|||
|
keyMap[Input.Key.KeypadPeriod] = Keys.OemPeriod;
|
|||
|
keyMap[Input.Key.KeypadPlus] = Keys.Add;
|
|||
|
keyMap[Input.Key.KeypadSubtract] = Keys.Subtract;
|
|||
|
keyMap[Input.Key.L] = Keys.L;
|
|||
|
keyMap[Input.Key.LAlt] = Keys.LeftAlt;
|
|||
|
keyMap[Input.Key.LBracket] = Keys.OemOpenBrackets;
|
|||
|
keyMap[Input.Key.LControl] = Keys.LeftControl;
|
|||
|
keyMap[Input.Key.Left] = Keys.Left;
|
|||
|
keyMap[Input.Key.LShift] = Keys.LeftShift;
|
|||
|
keyMap[Input.Key.LWin] = Keys.LeftWindows;
|
|||
|
keyMap[Input.Key.M] = Keys.M;
|
|||
|
//keyMap[Input.Key.Menu] = Keys.;
|
|||
|
keyMap[Input.Key.Minus] = Keys.OemMinus;
|
|||
|
keyMap[Input.Key.N] = Keys.N;
|
|||
|
//keyMap.Add(Input.Key.NonUSBackSlash);
|
|||
|
keyMap[Input.Key.Number0] = Keys.D0;
|
|||
|
keyMap[Input.Key.Number1] = Keys.D1;
|
|||
|
keyMap[Input.Key.Number2] = Keys.D2;
|
|||
|
keyMap[Input.Key.Number3] = Keys.D3;
|
|||
|
keyMap[Input.Key.Number4] = Keys.D4;
|
|||
|
keyMap[Input.Key.Number5] = Keys.D5;
|
|||
|
keyMap[Input.Key.Number6] = Keys.D6;
|
|||
|
keyMap[Input.Key.Number7] = Keys.D7;
|
|||
|
keyMap[Input.Key.Number8] = Keys.D8;
|
|||
|
keyMap[Input.Key.Number9] = Keys.D9;
|
|||
|
keyMap[Input.Key.NumLock] = Keys.NumLock;
|
|||
|
keyMap[Input.Key.O] = Keys.O;
|
|||
|
keyMap[Input.Key.P] = Keys.P;
|
|||
|
keyMap[Input.Key.PageDown] = Keys.PageDown;
|
|||
|
keyMap[Input.Key.PageUp] = Keys.PageUp;
|
|||
|
keyMap[Input.Key.Pause] = Keys.Pause;
|
|||
|
keyMap[Input.Key.Period] = Keys.OemPeriod;
|
|||
|
keyMap[Input.Key.Plus] = Keys.OemPlus;
|
|||
|
keyMap[Input.Key.PrintScreen] = Keys.PrintScreen;
|
|||
|
keyMap[Input.Key.Q] = Keys.Q;
|
|||
|
keyMap[Input.Key.Quote] = Keys.OemQuotes;
|
|||
|
keyMap[Input.Key.R] = Keys.R;
|
|||
|
keyMap[Input.Key.RAlt] = Keys.RightAlt;
|
|||
|
keyMap[Input.Key.RBracket] = Keys.OemCloseBrackets;
|
|||
|
keyMap[Input.Key.RControl] = Keys.RightControl;
|
|||
|
keyMap[Input.Key.Right] = Keys.Right;
|
|||
|
keyMap[Input.Key.RShift] = Keys.RightShift;
|
|||
|
keyMap[Input.Key.RWin] = Keys.RightWindows;
|
|||
|
keyMap[Input.Key.S] = Keys.S;
|
|||
|
keyMap[Input.Key.ScrollLock] = Keys.Scroll;
|
|||
|
keyMap[Input.Key.Semicolon] = Keys.OemSemicolon;
|
|||
|
keyMap[Input.Key.ShiftLeft] = Keys.LeftShift;
|
|||
|
keyMap[Input.Key.ShiftRight] = Keys.RightShift;
|
|||
|
//keyMap[Input.Key.Slash] = Keys.;
|
|||
|
keyMap[Input.Key.Sleep] = Keys.Sleep;
|
|||
|
keyMap[Input.Key.Space] = Keys.Space;
|
|||
|
keyMap[Input.Key.T] = Keys.T;
|
|||
|
keyMap[Input.Key.Tab] = Keys.Tab;
|
|||
|
keyMap[Input.Key.Tilde] = Keys.OemTilde;
|
|||
|
keyMap[Input.Key.U] = Keys.U;
|
|||
|
keyMap[Input.Key.Up] = Keys.Up;
|
|||
|
keyMap[Input.Key.V] = Keys.V;
|
|||
|
keyMap[Input.Key.W] = Keys.W;
|
|||
|
keyMap[Input.Key.WinLeft] = Keys.LeftWindows;
|
|||
|
keyMap[Input.Key.WinRight] = Keys.RightWindows;
|
|||
|
keyMap[Input.Key.X] = Keys.X;
|
|||
|
keyMap[Input.Key.Y] = Keys.Y;
|
|||
|
keyMap[Input.Key.Z] = Keys.Z;
|
|||
|
//TODO: Many XNA buttons are missing
|
|||
|
//like media and kanji
|
|||
|
}
|
|||
|
|
|||
|
public static Keys ToAnx(this Input.Key key)
|
|||
|
{
|
|||
|
initKeyMap();
|
|||
|
|
|||
|
Keys keys;
|
|||
|
if (keyMap.TryGetValue(key, out keys))
|
|||
|
return keys;
|
|||
|
else
|
|||
|
{
|
|||
|
Console.Error.WriteLine("Unknown key: " + key.ToString());
|
|||
|
return Keys.None;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static KeyboardState ToAnx(this Input.KeyboardState state)
|
|||
|
{
|
|||
|
List<Keys> downKeys = new List<Keys>();
|
|||
|
|
|||
|
foreach (Input.Key key in Enum.GetValues(typeof(Input.Key)))
|
|||
|
{
|
|||
|
if (state.IsKeyDown(key))
|
|||
|
downKeys.Add(key.ToAnx());
|
|||
|
}
|
|||
|
|
|||
|
return new KeyboardState(downKeys.ToArray());
|
|||
|
}
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
public static ButtonState ToAnx(this Input.ButtonState state)
|
|||
|
{
|
|||
|
return (ButtonState)state;
|
|||
|
}
|
|||
|
|
|||
|
public static Vector2 ToAnx(this global::OpenTK.Vector2 vector)
|
|||
|
{
|
|||
|
return new Vector2(vector.X, vector.Y);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|