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 8144eef9..f89f87ca 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; -using UnityEngine.InputSystem.Controls; namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem { @@ -21,16 +20,13 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem private void AddDevice(InputDevice ipdev) { InputDevice_D newDevice = null; - if (ipdev is Keyboard) - { - newDevice = new Keyboard_D(this); - AddKeyboardMapper((Keyboard_D)newDevice, (Keyboard)ipdev); - } + if (ipdev is Keyboard) newDevice = new Keyboard_D(this); else if (ipdev is Gamepad) newDevice = new GamePad_D(this); if (newDevice != null) { m_devices.Add(ipdev, newDevice); + AddDeviceMapper(newDevice, ipdev); RaiseDeviceConnected(newDevice); } } @@ -40,12 +36,8 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem if (m_devices.TryGetValue(ipdev, out var device)) { m_devices.Remove(ipdev); + RemoveDeviceMapper(device); RaiseDeviceLost(device); - - if (device is Keyboard_D) - { - RemoveKeyboardMapper((Keyboard_D)device); - } } } @@ -84,150 +76,158 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem public override bool CheckPerforming<CONTROLLER>(CONTROLLER control) { - if (control.Device is Keyboard_D keyboard) - { - var ipKeyboard = GetInputSystemDevice<Keyboard>(keyboard); - var k = GetIPKeyboardKey(ipKeyboard, keyboard, control); - return k.isPressed; - } - - throw new System.NotImplementedException(); + var ipControl = GetInputSystemControl(control); + return ipControl.IsPressed(); } public override Vector2 GetVector2<CONTROLLER>(CONTROLLER control) { - throw new System.NotImplementedException(); + var ipControl = GetInputSystemControl(control); + return (ipControl as InputControl<Vector2>).value; } public override float GetFloat<CONTROLLER>(CONTROLLER control) { - throw new System.NotImplementedException(); + var ipControl = GetInputSystemControl(control); + return (ipControl as InputControl<float>).value; } - ButtonControl GetIPKeyboardKey(Keyboard ipKeyboard, Keyboard_D keyboard, InputControl_C key) + InputControl GetInputSystemControl(InputControl_C key) { - var mapper = m_keyboardMapper[keyboard]; - mapper.TryGetValue(key, out ButtonControl inputBtn); + var device_d = key.Device; + var mapper = m_deviceMapper[device_d]; + mapper.TryGetValue(key, out InputControl inputBtn); if (inputBtn != null) return inputBtn; else { - throw new System.Exception($"not found keyboard mapper setting : {key}"); + throw new System.Exception($"not found 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) + Dictionary<InputDevice_D, Dictionary<InputControl_C, InputControl>> m_deviceMapper = new Dictionary<InputDevice_D, Dictionary<InputControl_C, InputControl>>(); + void AddDeviceMapper(InputDevice_D device_d, InputDevice ipdevice) { - m_keyboardMapper.Add(keyboard_d, new Dictionary<InputControl_C, ButtonControl>()); - var mapper = m_keyboardMapper[keyboard_d]; + m_deviceMapper.Add(device_d, new Dictionary<InputControl_C, InputControl>()); + var mapper = m_deviceMapper[device_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); + if (device_d is Keyboard_D keyboard_d) + { + var ipKeyboard = ipdevice as Keyboard; + + mapper[keyboard_d.A] = ipKeyboard.aKey; + mapper[keyboard_d.B] = ipKeyboard.bKey; + mapper[keyboard_d.C] = ipKeyboard.cKey; + mapper[keyboard_d.D] = ipKeyboard.dKey; + mapper[keyboard_d.E] = ipKeyboard.eKey; + mapper[keyboard_d.F] = ipKeyboard.fKey; + mapper[keyboard_d.G] = ipKeyboard.gKey; + mapper[keyboard_d.H] = ipKeyboard.hKey; + mapper[keyboard_d.I] = ipKeyboard.iKey; + mapper[keyboard_d.J] = ipKeyboard.jKey; + mapper[keyboard_d.K] = ipKeyboard.kKey; + mapper[keyboard_d.L] = ipKeyboard.lKey; + mapper[keyboard_d.M] = ipKeyboard.mKey; + mapper[keyboard_d.N] = ipKeyboard.nKey; + mapper[keyboard_d.O] = ipKeyboard.oKey; + mapper[keyboard_d.P] = ipKeyboard.pKey; + mapper[keyboard_d.Q] = ipKeyboard.qKey; + mapper[keyboard_d.R] = ipKeyboard.rKey; + mapper[keyboard_d.S] = ipKeyboard.sKey; + mapper[keyboard_d.T] = ipKeyboard.tKey; + mapper[keyboard_d.U] = ipKeyboard.uKey; + mapper[keyboard_d.V] = ipKeyboard.vKey; + mapper[keyboard_d.W] = ipKeyboard.wKey; + mapper[keyboard_d.X] = ipKeyboard.xKey; + mapper[keyboard_d.Y] = ipKeyboard.yKey; + mapper[keyboard_d.Z] = ipKeyboard.zKey; + mapper[keyboard_d.Alpha0] = ipKeyboard.digit0Key; + mapper[keyboard_d.Alpha1] = ipKeyboard.digit1Key; + mapper[keyboard_d.Alpha2] = ipKeyboard.digit2Key; + mapper[keyboard_d.Alpha3] = ipKeyboard.digit3Key; + mapper[keyboard_d.Alpha4] = ipKeyboard.digit4Key; + mapper[keyboard_d.Alpha5] = ipKeyboard.digit5Key; + mapper[keyboard_d.Alpha6] = ipKeyboard.digit6Key; + mapper[keyboard_d.Alpha7] = ipKeyboard.digit7Key; + mapper[keyboard_d.Alpha8] = ipKeyboard.digit8Key; + mapper[keyboard_d.Alpha9] = ipKeyboard.digit9Key; + mapper[keyboard_d.Keypad0] = ipKeyboard.numpad0Key; + mapper[keyboard_d.Keypad1] = ipKeyboard.numpad1Key; + mapper[keyboard_d.Keypad2] = ipKeyboard.numpad2Key; + mapper[keyboard_d.Keypad3] = ipKeyboard.numpad3Key; + mapper[keyboard_d.Keypad4] = ipKeyboard.numpad4Key; + mapper[keyboard_d.Keypad5] = ipKeyboard.numpad5Key; + mapper[keyboard_d.Keypad6] = ipKeyboard.numpad6Key; + mapper[keyboard_d.Keypad7] = ipKeyboard.numpad7Key; + mapper[keyboard_d.Keypad8] = ipKeyboard.numpad8Key; + mapper[keyboard_d.Keypad9] = ipKeyboard.numpad9Key; + mapper[keyboard_d.KeypadPeriod] = ipKeyboard.numpadPeriodKey; + mapper[keyboard_d.KeypadDivide] = ipKeyboard.numpadDivideKey; + mapper[keyboard_d.KeypadMultiply] = ipKeyboard.numpadMultiplyKey; + mapper[keyboard_d.KeypadMinus] = ipKeyboard.numpadMinusKey; + mapper[keyboard_d.KeypadPlus] = ipKeyboard.numpadPlusKey; + mapper[keyboard_d.KeypadEnter] = ipKeyboard.numpadEnterKey; + mapper[keyboard_d.F1] = ipKeyboard.f1Key; + mapper[keyboard_d.F2] = ipKeyboard.f2Key; + mapper[keyboard_d.F3] = ipKeyboard.f3Key; + mapper[keyboard_d.F4] = ipKeyboard.f4Key; + mapper[keyboard_d.F5] = ipKeyboard.f5Key; + mapper[keyboard_d.F6] = ipKeyboard.f6Key; + mapper[keyboard_d.F7] = ipKeyboard.f7Key; + mapper[keyboard_d.F8] = ipKeyboard.f8Key; + mapper[keyboard_d.F9] = ipKeyboard.f9Key; + mapper[keyboard_d.F10] = ipKeyboard.f10Key; + mapper[keyboard_d.F11] = ipKeyboard.f11Key; + mapper[keyboard_d.F12] = ipKeyboard.f12Key; + mapper[keyboard_d.UpArrow] = ipKeyboard.upArrowKey; + mapper[keyboard_d.DownArrow] = ipKeyboard.downArrowKey; + mapper[keyboard_d.LeftArrow] = ipKeyboard.leftArrowKey; + mapper[keyboard_d.RightArrow] = ipKeyboard.rightArrowKey; + mapper[keyboard_d.Space] = ipKeyboard.spaceKey; + mapper[keyboard_d.Backspace] = ipKeyboard.backspaceKey; + mapper[keyboard_d.Tab] = ipKeyboard.tabKey; + mapper[keyboard_d.Return] = ipKeyboard.enterKey; + mapper[keyboard_d.Escape] = ipKeyboard.escapeKey; + mapper[keyboard_d.LeftShift] = ipKeyboard.leftShiftKey; + mapper[keyboard_d.RightShift] = ipKeyboard.rightShiftKey; + mapper[keyboard_d.LeftControl] = ipKeyboard.leftCtrlKey; + mapper[keyboard_d.RightControl] = ipKeyboard.rightCtrlKey; + mapper[keyboard_d.LeftAlt] = ipKeyboard.leftAltKey; + mapper[keyboard_d.RightAlt] = ipKeyboard.rightAltKey; + mapper[keyboard_d.LeftCommand] = ipKeyboard.leftCommandKey; + mapper[keyboard_d.RightCommand] = ipKeyboard.rightCommandKey; + mapper[keyboard_d.CapsLock] = ipKeyboard.capsLockKey; + mapper[keyboard_d.Numlock] = ipKeyboard.numLockKey; + mapper[keyboard_d.ScrollLock] = ipKeyboard.scrollLockKey; + mapper[keyboard_d.Print] = ipKeyboard.printScreenKey; + mapper[keyboard_d.Pause] = ipKeyboard.pauseKey; + mapper[keyboard_d.Insert] = ipKeyboard.insertKey; + mapper[keyboard_d.Home] = ipKeyboard.homeKey; + mapper[keyboard_d.End] = ipKeyboard.endKey; + mapper[keyboard_d.PageUp] = ipKeyboard.pageUpKey; + mapper[keyboard_d.PageDown] = ipKeyboard.pageDownKey; + mapper[keyboard_d.Delete] = ipKeyboard.deleteKey; + mapper[keyboard_d.Comma] = ipKeyboard.commaKey; + mapper[keyboard_d.Period] = ipKeyboard.periodKey; + mapper[keyboard_d.Slash] = ipKeyboard.slashKey; + mapper[keyboard_d.BackQuote] = ipKeyboard.backquoteKey; + mapper[keyboard_d.Minus] = ipKeyboard.minusKey; + mapper[keyboard_d.Equals_k] = ipKeyboard.equalsKey; + mapper[keyboard_d.LeftBracket] = ipKeyboard.leftBracketKey; + mapper[keyboard_d.RightBracket] = ipKeyboard.rightBracketKey; + mapper[keyboard_d.Backslash] = ipKeyboard.backslashKey; + mapper[keyboard_d.Semicolon] = ipKeyboard.semicolonKey; + mapper[keyboard_d.Quote] = ipKeyboard.quoteKey; + } + else if (device_d is GamePad_D gamepad_d) + { + var ipGamepad = ipdevice as Gamepad; + mapper[gamepad_d.Up] = ipGamepad.dpad.up; + } + else throw new System.NotImplementedException($"初始化设备失败,未实现的物理按键映射 for {device_d.GetType()}"); } - void RemoveKeyboardMapper(Keyboard_D keyboard_d) + void RemoveDeviceMapper(InputDevice_D keyboard_d) { - m_keyboardMapper.Remove(keyboard_d); + m_deviceMapper.Remove(keyboard_d); } }