using System; using System.Collections.Frozen; using System.Collections.Generic; using Robust.Shared.Localization; namespace Robust.Client.Input { public static class Mouse { /// /// Represents one of three mouse buttons. /// 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 _mouseKeyMap = new Dictionary() { {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 { /// /// Represents a key on the keyboard. /// // 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, ScrollLock, Help, Stop, Again, Props, Undo, Cut, Copy, Open, Paste, Find, } public static bool IsMouseKey(this Key key) { return key >= Key.MouseLeft && key <= Key.MouseButton9; } /// /// Gets a "nice" version of special unprintable keys such as . /// /// if there is no nice version of this special key. 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; } } }