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 158bd8a2..6a16325c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs @@ -85,17 +85,18 @@ namespace AxibugEmuOnline.Client protected abstract void OnLoadDefaultMapper(BindingPage binding); /// <summary> - /// 获取指定按键是否处于按下状态 + /// 获取指定控件是否处于按下状态 + /// <para>如果绑定了多个物理按键,则只有这多个物理按键全部不处于按下状态时,才会返回false</para> /// </summary> - /// <param name="emuBtn"></param> + /// <param name="emuControl"></param> /// <param name="controllerIndex"></param> /// <returns></returns> - public bool GetKey(T emuBtn, int controllerIndex) + public bool GetKey(T emuControl, int controllerIndex) { var binding = m_bindingPages[controllerIndex]; - foreach (var key in binding.GetBinding(emuBtn)) + foreach (var key in binding.GetBinding(emuControl)) { - if (key.IsPressing()) return true; + if (key.Performing) return true; } return false; @@ -113,46 +114,56 @@ namespace AxibugEmuOnline.Client } /// <summary> - /// 获取指定按键的值 + /// 获取指定控件的向量值 + /// <para>通常用于摇杆类型的控件</para> + /// <para>如果同时绑定了多个物理输入设备,只会返回其中一个物理设备的向量值</para> /// </summary> - /// <param name="emuBtn">模拟器平台的具体键枚举</param> + /// <param name="emuControl">模拟器平台的具体键枚举</param> /// <param name="controllerIndex">模拟器平台的控制器序号</param> /// <returns></returns> - public Vector2 GetVector2(T emuBtn, int controllerIndex) + public Vector2 GetVector2(T emuControl, int controllerIndex) { var binding = m_bindingPages[controllerIndex]; - foreach (var key in binding.GetBinding(emuBtn)) + foreach (var control in binding.GetBinding(emuControl)) { - if (!key.IsPressing()) continue; + if (!control.Performing) continue; - return key.GetVector2(); + return control.GetVector2(); } return default(Vector2); } /// <summary> - /// 获取指定按键的值 + /// 获取指定控件的浮点值,取值范围为[0f,1f] + /// <para>通常用于线性类按键,例如PS手柄的扳机键</para> + /// <para>普通的按键也能读取这个值,但返回值只会有0f和1f两种值</para> + /// <para>如果同时绑定了多个物理控件,则会从所有处于按下状态的物理控件中取平均值</para> /// </summary> - /// <param name="emuBtn">模拟器平台的具体键枚举</param> + /// <param name="emuControl">模拟器平台的具体键枚举</param> /// <param name="controllerIndex">模拟器平台的控制器序号</param> /// <returns></returns> - public float GetFloat(T emuBtn, int controllerIndex) + public float GetFloat(T emuControl, int controllerIndex) { - var binding = m_bindingPages[controllerIndex]; - foreach (var key in binding.GetBinding(emuBtn)) - { - if (!key.IsPressing()) continue; + var totalFloat = 0f; + var totalControl = 0; - return key.GetFlaot(); + var binding = m_bindingPages[controllerIndex]; + foreach (var key in binding.GetBinding(emuControl)) + { + if (!key.Performing) continue; + + totalControl++; + totalFloat += key.GetFlaot(); } - return default(float); + if (totalControl == 0) return default(float); + else return totalFloat / totalControl; } public class BindingPage { - Dictionary<T, List<InputDevice.KeyBase>> m_mapSetting = new Dictionary<T, List<InputDevice.KeyBase>>(); + Dictionary<T, List<InputDevice.InputControl>> m_mapSetting = new Dictionary<T, List<InputDevice.InputControl>>(); public int ControllerIndex { get; } public EmuCoreControllerKeyBinding<T> Host { get; } @@ -163,7 +174,7 @@ namespace AxibugEmuOnline.Client Host = host; foreach (var emuBtn in host.DefineKeys()) - m_mapSetting[emuBtn] = new List<InputDevice.KeyBase>(); + m_mapSetting[emuBtn] = new List<InputDevice.InputControl>(); } public void ClearBinding() @@ -171,7 +182,7 @@ namespace AxibugEmuOnline.Client foreach (var list in m_mapSetting.Values) list.Clear(); } - public void SetBinding(T emuBtn, InputDevice.KeyBase key, int settingSlot) + public void SetBinding(T emuBtn, InputDevice.InputControl key, int settingSlot) { var settingList = m_mapSetting[emuBtn]; @@ -181,14 +192,14 @@ namespace AxibugEmuOnline.Client settingList[settingSlot] = key; } - public InputDevice.KeyBase GetBinding(T emuBtn, int settingSlot) + public InputDevice.InputControl GetBinding(T emuBtn, int settingSlot) { var settingList = m_mapSetting[emuBtn]; if (settingSlot >= settingList.Count) return null; return settingList[settingSlot]; } - public List<InputDevice.KeyBase> GetBinding(T emuBtn) + public List<InputDevice.InputControl> GetBinding(T emuBtn) { return m_mapSetting[emuBtn]; } @@ -199,7 +210,7 @@ namespace AxibugEmuOnline.Client { foreach (var key in item.Value) { - if (key.GetButtonDown()) return true; + if (key.Start) return true; } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs index 8fff0861..97c4b06c 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs @@ -1,6 +1,5 @@ using System.Collections.Generic; using UnityEngine; -using UnityEngine.InputSystem; namespace AxibugEmuOnline.Client.InputDevices { @@ -19,12 +18,12 @@ namespace AxibugEmuOnline.Client.InputDevices private void OnDeviceLost(InputDevice lostDevice) { - + RemoveDevice(lostDevice); } private void OnDeviceConnected(InputDevice connectDevice) { - throw new System.NotImplementedException(); + AddDevice(connectDevice); } public void AddDevice(InputDevice device) @@ -37,7 +36,7 @@ namespace AxibugEmuOnline.Client.InputDevices m_devices.Remove(device.UniqueName); } - public InputDevice.KeyBase GetKeyByPath(string path) + public InputDevice.InputControl GetKeyByPath(string path) { var temp = path.Split("/"); Debug.Assert(temp.Length == 2, "Invalid Path Format"); @@ -48,7 +47,7 @@ namespace AxibugEmuOnline.Client.InputDevices var targetDevice = FindDeviceByName(deviceName); if (targetDevice == null) return null; - var key = targetDevice.FindKeyByKeyName(keyName); + var key = targetDevice.FindControlByName(keyName); return key; } @@ -83,22 +82,22 @@ namespace AxibugEmuOnline.Client.InputDevices { public abstract string UniqueName { get; } - public delegate void OnKeyStateChangedHandle(KeyBase sender); - public event OnKeyStateChangedHandle OnKeyStateChanged; - /// <summary> 指示该设备是否在线 </summary> - public abstract bool Online { get; } - /// <summary> 指示该设备当前帧是否有任意键被按下 </summary> + public bool Online => m_resolver.CheckOnline(this); + /// <summary> 指示该设备当前帧是否有任意控件被激发 </summary> public bool AnyKeyDown { get; private set; } + /// <summary> 获得输入解决器 </summary> + internal InputResolver Resolver => m_resolver; - protected Dictionary<string, KeyBase> m_keyMapper = new Dictionary<string, KeyBase>(); + protected Dictionary<string, InputControl> m_controlMapper = new Dictionary<string, InputControl>(); protected InputResolver m_resolver; public InputDevice(InputResolver resolver) { m_resolver = resolver; - foreach (var key in DefineKeys()) + + foreach (var control in DefineControls()) { - m_keyMapper[key.KeyName] = key; + m_controlMapper.Add(control.ControlName, control); } } @@ -106,49 +105,54 @@ namespace AxibugEmuOnline.Client.InputDevices { AnyKeyDown = false; - foreach (var key in m_keyMapper.Values) + foreach (var control in m_controlMapper.Values) { - if (key.GetButtonDown()) + if (control.Start) { AnyKeyDown = true; - RaiseKeyEvent(key); } } } - protected abstract IEnumerable<KeyBase> DefineKeys(); - protected void RaiseKeyEvent(KeyBase sender) - { - OnKeyStateChanged?.Invoke(sender); - } + /// <summary> 用于列出这个输入设备的所有输入控件实例 </summary> + /// <returns></returns> + protected abstract IEnumerable<InputControl> DefineControls(); - public KeyBase FindKeyByKeyName(string keyName) + /// <summary> 通过控件名称,找到对应的控件 </summary> + /// <param name="keyName"></param> + /// <returns></returns> + public InputControl FindControlByName(string controlName) { - m_keyMapper.TryGetValue(keyName, out var key); + m_controlMapper.TryGetValue(controlName, out var key); return key; } /// <summary> - /// 输入设备的键接口 + /// 输入设备的抽象控件接口 /// </summary> - public abstract class KeyBase + public abstract class InputControl { - public InputDevice HostDevice { get; internal set; } - /// <summary> 获取该键是否在当前调用帧被按下 </summary> - public abstract bool GetButtonDown(); - /// <summary> 获取该键是否在当前调用帧被抬起 </summary> - public abstract bool GetButtonUp(); - /// <summary> 获取该键是否在当前调用帧是否处于按下状态 </summary> - public abstract bool IsPressing(); + /// <summary> 控件所属设备 </summary> + public InputDevice Device { get; internal set; } - public virtual Vector2 GetVector2() { throw new System.NotImplementedException(); } - public virtual float GetFlaot() { throw new System.NotImplementedException(); } + /// <summary> 获取该控件是否在当前调用帧被激发 </summary> + public abstract bool Start { get; } + /// <summary> 获取该控件是否在当前调用帧被释放 </summary> + public abstract bool Release { get; } + /// <summary> 获取该控件是否在当前调用帧是否处于活动状态 </summary> + public abstract bool Performing { get; } - /// <summary> 键名 </summary> - public abstract string KeyName { get; } + /// <summary> 获得该控件的以二维向量表达的值 </summary> + /// <returns></returns> + public abstract Vector2 GetVector2(); + /// <summary> 获得该控件的以浮点数表达的值 </summary> + public abstract float GetFlaot(); + + /// <summary> 控件名,这个控件名称必须是唯一的 </summary> + public abstract string ControlName { get; } public string GetPath() { - return $"{HostDevice.UniqueName}/{KeyName}"; + return $"{Device.UniqueName}/{ControlName}"; } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/BiDirectionalDictionary.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs.meta 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 44fe1a91..3c098c5e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputResolver.cs @@ -1,4 +1,5 @@ using System.Collections.Generic; +using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { @@ -53,5 +54,26 @@ namespace AxibugEmuOnline.Client.InputDevices { OnDeviceConnected?.Invoke(connectDevice); } + + /// <summary> + /// 获取一个键盘设备的指定按键当前调用帧是否触发了按下动作 + /// </summary> + /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> + /// <param name="key">键盘按键枚举值</param> + /// <returns></returns> + public abstract bool GetKeyDown(KeyBoard keyboard, KeyCode key); + /// <summary> + /// 获取一个键盘设备的指定按键当前调用帧是否触发了放开动作 + /// </summary> + /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> + /// <param name="key">键盘按键枚举值</param> + public abstract bool GetKeyUp(KeyBoard keyboard, KeyCode key); + /// <summary> + /// 获取一个键盘设备的指定按键当前调用帧是否处于按下状态 + /// </summary> + /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> + /// <param name="key">键盘按键枚举值</param> + public abstract bool GetKey(KeyBoard keyboard, KeyCode key); + } } \ No newline at end of file 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 30ca2b2a..9917d1fa 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs @@ -1,22 +1,21 @@ #if ENABLE_INPUT_SYSTEM using System.Collections.Generic; +using UnityEngine; +using UnityEngine.InputSystem.Controls; using IP = UnityEngine.InputSystem.InputSystem; using IPDevice = UnityEngine.InputSystem.InputDevice; using IPKeyboard = UnityEngine.InputSystem.Keyboard; namespace AxibugEmuOnline.Client.InputDevices { - /// <summary> InputSystem对接 </summary> - public class InputSystemResolver : InputResolver + /// <summary> InputSystem对接类 </summary> + public partial class InputSystemResolver : InputResolver { DualWayDictionary<IPDevice, InputDevice> m_devices = new DualWayDictionary<IPDevice, InputDevice>(); protected override void OnInit() { - foreach (var device in IP.devices) - { - AddDevice(device); - } + foreach (var device in IP.devices) AddDevice(device); IP.onDeviceChange += IP_onDeviceChange; } @@ -60,6 +59,175 @@ namespace AxibugEmuOnline.Client.InputDevices { return m_devices.Values; } + + public override bool GetKeyDown(KeyBoard keyboard, KeyCode key) + { + if (m_devices.TryGetKey(keyboard, out var ipdev)) + { + var ipKeyboard = ipdev as IPKeyboard; + if (ipKeyboard == null) return false; + + var k = GetIPKeyboardKey(ipKeyboard, key); + return k.wasPressedThisFrame; + } + + return false; + } + + public override bool GetKeyUp(KeyBoard keyboard, KeyCode key) + { + if (m_devices.TryGetKey(keyboard, out var ipdev)) + { + var ipKeyboard = ipdev as IPKeyboard; + if (ipKeyboard == null) return false; + + var k = GetIPKeyboardKey(ipKeyboard, key); + return k.wasReleasedThisFrame; + } + + return false; + } + + public override bool GetKey(KeyBoard keyboard, KeyCode key) + { + if (m_devices.TryGetKey(keyboard, out var ipdev)) + { + var ipKeyboard = ipdev as IPKeyboard; + if (ipKeyboard == null) return false; + + var k = GetIPKeyboardKey(ipKeyboard, key); + return k.isPressed; + } + + return false; + } + } + + public partial class InputSystemResolver : InputResolver + { + static ButtonControl GetIPKeyboardKey(IPKeyboard keyboard, KeyCode key) + { + switch (key) + { + // 字母键(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}"); + } + } } } #endif \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs index b475b9c9..4c7b34ef 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Keyboard.cs @@ -7,41 +7,38 @@ namespace AxibugEmuOnline.Client.InputDevices public partial class KeyBoard : InputDevice { public override string UniqueName => nameof(KeyBoard); - public override bool Online => true; - public KeyBoard(InputResolver resolver) : base(resolver) { } - protected override IEnumerable<KeyBase> DefineKeys() + protected override IEnumerable<InputControl> DefineControls() { - var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc) as KeyBase); + var keys = s_keyboardKeys.Select(kc => new KeyboardKey(kc) as InputControl); return keys; } - public class KeyboardKey : KeyBase + public class KeyboardKey : InputControl { - internal KeyCode m_listenKey; + KeyCode m_keycode; + + public override bool Start => Device.Resolver.GetKeyDown(Device as KeyBoard, m_keycode); + public override bool Release => Device.Resolver.GetKeyUp(Device as KeyBoard, m_keycode); + public override bool Performing => Device.Resolver.GetKey(Device as KeyBoard, m_keycode); public KeyboardKey(KeyCode listenKey) { - m_listenKey = listenKey; + m_keycode = listenKey; } - public override bool GetButtonDown() + public override string ControlName => m_keycode.ToString(); + + public override Vector2 GetVector2() { - return Input.GetKeyDown(m_listenKey); + return default(Vector2); } - public override bool GetButtonUp() + public override float GetFlaot() { - return Input.GetKeyUp(m_listenKey); + return Performing ? 1 : 0; } - - public override bool IsPressing() - { - return Input.GetKey(m_listenKey); - } - - public override string KeyName => m_listenKey.ToString(); } }