mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
215 lines
5.0 KiB
C#
215 lines
5.0 KiB
C#
using System;
|
|
using System.Collections.Frozen;
|
|
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 FrozenDictionary<Button, Keyboard.Key> _mouseKeyMap = new Dictionary<Button, Keyboard.Key>()
|
|
{
|
|
{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},
|
|
}.ToFrozenDictionary();
|
|
|
|
}
|
|
|
|
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,
|
|
CapsLock,
|
|
}
|
|
|
|
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 MACOS
|
|
if (key == Key.Alt)
|
|
{
|
|
locId += "-mac";
|
|
}
|
|
#endif
|
|
|
|
if (loc.TryGetString(locId, out var name))
|
|
return name;
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|