Files
RobustToolbox/Robust.Client/Input/InputDevices.cs
2023-08-13 22:15:18 +10:00

206 lines
4.8 KiB
C#

using System;
using System.Collections.Generic;
using Robust.Shared.Localization;
namespace Robust.Client.Input
{
public static class Mouse
{
/// <summary>
/// Represents one of three mouse buttons.
/// </summary>
public enum Button : byte
{
Left = 1,
Middle = 2,
Right = 3,
Button4,
Button5,
Button6,
Button7,
Button8,
Button9,
LastButton,
}
public static Keyboard.Key MouseButtonToKey(Button button)
{
return _mouseKeyMap[button];
}
private static readonly Dictionary<Button, Keyboard.Key> _mouseKeyMap = new()
{
{Button.Left, Keyboard.Key.MouseLeft},
{Button.Middle, Keyboard.Key.MouseMiddle},
{Button.Right, Keyboard.Key.MouseRight},
{Button.Button4, Keyboard.Key.MouseButton4},
{Button.Button5, Keyboard.Key.MouseButton5},
{Button.Button6, Keyboard.Key.MouseButton6},
{Button.Button7, Keyboard.Key.MouseButton7},
{Button.Button8, Keyboard.Key.MouseButton8},
{Button.Button9, Keyboard.Key.MouseButton9},
{Button.LastButton, Keyboard.Key.Unknown},
};
}
public static class Keyboard
{
/// <summary>
/// Represents a key on the keyboard.
/// </summary>
// This enum HAS to be a byte for the input system bitflag fuckery to work.
public enum Key : byte
{
Unknown = 0,
MouseLeft,
MouseRight,
MouseMiddle,
MouseButton4,
MouseButton5,
MouseButton6,
MouseButton7,
MouseButton8,
MouseButton9,
A,
B,
C,
D,
E,
F,
G,
H,
I,
J,
K,
L,
M,
N,
O,
P,
Q,
R,
S,
T,
U,
V,
W,
X,
Y,
Z,
Num0,
Num1,
Num2,
Num3,
Num4,
Num5,
Num6,
Num7,
Num8,
Num9,
NumpadNum0,
NumpadNum1,
NumpadNum2,
NumpadNum3,
NumpadNum4,
NumpadNum5,
NumpadNum6,
NumpadNum7,
NumpadNum8,
NumpadNum9,
Escape,
Control,
Shift,
Alt,
LSystem,
RSystem,
Menu,
LBracket,
RBracket,
SemiColon,
Comma,
Period,
Apostrophe,
Slash,
BackSlash,
Tilde,
Equal,
Space,
Return,
NumpadEnter,
BackSpace,
Tab,
PageUp,
PageDown,
End,
Home,
Insert,
Delete,
Minus,
NumpadAdd,
NumpadSubtract,
NumpadDivide,
NumpadMultiply,
NumpadDecimal,
Left,
Right,
Up,
Down,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
Pause,
World1,
}
public static bool IsMouseKey(this Key key)
{
return key >= Key.MouseLeft && key <= Key.MouseButton9;
}
/// <summary>
/// Gets a "nice" version of special unprintable keys such as <see cref="Key.Escape"/>.
/// </summary>
/// <returns><see langword="null"/> if there is no nice version of this special key.</returns>
internal static string? GetSpecialKeyName(Key key, ILocalizationManager loc)
{
var locId = $"input-key-{key}";
if (key == Key.LSystem || key == Key.RSystem)
{
if (OperatingSystem.IsWindows())
locId += "-win";
else if (OperatingSystem.IsMacOS())
locId += "-mac";
else
locId += "-linux";
}
if (loc.TryGetString(locId, out var name))
return name;
return null;
}
}
}