diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs index 112e0c1c..27d9e50a 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs @@ -232,7 +232,7 @@ namespace AxibugEmuOnline.Client.Settings else return totalFloat / totalControl; } - public class MapSetting : Dictionary<T, List<InputControl_D>> { } + public class MapSetting : Dictionary<T, List<InputControl_C>> { } public class BindingPage { @@ -277,7 +277,7 @@ namespace AxibugEmuOnline.Client.Settings m_mapSetting.Remove(device); } - public void SetBinding(T emuBtn, InputControl_D key, int settingSlot) + public void SetBinding(T emuBtn, InputControl_C key, int settingSlot) { var device = key.Device; m_registedDevices.TryGetValue(device.GetType(), out var inputDevice); @@ -287,7 +287,7 @@ namespace AxibugEmuOnline.Client.Settings var setting = m_mapSetting[inputDevice]; if (!setting.TryGetValue(emuBtn, out var settingList)) { - settingList = new List<InputControl_D>(); + settingList = new List<InputControl_C>(); setting[emuBtn] = settingList; } @@ -297,7 +297,7 @@ namespace AxibugEmuOnline.Client.Settings settingList[settingSlot] = key; } - public InputControl_D GetBinding(T emuBtn, InputDevice_D device, int settingSlot) + public InputControl_C GetBinding(T emuBtn, InputDevice_D device, int settingSlot) { m_mapSetting.TryGetValue(device, out var mapSetting); if (mapSetting == null) return null; @@ -308,8 +308,8 @@ namespace AxibugEmuOnline.Client.Settings return settingList[settingSlot]; } - private List<InputControl_D> m_caches = new List<InputControl_D>(); - public IEnumerable<InputControl_D> GetBinding(T emuBtn) + private List<InputControl_C> m_caches = new List<InputControl_C>(); + public IEnumerable<InputControl_C> GetBinding(T emuBtn) { m_caches.Clear(); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/GamePad_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/GamePad_D.cs index 6bb15a6d..9792afa8 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/GamePad_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/GamePad_D.cs @@ -1,34 +1,29 @@ -using System.Collections.Generic; - -namespace AxibugEmuOnline.Client.InputDevices +namespace AxibugEmuOnline.Client.InputDevices { /// <summary> /// 通用游戏控制器 /// </summary> public class GamePad_D : InputDevice_D { - public Button_C Up { get; private set; } - public Button_C Down { get; private set; } - public Button_C Left { get; private set; } - public Button_C Right { get; private set; } - public Button_C Option { get; private set; } - public Button_C Start { get; private set; } - public Button_C North { get; private set; } - public Button_C South { get; private set; } - public Button_C West { get; private set; } - public Button_C East { get; private set; } - public Button_C LeftShoulder { get; private set; } - public Button_C RightShoulder { get; private set; } - public Button_C LeftTrigger { get; private set; } - public Button_C RightTrigger { get; private set; } + public Button_C Up; + public Button_C Down; + public Button_C Left; + public Button_C Right; + public Button_C Option; + public Button_C Start; + public Button_C North; + public Button_C South; + public Button_C West; + public Button_C East; + public Button_C LeftShoulder; + public Button_C RightShoulder; + public Button_C LeftTrigger; + public Button_C RightTrigger; + public Button_C LeftStickPress; + public Button_C RightStickPress; + public Stick_C LeftStick; + public Stick_C RightStick; public GamePad_D(InputResolver resolver) : base(resolver) { } - - protected override List<InputControl_D> DefineControls() - { - throw new System.NotImplementedException(); - } - - } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button_C.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button_C.cs index 521d34ec..3eaaa7bd 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button_C.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button_C.cs @@ -3,15 +3,10 @@ /// <summary> /// 按键类型的输入控件 /// </summary> - public class Button_C : InputControl_D + public class Button_C : InputControl_C { - string m_controlName; - - public Button_C(InputDevice_D device, string controlName) : base(device) + public Button_C(InputDevice_D device, string controlName) : base(device, controlName) { - m_controlName = controlName; } - - public override string ControlName => m_controlName; } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_C.cs similarity index 56% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_D.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_C.cs index bcd70e18..ad1a5059 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_C.cs @@ -1,11 +1,14 @@ -using UnityEngine; +using System; +using System.Collections.Generic; +using System.Reflection; +using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { /// <summary> /// 输入设备的抽象控件接口 /// </summary> - public abstract class InputControl_D + public abstract class InputControl_C { /// <summary> 控件所属设备 </summary> public InputDevice_D Device { get; internal set; } @@ -30,7 +33,6 @@ namespace AxibugEmuOnline.Client.InputDevices UpdateReleaseStartState(); OnUpdate(); } - private void UpdateReleaseStartState() { var oldPerforming = m_performingLastFrame; @@ -48,12 +50,42 @@ namespace AxibugEmuOnline.Client.InputDevices protected virtual void OnUpdate() { } + public InputControl_C Parent { get; private set; } /// <summary> 控件名,这个控件名称必须是唯一的 </summary> - public abstract string ControlName { get; } - - internal InputControl_D(InputDevice_D device) + public string ControlName { get; private set; } + protected Dictionary<string, InputControl_C> m_controlMapper = new Dictionary<string, InputControl_C>(); + internal InputControl_C(InputDevice_D device, string controlName) { Device = device; + ControlName = controlName; + + DefineControls(); + } + + private void DefineControls() + { + foreach (var field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)) + { + if (!typeof(InputControl_C).IsAssignableFrom(field.FieldType)) continue; + + var controlIns = Activator.CreateInstance(field.FieldType, this, field.Name) as InputControl_C; + controlIns.Parent = this; + field.SetValue(this, controlIns); + + m_controlMapper[field.Name] = controlIns; + } + } + + public override string ToString() + { + if (Parent != null) + { + return $"{Parent}/{ControlName}"; + } + else + { + return $"{Device}/{ControlName}"; + } } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_D.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_C.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_D.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl_C.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick_C.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick_C.cs index 225da4c3..26cdf723 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick_C.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick_C.cs @@ -5,24 +5,15 @@ namespace AxibugEmuOnline.Client.InputDevices /// <summary> /// 摇杆类型的输入控件,支持的返回值为Vector2 /// </summary> - public class Stick_C : InputControl_D + public class Stick_C : InputControl_C { - string m_controlName; - public override string ControlName => m_controlName; + public VirtualButton UP; + public VirtualButton Down; + public VirtualButton Left; + public VirtualButton Right; - public VirtualButton UP { get; private set; } - public VirtualButton Down { get; private set; } - public VirtualButton Left { get; private set; } - public VirtualButton Right { get; private set; } - - public Stick_C(InputDevice_D device, string controlName) : base(device) + public Stick_C(InputDevice_D device, string controlName) : base(device, controlName) { - m_controlName = controlName; - - UP = new VirtualButton(device); - Down = new VirtualButton(device); - Left = new VirtualButton(device); - Right = new VirtualButton(device); } protected override void OnUpdate() @@ -43,11 +34,11 @@ namespace AxibugEmuOnline.Client.InputDevices } - public class VirtualButton : InputControl_D + public class VirtualButton : InputControl_C { internal bool m_performing; - public VirtualButton(InputDevice_D device) : base(device) { } + public VirtualButton(InputDevice_D device, string controlName) : base(device, controlName) { } public override bool Performing { @@ -63,8 +54,6 @@ namespace AxibugEmuOnline.Client.InputDevices { return Performing ? 1 : 0; } - - public override string ControlName => "VirtualStickButton"; } } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs index 402df819..b7d82bea 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice_D.cs @@ -1,4 +1,6 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Reflection; namespace AxibugEmuOnline.Client.InputDevices { @@ -13,15 +15,24 @@ namespace AxibugEmuOnline.Client.InputDevices /// <summary> 获得输入解决器 </summary> internal InputResolver Resolver => m_resolver; - protected Dictionary<string, InputControl_D> m_controlMapper = new Dictionary<string, InputControl_D>(); + protected Dictionary<string, InputControl_C> m_controlMapper = new Dictionary<string, InputControl_C>(); protected InputResolver m_resolver; public InputDevice_D(InputResolver resolver) { m_resolver = resolver; + DefineControls(); + } - foreach (var control in DefineControls()) + private void DefineControls() + { + foreach (var field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public)) { - m_controlMapper.Add(control.ControlName, control); + if (!typeof(InputControl_C).IsAssignableFrom(field.FieldType)) continue; + + var controlIns = Activator.CreateInstance(field.FieldType, this, field.Name) as InputControl_C; + field.SetValue(this, controlIns); + + m_controlMapper[field.Name] = controlIns; } } @@ -39,18 +50,9 @@ namespace AxibugEmuOnline.Client.InputDevices } } - /// <summary> 用于列出这个输入设备的所有输入控件实例 </summary> - /// <returns></returns> - protected abstract List<InputControl_D> DefineControls(); - - /// <summary> 通过控件名称,找到对应的控件 </summary> - /// <param name="keyName"></param> - /// <returns></returns> - public InputControl_D FindControlByName(string controlName) + public override string ToString() { - m_controlMapper.TryGetValue(controlName, out var key); - return key; + return Resolver.GetDeviceName(this); } - } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs index 34d41b59..35a28897 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard_D.cs @@ -1,190 +1,116 @@ using System.Collections.Generic; -using System.Linq; -using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { /// <summary> /// 通用键盘设备 /// </summary> - public partial class Keyboard_D : InputDevice_D + public class Keyboard_D : InputDevice_D { - Dictionary<KeyCode, KeyboardKey> m_keyControllerMap = new Dictionary<KeyCode, KeyboardKey>(); + public Button_C A; + public Button_C B; + public Button_C C; + public Button_C D; + public Button_C E; + public Button_C F; + public Button_C G; + public Button_C H; + public Button_C I; + public Button_C J; + public Button_C K; + public Button_C L; + public Button_C M; + public Button_C N; + public Button_C O; + public Button_C P; + public Button_C Q; + public Button_C R; + public Button_C S; + public Button_C T; + public Button_C U; + public Button_C V; + public Button_C W; + public Button_C X; + public Button_C Y; + public Button_C Z; + public Button_C Alpha0; + public Button_C Alpha1; + public Button_C Alpha2; + public Button_C Alpha3; + public Button_C Alpha4; + public Button_C Alpha5; + public Button_C Alpha6; + public Button_C Alpha7; + public Button_C Alpha8; + public Button_C Alpha9; + public Button_C F1; + public Button_C F2; + public Button_C F3; + public Button_C F4; + public Button_C F5; + public Button_C F6; + public Button_C F7; + public Button_C F8; + public Button_C F9; + public Button_C F10; + public Button_C F11; + public Button_C F12; + public Button_C UpArrow; + public Button_C DownArrow; + public Button_C LeftArrow; + public Button_C RightArrow; + public Button_C Space; + public Button_C Return; + public Button_C Escape; + public Button_C Tab; + public Button_C Backspace; + public Button_C CapsLock; + public Button_C LeftShift; + public Button_C RightShift; + public Button_C LeftControl; + public Button_C RightControl; + public Button_C LeftAlt; + public Button_C RightAlt; + public Button_C LeftCommand; + public Button_C RightCommand; + public Button_C Comma; + public Button_C Period; + public Button_C Slash; + public Button_C BackQuote; + public Button_C Quote; + public Button_C Semicolon; + public Button_C LeftBracket; + public Button_C RightBracket; + public Button_C Backslash; + public Button_C Minus; + public Button_C Equals_k; + public Button_C Keypad0; + public Button_C Keypad1; + public Button_C Keypad2; + public Button_C Keypad3; + public Button_C Keypad4; + public Button_C Keypad5; + public Button_C Keypad6; + public Button_C Keypad7; + public Button_C Keypad8; + public Button_C Keypad9; + public Button_C KeypadPeriod; + public Button_C KeypadDivide; + public Button_C KeypadMultiply; + public Button_C KeypadMinus; + public Button_C KeypadPlus; + public Button_C KeypadEnter; + public Button_C Numlock; + public Button_C Print; + public Button_C Insert; + public Button_C Delete; + public Button_C Home; + public Button_C End; + public Button_C PageUp; + public Button_C PageDown; + public Button_C Pause; + public Button_C ScrollLock; public Keyboard_D(InputResolver resolver) : base(resolver) { } - - protected override List<InputControl_D> DefineControls() - { - var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc, this) as InputControl_D).ToList(); - foreach (KeyboardKey key in keys) - { - m_keyControllerMap.Add(key.m_keycode, key); - } - return keys; - } - - public class KeyboardKey : Button_C - { - internal KeyCode m_keycode; - - internal KeyboardKey(KeyCode listenKey, Keyboard_D keyboard) - : base(keyboard, listenKey.ToString()) - { - m_keycode = listenKey; - } - } } - - #region HardCodeForKeyboard - public partial class Keyboard_D : InputDevice_D - { - static readonly List<KeyCode> s_keyboardKeys = new List<KeyCode> - { - // 字母键 A-Z - KeyCode.A, KeyCode.B, KeyCode.C, KeyCode.D, KeyCode.E, KeyCode.F, KeyCode.G, - KeyCode.H, KeyCode.I, KeyCode.J, KeyCode.K, KeyCode.L, KeyCode.M, KeyCode.N, - KeyCode.O, KeyCode.P, KeyCode.Q, KeyCode.R, KeyCode.S, KeyCode.T, KeyCode.U, - KeyCode.V, KeyCode.W, KeyCode.X, KeyCode.Y, KeyCode.Z, - - // 数字键 0-9 - KeyCode.Alpha0, KeyCode.Alpha1, KeyCode.Alpha2, KeyCode.Alpha3, KeyCode.Alpha4, - KeyCode.Alpha5, KeyCode.Alpha6, KeyCode.Alpha7, KeyCode.Alpha8, KeyCode.Alpha9, - - // 功能键 F1-F15 - KeyCode.F1, KeyCode.F2, KeyCode.F3, KeyCode.F4, KeyCode.F5, KeyCode.F6, - KeyCode.F7, KeyCode.F8, KeyCode.F9, KeyCode.F10, KeyCode.F11, KeyCode.F12, - - // 方向键 - KeyCode.UpArrow, KeyCode.DownArrow, KeyCode.LeftArrow, KeyCode.RightArrow, - - // 控制键 - KeyCode.Space, KeyCode.Return, KeyCode.Escape, KeyCode.Tab, KeyCode.Backspace, - KeyCode.CapsLock, KeyCode.LeftShift, KeyCode.RightShift, KeyCode.LeftControl, - KeyCode.RightControl, KeyCode.LeftAlt, KeyCode.RightAlt, KeyCode.LeftCommand, - KeyCode.RightCommand, - - // 符号键 - KeyCode.Comma, KeyCode.Period, KeyCode.Slash, KeyCode.BackQuote, KeyCode.Quote, - KeyCode.Semicolon, KeyCode.LeftBracket, KeyCode.RightBracket, KeyCode.Backslash, - KeyCode.Minus, KeyCode.Equals, - - // 小键盘 - KeyCode.Keypad0, KeyCode.Keypad1, KeyCode.Keypad2, KeyCode.Keypad3, KeyCode.Keypad4, - KeyCode.Keypad5, KeyCode.Keypad6, KeyCode.Keypad7, KeyCode.Keypad8, KeyCode.Keypad9, - KeyCode.KeypadPeriod, KeyCode.KeypadDivide, KeyCode.KeypadMultiply, - KeyCode.KeypadMinus, KeyCode.KeypadPlus, KeyCode.KeypadEnter, KeyCode.Numlock, - - // 其他标准键 - KeyCode.Print, KeyCode.Insert, KeyCode.Delete, KeyCode.Home, - KeyCode.End, KeyCode.PageUp, KeyCode.PageDown, KeyCode.Pause, KeyCode.ScrollLock, - }; - - public KeyboardKey A => m_keyControllerMap[KeyCode.A]; - public KeyboardKey B => m_keyControllerMap[KeyCode.B]; - public KeyboardKey C => m_keyControllerMap[KeyCode.C]; - public KeyboardKey D => m_keyControllerMap[KeyCode.D]; - public KeyboardKey E => m_keyControllerMap[KeyCode.E]; - public KeyboardKey F => m_keyControllerMap[KeyCode.F]; - public KeyboardKey G => m_keyControllerMap[KeyCode.G]; - public KeyboardKey H => m_keyControllerMap[KeyCode.H]; - public KeyboardKey I => m_keyControllerMap[KeyCode.I]; - public KeyboardKey J => m_keyControllerMap[KeyCode.J]; - public KeyboardKey K => m_keyControllerMap[KeyCode.K]; - public KeyboardKey L => m_keyControllerMap[KeyCode.L]; - public KeyboardKey M => m_keyControllerMap[KeyCode.M]; - public KeyboardKey N => m_keyControllerMap[KeyCode.N]; - public KeyboardKey O => m_keyControllerMap[KeyCode.O]; - public KeyboardKey P => m_keyControllerMap[KeyCode.P]; - public KeyboardKey Q => m_keyControllerMap[KeyCode.Q]; - public KeyboardKey R => m_keyControllerMap[KeyCode.R]; - public KeyboardKey S => m_keyControllerMap[KeyCode.S]; - public KeyboardKey T => m_keyControllerMap[KeyCode.T]; - public KeyboardKey U => m_keyControllerMap[KeyCode.U]; - public KeyboardKey V => m_keyControllerMap[KeyCode.V]; - public KeyboardKey W => m_keyControllerMap[KeyCode.W]; - public KeyboardKey X => m_keyControllerMap[KeyCode.X]; - public KeyboardKey Y => m_keyControllerMap[KeyCode.Y]; - public KeyboardKey Z => m_keyControllerMap[KeyCode.Z]; - public KeyboardKey Alpha0 => m_keyControllerMap[KeyCode.Alpha0]; - public KeyboardKey Alpha1 => m_keyControllerMap[KeyCode.Alpha1]; - public KeyboardKey Alpha2 => m_keyControllerMap[KeyCode.Alpha2]; - public KeyboardKey Alpha3 => m_keyControllerMap[KeyCode.Alpha3]; - public KeyboardKey Alpha4 => m_keyControllerMap[KeyCode.Alpha4]; - public KeyboardKey Alpha5 => m_keyControllerMap[KeyCode.Alpha5]; - public KeyboardKey Alpha6 => m_keyControllerMap[KeyCode.Alpha6]; - public KeyboardKey Alpha7 => m_keyControllerMap[KeyCode.Alpha7]; - public KeyboardKey Alpha8 => m_keyControllerMap[KeyCode.Alpha8]; - public KeyboardKey Alpha9 => m_keyControllerMap[KeyCode.Alpha9]; - public KeyboardKey F1 => m_keyControllerMap[KeyCode.F1]; - public KeyboardKey F2 => m_keyControllerMap[KeyCode.F2]; - public KeyboardKey F3 => m_keyControllerMap[KeyCode.F3]; - public KeyboardKey F4 => m_keyControllerMap[KeyCode.F4]; - public KeyboardKey F5 => m_keyControllerMap[KeyCode.F5]; - public KeyboardKey F6 => m_keyControllerMap[KeyCode.F6]; - public KeyboardKey F7 => m_keyControllerMap[KeyCode.F7]; - public KeyboardKey F8 => m_keyControllerMap[KeyCode.F8]; - public KeyboardKey F9 => m_keyControllerMap[KeyCode.F9]; - public KeyboardKey F10 => m_keyControllerMap[KeyCode.F10]; - public KeyboardKey F11 => m_keyControllerMap[KeyCode.F11]; - public KeyboardKey F12 => m_keyControllerMap[KeyCode.F12]; - public KeyboardKey F13 => m_keyControllerMap[KeyCode.F13]; - public KeyboardKey F14 => m_keyControllerMap[KeyCode.F14]; - public KeyboardKey F15 => m_keyControllerMap[KeyCode.F15]; - public KeyboardKey UpArrow => m_keyControllerMap[KeyCode.UpArrow]; - public KeyboardKey DownArrow => m_keyControllerMap[KeyCode.DownArrow]; - public KeyboardKey LeftArrow => m_keyControllerMap[KeyCode.LeftArrow]; - public KeyboardKey RightArrow => m_keyControllerMap[KeyCode.RightArrow]; - public KeyboardKey Space => m_keyControllerMap[KeyCode.Space]; - public KeyboardKey Return => m_keyControllerMap[KeyCode.Return]; - public KeyboardKey Escape => m_keyControllerMap[KeyCode.Escape]; - public KeyboardKey Tab => m_keyControllerMap[KeyCode.Tab]; - public KeyboardKey Backspace => m_keyControllerMap[KeyCode.Backspace]; - public KeyboardKey CapsLock => m_keyControllerMap[KeyCode.CapsLock]; - public KeyboardKey LeftShift => m_keyControllerMap[KeyCode.LeftShift]; - public KeyboardKey RightShift => m_keyControllerMap[KeyCode.RightShift]; - public KeyboardKey LeftControl => m_keyControllerMap[KeyCode.LeftControl]; - public KeyboardKey RightControl => m_keyControllerMap[KeyCode.RightControl]; - public KeyboardKey LeftAlt => m_keyControllerMap[KeyCode.LeftAlt]; - public KeyboardKey RightAlt => m_keyControllerMap[KeyCode.RightAlt]; - public KeyboardKey LeftCommand => m_keyControllerMap[KeyCode.LeftCommand]; - public KeyboardKey RightCommand => m_keyControllerMap[KeyCode.RightCommand]; - public KeyboardKey Comma => m_keyControllerMap[KeyCode.Comma]; - public KeyboardKey Period => m_keyControllerMap[KeyCode.Period]; - public KeyboardKey Slash => m_keyControllerMap[KeyCode.Slash]; - public KeyboardKey BackQuote => m_keyControllerMap[KeyCode.BackQuote]; - public KeyboardKey Quote => m_keyControllerMap[KeyCode.Quote]; - public KeyboardKey Semicolon => m_keyControllerMap[KeyCode.Semicolon]; - public KeyboardKey LeftBracket => m_keyControllerMap[KeyCode.LeftBracket]; - public KeyboardKey RightBracket => m_keyControllerMap[KeyCode.RightBracket]; - public KeyboardKey Backslash => m_keyControllerMap[KeyCode.Backslash]; - public KeyboardKey Minus => m_keyControllerMap[KeyCode.Minus]; - public KeyboardKey Equals_k => m_keyControllerMap[KeyCode.Equals]; - public KeyboardKey Keypad0 => m_keyControllerMap[KeyCode.Keypad0]; - public KeyboardKey Keypad1 => m_keyControllerMap[KeyCode.Keypad1]; - public KeyboardKey Keypad2 => m_keyControllerMap[KeyCode.Keypad2]; - public KeyboardKey Keypad3 => m_keyControllerMap[KeyCode.Keypad3]; - public KeyboardKey Keypad4 => m_keyControllerMap[KeyCode.Keypad4]; - public KeyboardKey Keypad5 => m_keyControllerMap[KeyCode.Keypad5]; - public KeyboardKey Keypad6 => m_keyControllerMap[KeyCode.Keypad6]; - public KeyboardKey Keypad7 => m_keyControllerMap[KeyCode.Keypad7]; - public KeyboardKey Keypad8 => m_keyControllerMap[KeyCode.Keypad8]; - public KeyboardKey Keypad9 => m_keyControllerMap[KeyCode.Keypad9]; - public KeyboardKey KeypadPeriod => m_keyControllerMap[KeyCode.KeypadPeriod]; - public KeyboardKey KeypadDivide => m_keyControllerMap[KeyCode.KeypadDivide]; - public KeyboardKey KeypadMultiply => m_keyControllerMap[KeyCode.KeypadMultiply]; - public KeyboardKey KeypadMinus => m_keyControllerMap[KeyCode.KeypadMinus]; - public KeyboardKey KeypadPlus => m_keyControllerMap[KeyCode.KeypadPlus]; - public KeyboardKey KeypadEnter => m_keyControllerMap[KeyCode.KeypadEnter]; - public KeyboardKey Numlock => m_keyControllerMap[KeyCode.Numlock]; - public KeyboardKey Print => m_keyControllerMap[KeyCode.Print]; - public KeyboardKey Insert => m_keyControllerMap[KeyCode.Insert]; - public KeyboardKey Delete => m_keyControllerMap[KeyCode.Delete]; - public KeyboardKey Home => m_keyControllerMap[KeyCode.Home]; - public KeyboardKey End => m_keyControllerMap[KeyCode.End]; - public KeyboardKey PageUp => m_keyControllerMap[KeyCode.PageUp]; - public KeyboardKey PageDown => m_keyControllerMap[KeyCode.PageDown]; - public KeyboardKey Pause => m_keyControllerMap[KeyCode.Pause]; - public KeyboardKey ScrollLock => m_keyControllerMap[KeyCode.ScrollLock]; - } - #endregion } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController_D.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController_D.cs index 4d96be15..85a6e3c3 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController_D.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController_D.cs @@ -1,54 +1,22 @@ -using System.Collections.Generic; - -namespace AxibugEmuOnline.Client.InputDevices +namespace AxibugEmuOnline.Client.InputDevices { public class PSVController_D : InputDevice_D { - /// <summary> × </summary> - public Button_C Cross { get; private set; } - /// <summary> ○ </summary> - public Button_C Circle { get; private set; } - /// <summary> □ </summary> - public Button_C Square { get; private set; } - /// <summary> △ </summary> - public Button_C Triangle { get; private set; } - public Button_C L { get; private set; } - public Button_C R { get; private set; } - public Button_C Select { get; private set; } - public Button_C Start { get; private set; } - public Button_C Up { get; private set; } - public Button_C Right { get; private set; } - public Button_C Down { get; private set; } - public Button_C Left { get; private set; } - public Stick_C LeftStick { get; private set; } - public Stick_C RightStick { get; private set; } + public Button_C Cross; + public Button_C Circle; + public Button_C Square; + public Button_C Triangle; + public Button_C L; + public Button_C R; + public Button_C Select; + public Button_C Start; + public Button_C Up; + public Button_C Right; + public Button_C Down; + public Button_C Left; + public Stick_C LeftStick; + public Stick_C RightStick; public PSVController_D(InputResolver resolver) : base(resolver) { } - - protected override List<InputControl_D> DefineControls() - { - List<InputControl_D> result = new List<InputControl_D>(); - - Cross = new Button_C(this, "X"); - Circle = new Button_C(this, "⭕"); - Square = new Button_C(this, "□"); - Triangle = new Button_C(this, "△"); - - L = new Button_C(this, "L"); - R = new Button_C(this, "R"); - - Select = new Button_C(this, "SELECT"); - Start = new Button_C(this, "START"); - - Up = new Button_C(this, "UP"); - Right = new Button_C(this, "RIGHT"); - Down = new Button_C(this, "DOWN"); - Left = new Button_C(this, "LEFT"); - - LeftStick = new Stick_C(this, nameof(LeftStick)); - RightStick = new Stick_C(this, nameof(RightStick)); - - return result; - } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs index ee448e40..4efbdeb9 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs @@ -56,9 +56,9 @@ namespace AxibugEmuOnline.Client.InputDevices OnDeviceConnected?.Invoke(connectDevice); } - public abstract bool CheckPerforming<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_D; - public abstract Vector2 GetVector2<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_D; - public abstract float GetFloat<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_D; + public abstract bool CheckPerforming<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_C; + public abstract Vector2 GetVector2<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_C; + public abstract float GetFloat<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl_C; /// <summary> /// 获得输入设备的唯一名称 /// </summary> diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs index c8d96634..8144eef9 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs @@ -21,7 +21,13 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem private void AddDevice(InputDevice ipdev) { InputDevice_D newDevice = null; - if (ipdev is Keyboard) newDevice = new Keyboard_D(this); + if (ipdev is Keyboard) + { + newDevice = new Keyboard_D(this); + AddKeyboardMapper((Keyboard_D)newDevice, (Keyboard)ipdev); + } + else if (ipdev is Gamepad) newDevice = new GamePad_D(this); + if (newDevice != null) { m_devices.Add(ipdev, newDevice); @@ -35,12 +41,23 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem { m_devices.Remove(ipdev); RaiseDeviceLost(device); + + if (device is Keyboard_D) + { + RemoveKeyboardMapper((Keyboard_D)device); + } } } + private T GetInputSystemDevice<T>(InputDevice_D device) where T : InputDevice + { + m_devices.TryGetKey(device, out var ipDev); + return ipDev as T; + } + public override string GetDeviceName(InputDevice_D inputDevice) { - m_devices.TryGetKey(inputDevice, out var ipdev); + var ipdev = GetInputSystemDevice<InputDevice>(inputDevice); Debug.Assert(ipdev != null, "不能对已离线的设备获取名称"); return $"{ipdev.description.deviceClass}_{ipdev.description.interfaceName}_{ipdev.deviceId}"; @@ -51,12 +68,12 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem return m_devices.TryGetKey(device, out var _); } - private void IP_onDeviceChange(InputDevice device, UnityEngine.InputSystem.InputDeviceChange changeType) + private void IP_onDeviceChange(InputDevice device, InputDeviceChange changeType) { switch (changeType) { - case UnityEngine.InputSystem.InputDeviceChange.Added: AddDevice(device); break; - case UnityEngine.InputSystem.InputDeviceChange.Removed: RemoveDevice(device); break; + case InputDeviceChange.Added: AddDevice(device); break; + case InputDeviceChange.Removed: RemoveDevice(device); break; } } @@ -69,22 +86,11 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem { if (control.Device is Keyboard_D keyboard) { - if (control is Keyboard_D.KeyboardKey key) - { - if (m_devices.TryGetKey(keyboard, out var ipdev)) - { - var ipKeyboard = ipdev as Keyboard; - if (ipKeyboard == null) return false; - - var k = GetIPKeyboardKey(ipKeyboard, key.m_keycode); - return k.isPressed; - } - - return false; - } + var ipKeyboard = GetInputSystemDevice<Keyboard>(keyboard); + var k = GetIPKeyboardKey(ipKeyboard, keyboard, control); + return k.isPressed; } - throw new System.NotImplementedException(); } @@ -98,130 +104,132 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem throw new System.NotImplementedException(); } - static ButtonControl GetIPKeyboardKey(Keyboard keyboard, KeyCode key) + ButtonControl GetIPKeyboardKey(Keyboard ipKeyboard, Keyboard_D keyboard, InputControl_C key) { - switch (key) + var mapper = m_keyboardMapper[keyboard]; + mapper.TryGetValue(key, out ButtonControl inputBtn); + if (inputBtn != null) + return inputBtn; + else { - // 字母键(A-Z) - case KeyCode.A: return keyboard.aKey; - case KeyCode.B: return keyboard.bKey; - case KeyCode.C: return keyboard.cKey; - case KeyCode.D: return keyboard.dKey; - case KeyCode.E: return keyboard.eKey; - case KeyCode.F: return keyboard.fKey; - case KeyCode.G: return keyboard.gKey; - case KeyCode.H: return keyboard.hKey; - case KeyCode.I: return keyboard.iKey; - case KeyCode.J: return keyboard.jKey; - case KeyCode.K: return keyboard.kKey; - case KeyCode.L: return keyboard.lKey; - case KeyCode.M: return keyboard.mKey; - case KeyCode.N: return keyboard.nKey; - case KeyCode.O: return keyboard.oKey; - case KeyCode.P: return keyboard.pKey; - case KeyCode.Q: return keyboard.qKey; - case KeyCode.R: return keyboard.rKey; - case KeyCode.S: return keyboard.sKey; - case KeyCode.T: return keyboard.tKey; - case KeyCode.U: return keyboard.uKey; - case KeyCode.V: return keyboard.vKey; - case KeyCode.W: return keyboard.wKey; - case KeyCode.X: return keyboard.xKey; - case KeyCode.Y: return keyboard.yKey; - case KeyCode.Z: return keyboard.zKey; - - // 数字键(0-9) - case KeyCode.Alpha0: return keyboard.digit0Key; - case KeyCode.Alpha1: return keyboard.digit1Key; - case KeyCode.Alpha2: return keyboard.digit2Key; - case KeyCode.Alpha3: return keyboard.digit3Key; - case KeyCode.Alpha4: return keyboard.digit4Key; - case KeyCode.Alpha5: return keyboard.digit5Key; - case KeyCode.Alpha6: return keyboard.digit6Key; - case KeyCode.Alpha7: return keyboard.digit7Key; - case KeyCode.Alpha8: return keyboard.digit8Key; - case KeyCode.Alpha9: return keyboard.digit9Key; - - // 小键盘 - case KeyCode.Keypad0: return keyboard.numpad0Key; - case KeyCode.Keypad1: return keyboard.numpad1Key; - case KeyCode.Keypad2: return keyboard.numpad2Key; - case KeyCode.Keypad3: return keyboard.numpad3Key; - case KeyCode.Keypad4: return keyboard.numpad4Key; - case KeyCode.Keypad5: return keyboard.numpad5Key; - case KeyCode.Keypad6: return keyboard.numpad6Key; - case KeyCode.Keypad7: return keyboard.numpad7Key; - case KeyCode.Keypad8: return keyboard.numpad8Key; - case KeyCode.Keypad9: return keyboard.numpad9Key; - case KeyCode.KeypadPeriod: return keyboard.numpadPeriodKey; - case KeyCode.KeypadDivide: return keyboard.numpadDivideKey; - case KeyCode.KeypadMultiply: return keyboard.numpadMultiplyKey; - case KeyCode.KeypadMinus: return keyboard.numpadMinusKey; - case KeyCode.KeypadPlus: return keyboard.numpadPlusKey; - case KeyCode.KeypadEnter: return keyboard.numpadEnterKey; - case KeyCode.KeypadEquals: return keyboard.numpadEqualsKey; - - // 功能键(F1-F15) - case KeyCode.F1: return keyboard.f1Key; - case KeyCode.F2: return keyboard.f2Key; - case KeyCode.F3: return keyboard.f3Key; - case KeyCode.F4: return keyboard.f4Key; - case KeyCode.F5: return keyboard.f5Key; - case KeyCode.F6: return keyboard.f6Key; - case KeyCode.F7: return keyboard.f7Key; - case KeyCode.F8: return keyboard.f8Key; - case KeyCode.F9: return keyboard.f9Key; - case KeyCode.F10: return keyboard.f10Key; - case KeyCode.F11: return keyboard.f11Key; - case KeyCode.F12: return keyboard.f12Key; - - // 方向键 - case KeyCode.UpArrow: return keyboard.upArrowKey; - case KeyCode.DownArrow: return keyboard.downArrowKey; - case KeyCode.LeftArrow: return keyboard.leftArrowKey; - case KeyCode.RightArrow: return keyboard.rightArrowKey; - - // 符号键 - case KeyCode.Space: return keyboard.spaceKey; - case KeyCode.Backspace: return keyboard.backspaceKey; - case KeyCode.Tab: return keyboard.tabKey; - case KeyCode.Return: return keyboard.enterKey; - case KeyCode.Escape: return keyboard.escapeKey; - case KeyCode.LeftShift: return keyboard.leftShiftKey; - case KeyCode.RightShift: return keyboard.rightShiftKey; - case KeyCode.LeftControl: return keyboard.leftCtrlKey; - case KeyCode.RightControl: return keyboard.rightCtrlKey; - case KeyCode.LeftAlt: return keyboard.leftAltKey; - case KeyCode.RightAlt: return keyboard.rightAltKey; - case KeyCode.LeftCommand: return keyboard.leftCommandKey; // macOS Command键 - case KeyCode.RightCommand: return keyboard.rightCommandKey; - case KeyCode.CapsLock: return keyboard.capsLockKey; - case KeyCode.Numlock: return keyboard.numLockKey; - case KeyCode.ScrollLock: return keyboard.scrollLockKey; - case KeyCode.Print: return keyboard.printScreenKey; - case KeyCode.Pause: return keyboard.pauseKey; - case KeyCode.Insert: return keyboard.insertKey; - case KeyCode.Home: return keyboard.homeKey; - case KeyCode.End: return keyboard.endKey; - case KeyCode.PageUp: return keyboard.pageUpKey; - case KeyCode.PageDown: return keyboard.pageDownKey; - case KeyCode.Delete: return keyboard.deleteKey; - case KeyCode.Comma: return keyboard.commaKey; - case KeyCode.Period: return keyboard.periodKey; - case KeyCode.Slash: return keyboard.slashKey; - case KeyCode.BackQuote: return keyboard.backquoteKey; - case KeyCode.Minus: return keyboard.minusKey; - case KeyCode.Equals: return keyboard.equalsKey; - case KeyCode.LeftBracket: return keyboard.leftBracketKey; - case KeyCode.RightBracket: return keyboard.rightBracketKey; - case KeyCode.Backslash: return keyboard.backslashKey; - case KeyCode.Semicolon: return keyboard.semicolonKey; - case KeyCode.Quote: return keyboard.quoteKey; - default: - throw new System.NotImplementedException($"Not Find KeyCode Mapper Code from {key}"); + throw new System.Exception($"not found keyboard mapper setting : {key}"); } } + Dictionary<Keyboard_D, Dictionary<InputControl_C, ButtonControl>> m_keyboardMapper = new Dictionary<Keyboard_D, Dictionary<InputControl_C, ButtonControl>>(); + void AddKeyboardMapper(Keyboard_D keyboard_d, Keyboard ipkeyboard) + { + m_keyboardMapper.Add(keyboard_d, new Dictionary<InputControl_C, ButtonControl>()); + var mapper = m_keyboardMapper[keyboard_d]; + mapper.Add(keyboard_d.A, ipkeyboard.aKey); + mapper.Add(keyboard_d.B, ipkeyboard.bKey); + mapper.Add(keyboard_d.C, ipkeyboard.cKey); + mapper.Add(keyboard_d.D, ipkeyboard.dKey); + mapper.Add(keyboard_d.E, ipkeyboard.eKey); + mapper.Add(keyboard_d.F, ipkeyboard.fKey); + mapper.Add(keyboard_d.G, ipkeyboard.gKey); + mapper.Add(keyboard_d.H, ipkeyboard.hKey); + mapper.Add(keyboard_d.I, ipkeyboard.iKey); + mapper.Add(keyboard_d.J, ipkeyboard.jKey); + mapper.Add(keyboard_d.K, ipkeyboard.kKey); + mapper.Add(keyboard_d.L, ipkeyboard.lKey); + mapper.Add(keyboard_d.M, ipkeyboard.mKey); + mapper.Add(keyboard_d.N, ipkeyboard.nKey); + mapper.Add(keyboard_d.O, ipkeyboard.oKey); + mapper.Add(keyboard_d.P, ipkeyboard.pKey); + mapper.Add(keyboard_d.Q, ipkeyboard.qKey); + mapper.Add(keyboard_d.R, ipkeyboard.rKey); + mapper.Add(keyboard_d.S, ipkeyboard.sKey); + mapper.Add(keyboard_d.T, ipkeyboard.tKey); + mapper.Add(keyboard_d.U, ipkeyboard.uKey); + mapper.Add(keyboard_d.V, ipkeyboard.vKey); + mapper.Add(keyboard_d.W, ipkeyboard.wKey); + mapper.Add(keyboard_d.X, ipkeyboard.xKey); + mapper.Add(keyboard_d.Y, ipkeyboard.yKey); + mapper.Add(keyboard_d.Z, ipkeyboard.zKey); + mapper.Add(keyboard_d.Alpha0, ipkeyboard.digit0Key); + mapper.Add(keyboard_d.Alpha1, ipkeyboard.digit1Key); + mapper.Add(keyboard_d.Alpha2, ipkeyboard.digit2Key); + mapper.Add(keyboard_d.Alpha3, ipkeyboard.digit3Key); + mapper.Add(keyboard_d.Alpha4, ipkeyboard.digit4Key); + mapper.Add(keyboard_d.Alpha5, ipkeyboard.digit5Key); + mapper.Add(keyboard_d.Alpha6, ipkeyboard.digit6Key); + mapper.Add(keyboard_d.Alpha7, ipkeyboard.digit7Key); + mapper.Add(keyboard_d.Alpha8, ipkeyboard.digit8Key); + mapper.Add(keyboard_d.Alpha9, ipkeyboard.digit9Key); + mapper.Add(keyboard_d.Keypad0, ipkeyboard.numpad0Key); + mapper.Add(keyboard_d.Keypad1, ipkeyboard.numpad1Key); + mapper.Add(keyboard_d.Keypad2, ipkeyboard.numpad2Key); + mapper.Add(keyboard_d.Keypad3, ipkeyboard.numpad3Key); + mapper.Add(keyboard_d.Keypad4, ipkeyboard.numpad4Key); + mapper.Add(keyboard_d.Keypad5, ipkeyboard.numpad5Key); + mapper.Add(keyboard_d.Keypad6, ipkeyboard.numpad6Key); + mapper.Add(keyboard_d.Keypad7, ipkeyboard.numpad7Key); + mapper.Add(keyboard_d.Keypad8, ipkeyboard.numpad8Key); + mapper.Add(keyboard_d.Keypad9, ipkeyboard.numpad9Key); + mapper.Add(keyboard_d.KeypadPeriod, ipkeyboard.numpadPeriodKey); + mapper.Add(keyboard_d.KeypadDivide, ipkeyboard.numpadDivideKey); + mapper.Add(keyboard_d.KeypadMultiply, ipkeyboard.numpadMultiplyKey); + mapper.Add(keyboard_d.KeypadMinus, ipkeyboard.numpadMinusKey); + mapper.Add(keyboard_d.KeypadPlus, ipkeyboard.numpadPlusKey); + mapper.Add(keyboard_d.KeypadEnter, ipkeyboard.numpadEnterKey); + mapper.Add(keyboard_d.F1, ipkeyboard.f1Key); + mapper.Add(keyboard_d.F2, ipkeyboard.f2Key); + mapper.Add(keyboard_d.F3, ipkeyboard.f3Key); + mapper.Add(keyboard_d.F4, ipkeyboard.f4Key); + mapper.Add(keyboard_d.F5, ipkeyboard.f5Key); + mapper.Add(keyboard_d.F6, ipkeyboard.f6Key); + mapper.Add(keyboard_d.F7, ipkeyboard.f7Key); + mapper.Add(keyboard_d.F8, ipkeyboard.f8Key); + mapper.Add(keyboard_d.F9, ipkeyboard.f9Key); + mapper.Add(keyboard_d.F10, ipkeyboard.f10Key); + mapper.Add(keyboard_d.F11, ipkeyboard.f11Key); + mapper.Add(keyboard_d.F12, ipkeyboard.f12Key); + mapper.Add(keyboard_d.UpArrow, ipkeyboard.upArrowKey); + mapper.Add(keyboard_d.DownArrow, ipkeyboard.downArrowKey); + mapper.Add(keyboard_d.LeftArrow, ipkeyboard.leftArrowKey); + mapper.Add(keyboard_d.RightArrow, ipkeyboard.rightArrowKey); + mapper.Add(keyboard_d.Space, ipkeyboard.spaceKey); + mapper.Add(keyboard_d.Backspace, ipkeyboard.backspaceKey); + mapper.Add(keyboard_d.Tab, ipkeyboard.tabKey); + mapper.Add(keyboard_d.Return, ipkeyboard.enterKey); + mapper.Add(keyboard_d.Escape, ipkeyboard.escapeKey); + mapper.Add(keyboard_d.LeftShift, ipkeyboard.leftShiftKey); + mapper.Add(keyboard_d.RightShift, ipkeyboard.rightShiftKey); + mapper.Add(keyboard_d.LeftControl, ipkeyboard.leftCtrlKey); + mapper.Add(keyboard_d.RightControl, ipkeyboard.rightCtrlKey); + mapper.Add(keyboard_d.LeftAlt, ipkeyboard.leftAltKey); + mapper.Add(keyboard_d.RightAlt, ipkeyboard.rightAltKey); + mapper.Add(keyboard_d.LeftCommand, ipkeyboard.leftCommandKey); + mapper.Add(keyboard_d.RightCommand, ipkeyboard.rightCommandKey); + mapper.Add(keyboard_d.CapsLock, ipkeyboard.capsLockKey); + mapper.Add(keyboard_d.Numlock, ipkeyboard.numLockKey); + mapper.Add(keyboard_d.ScrollLock, ipkeyboard.scrollLockKey); + mapper.Add(keyboard_d.Print, ipkeyboard.printScreenKey); + mapper.Add(keyboard_d.Pause, ipkeyboard.pauseKey); + mapper.Add(keyboard_d.Insert, ipkeyboard.insertKey); + mapper.Add(keyboard_d.Home, ipkeyboard.homeKey); + mapper.Add(keyboard_d.End, ipkeyboard.endKey); + mapper.Add(keyboard_d.PageUp, ipkeyboard.pageUpKey); + mapper.Add(keyboard_d.PageDown, ipkeyboard.pageDownKey); + mapper.Add(keyboard_d.Delete, ipkeyboard.deleteKey); + mapper.Add(keyboard_d.Comma, ipkeyboard.commaKey); + mapper.Add(keyboard_d.Period, ipkeyboard.periodKey); + mapper.Add(keyboard_d.Slash, ipkeyboard.slashKey); + mapper.Add(keyboard_d.BackQuote, ipkeyboard.backquoteKey); + mapper.Add(keyboard_d.Minus, ipkeyboard.minusKey); + mapper.Add(keyboard_d.Equals_k, ipkeyboard.equalsKey); + mapper.Add(keyboard_d.LeftBracket, ipkeyboard.leftBracketKey); + mapper.Add(keyboard_d.RightBracket, ipkeyboard.rightBracketKey); + mapper.Add(keyboard_d.Backslash, ipkeyboard.backslashKey); + mapper.Add(keyboard_d.Semicolon, ipkeyboard.semicolonKey); + mapper.Add(keyboard_d.Quote, ipkeyboard.quoteKey); + } + void RemoveKeyboardMapper(Keyboard_D keyboard_d) + { + m_keyboardMapper.Remove(keyboard_d); + } } + } #endif \ No newline at end of file