diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs index 9b7d9bdf..df56af03 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs @@ -22,57 +22,113 @@ namespace AxibugEmuOnline.Client.Settings public abstract class EssgeeKeyBinding : EmuCoreControllerKeyBinding<EssgeeSingleKey> { - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) + public override void Bind(Keyboard_D device, ControllerBinder controller) { - if (device is Keyboard_D keyboard) + switch (controller.ControllerIndex) { - switch (binding.ControllerIndex) - { - case 0: - binding.SetBinding(EssgeeSingleKey.OPTION_1, keyboard.Return, 0); - binding.SetBinding(EssgeeSingleKey.OPTION_2, keyboard.RightShift, 0); - binding.SetBinding(EssgeeSingleKey.UP, keyboard.W, 0); - binding.SetBinding(EssgeeSingleKey.DOWN, keyboard.S, 0); - binding.SetBinding(EssgeeSingleKey.LEFT, keyboard.A, 0); - binding.SetBinding(EssgeeSingleKey.RIGHT, keyboard.D, 0); - binding.SetBinding(EssgeeSingleKey.BTN_1, keyboard.J, 0); - binding.SetBinding(EssgeeSingleKey.BTN_2, keyboard.K, 0); - binding.SetBinding(EssgeeSingleKey.BTN_3, keyboard.U, 0); - binding.SetBinding(EssgeeSingleKey.BTN_4, keyboard.I, 0); - break; - case 1: - binding.SetBinding(EssgeeSingleKey.OPTION_1, keyboard.Keypad0, 0); - binding.SetBinding(EssgeeSingleKey.OPTION_2, keyboard.Delete, 0); - binding.SetBinding(EssgeeSingleKey.UP, keyboard.UpArrow, 0); - binding.SetBinding(EssgeeSingleKey.DOWN, keyboard.DownArrow, 0); - binding.SetBinding(EssgeeSingleKey.LEFT, keyboard.LeftArrow, 0); - binding.SetBinding(EssgeeSingleKey.RIGHT, keyboard.RightArrow, 0); - binding.SetBinding(EssgeeSingleKey.BTN_1, keyboard.Keypad1, 0); - binding.SetBinding(EssgeeSingleKey.BTN_2, keyboard.Keypad2, 0); - binding.SetBinding(EssgeeSingleKey.BTN_3, keyboard.Keypad3, 0); - binding.SetBinding(EssgeeSingleKey.BTN_4, keyboard.Keypad4, 0); - break; - } + case 0: + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Return, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.RightShift, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.W, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.S, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.A, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.D, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.J, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.K, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.U, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.I, 0); + break; + case 1: + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Keypad0, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.Delete, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.UpArrow, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.DownArrow, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftArrow, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.RightArrow, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.Keypad1, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.Keypad2, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.Keypad3, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.Keypad4, 0); + break; } - else if (device is PSVController_D psvCon && binding.ControllerIndex == 0) + } + public override void Bind(PSVController_D device, ControllerBinder controller) + { + switch (controller.ControllerIndex) { - binding.SetBinding(EssgeeSingleKey.OPTION_1, psvCon.Start, 0); - binding.SetBinding(EssgeeSingleKey.OPTION_2, psvCon.Select, 0); - binding.SetBinding(EssgeeSingleKey.UP, psvCon.Up, 0); - binding.SetBinding(EssgeeSingleKey.DOWN, psvCon.Down, 0); - binding.SetBinding(EssgeeSingleKey.LEFT, psvCon.Left, 0); - binding.SetBinding(EssgeeSingleKey.RIGHT, psvCon.Right, 0); - binding.SetBinding(EssgeeSingleKey.BTN_1, psvCon.Cross, 0); - binding.SetBinding(EssgeeSingleKey.BTN_2, psvCon.Circle, 0); - binding.SetBinding(EssgeeSingleKey.BTN_3, psvCon.Square, 0); - binding.SetBinding(EssgeeSingleKey.BTN_4, psvCon.Triangle, 0); - //PSV 摇杆 - binding.SetBinding(EssgeeSingleKey.UP, psvCon.LeftStick.UP, 1); - binding.SetBinding(EssgeeSingleKey.DOWN, psvCon.LeftStick.Down, 1); - binding.SetBinding(EssgeeSingleKey.LEFT, psvCon.LeftStick.Left, 1); - binding.SetBinding(EssgeeSingleKey.RIGHT, psvCon.LeftStick.Right, 1); + case 0: + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Start, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.Select, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.Up, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.Down, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.Left, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.Cross, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.Circle, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.Square, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.Triangle, 0); + + controller.SetBinding(EssgeeSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(EssgeeSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.LeftStick.Right, 1); + break; } } + public override void Bind(DualShockController_D device, ControllerBinder controller) + { + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Options, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.Share, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.Up, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.Down, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.Left, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.Cross, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.Circle, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.Square, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.Triangle, 0); + + controller.SetBinding(EssgeeSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(EssgeeSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.LeftStick.Right, 1); + } + public override void Bind(GamePad_D device, ControllerBinder controller) + { + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Start, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.Select, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.Up, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.Down, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.Left, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.South, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.East, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.West, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.North, 0); + + controller.SetBinding(EssgeeSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(EssgeeSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.LeftStick.Right, 1); + } + public override void Bind(XboxController_D device, ControllerBinder controller) + { + controller.SetBinding(EssgeeSingleKey.OPTION_1, device.Menu, 0); + controller.SetBinding(EssgeeSingleKey.OPTION_2, device.View, 0); + controller.SetBinding(EssgeeSingleKey.UP, device.Up, 0); + controller.SetBinding(EssgeeSingleKey.DOWN, device.Down, 0); + controller.SetBinding(EssgeeSingleKey.LEFT, device.Left, 0); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(EssgeeSingleKey.BTN_1, device.A, 0); + controller.SetBinding(EssgeeSingleKey.BTN_2, device.B, 0); + controller.SetBinding(EssgeeSingleKey.BTN_3, device.X, 0); + controller.SetBinding(EssgeeSingleKey.BTN_4, device.Y, 0); + + controller.SetBinding(EssgeeSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(EssgeeSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(EssgeeSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EssgeeSingleKey.RIGHT, device.LeftStick.Right, 1); + } } public class MasterSystemKeyBinding : EssgeeKeyBinding @@ -97,55 +153,11 @@ namespace AxibugEmuOnline.Client.Settings { public override RomPlatformType Platform => RomPlatformType.GameBoyColor; public override int ControllerCount => 1; - - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) - { - if (device is Keyboard_D keyboard) - { - switch (binding.ControllerIndex) - { - case 0: - binding.SetBinding(EssgeeSingleKey.OPTION_1, keyboard.Return, 0); - binding.SetBinding(EssgeeSingleKey.OPTION_2, keyboard.RightShift, 0); - binding.SetBinding(EssgeeSingleKey.UP, keyboard.W, 0); - binding.SetBinding(EssgeeSingleKey.DOWN, keyboard.S, 0); - binding.SetBinding(EssgeeSingleKey.LEFT, keyboard.A, 0); - binding.SetBinding(EssgeeSingleKey.RIGHT, keyboard.D, 0); - binding.SetBinding(EssgeeSingleKey.BTN_1, keyboard.J, 0); - binding.SetBinding(EssgeeSingleKey.BTN_2, keyboard.K, 0); - binding.SetBinding(EssgeeSingleKey.BTN_3, keyboard.U, 0); - binding.SetBinding(EssgeeSingleKey.BTN_4, keyboard.I, 0); - break; - } - } - } } public class GameBoyKeyBinding : EssgeeKeyBinding { public override RomPlatformType Platform => RomPlatformType.GameBoy; public override int ControllerCount => 1; - - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) - { - if (device is Keyboard_D keyboard) - { - switch (binding.ControllerIndex) - { - case 0: - binding.SetBinding(EssgeeSingleKey.OPTION_1, keyboard.Return, 0); - binding.SetBinding(EssgeeSingleKey.OPTION_2, keyboard.RightShift, 0); - binding.SetBinding(EssgeeSingleKey.UP, keyboard.W, 0); - binding.SetBinding(EssgeeSingleKey.DOWN, keyboard.S, 0); - binding.SetBinding(EssgeeSingleKey.LEFT, keyboard.A, 0); - binding.SetBinding(EssgeeSingleKey.RIGHT, keyboard.D, 0); - binding.SetBinding(EssgeeSingleKey.BTN_1, keyboard.J, 0); - binding.SetBinding(EssgeeSingleKey.BTN_2, keyboard.K, 0); - binding.SetBinding(EssgeeSingleKey.BTN_3, keyboard.U, 0); - binding.SetBinding(EssgeeSingleKey.BTN_4, keyboard.I, 0); - break; - } - } - } } public class GameGearKeyBinding : EssgeeKeyBinding diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs new file mode 100644 index 00000000..3001ea39 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs @@ -0,0 +1,17 @@ +using AxibugEmuOnline.Client.InputDevices; +using System; + +namespace AxibugEmuOnline.Client.Settings +{ + /// <summary> + /// 在所有<see cref="EmuCoreControllerKeyBinding{T}"/>的派生类中实现此接口以支持一种设备的绑定 + /// <para>一种<see cref="EmuCoreControllerKeyBinding{T}"/> + /// 一个<see cref="EmuCoreControllerKeyBinding{T}.ControllerBinder"/>可以与多种设备建立绑定,但设备类型不可重复</para> + /// </summary> + public interface IDeviceBinder<ENUM, DEVICE> + where ENUM : Enum + where DEVICE : InputDevice_D + { + void Bind(DEVICE device, EmuCoreControllerKeyBinding<ENUM>.ControllerBinder controller); + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs.meta new file mode 100644 index 00000000..0533689b --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/IDeviceBinder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b7c859b1adea6a5448ba60e43af3ccc6 \ No newline at end of file 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 27d9e50a..4d63326b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/KeyMapperSetting.cs @@ -2,7 +2,6 @@ using AxibugEmuOnline.Client.InputDevices; using AxibugProtobuf; using System; -using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; @@ -58,33 +57,31 @@ namespace AxibugEmuOnline.Client.Settings /// 模拟器核心控制器键位绑定器 /// </summary> /// <typeparam name="T"></typeparam> - public abstract class EmuCoreControllerKeyBinding<T> : EmuCoreControllerKeyBinding + public abstract class EmuCoreControllerKeyBinding<T> : EmuCoreControllerKeyBinding, + IDeviceBinder<T, Keyboard_D>, + IDeviceBinder<T, GamePad_D>, + IDeviceBinder<T, DualShockController_D>, + IDeviceBinder<T, XboxController_D>, + IDeviceBinder<T, PSVController_D> where T : Enum { - List<BindingPage> m_bindingPages = new List<BindingPage>(); + //每一个实例代表一个对应模拟器平台的控制器索引 + List<ControllerBinder> m_bindingPages = new List<ControllerBinder>(); public EmuCoreControllerKeyBinding() { + var types = GetType().GetInterfaces(); + for (int i = 0; i < ControllerCount; i++) { - m_bindingPages.Add(new BindingPage(i, this)); + m_bindingPages.Add(new ControllerBinder(i, this)); } - var keyboard = App.input.GetDevice<Keyboard_D>(); - if (keyboard != null) + foreach (var device in App.input.GetDevices()) { foreach (var binding in m_bindingPages) { - binding.RegistInputDevice(keyboard); - } - } - - var psvController = App.input.GetDevice<PSVController_D>(); - if (psvController != null) - { - foreach (var binding in m_bindingPages) - { - binding.RegistInputDevice(psvController); + binding.RegistInputDevice(device); } } @@ -94,12 +91,9 @@ namespace AxibugEmuOnline.Client.Settings private void InputDevicesMgr_OnDeviceConnected(InputDevice_D connectDevice) { - if (connectDevice is Keyboard_D) + foreach (var binding in m_bindingPages) { - foreach (var binding in m_bindingPages) - { - binding.RegistInputDevice(connectDevice); - } + binding.RegistInputDevice(connectDevice); } } @@ -109,30 +103,18 @@ namespace AxibugEmuOnline.Client.Settings { binding.UnregistInputDevice(lostDevice); } - if (lostDevice is Keyboard_D) //键盘丢失,立即查找还存在的键盘并建立连接 - { - var anotherKeyboard = App.input.GetDevice<Keyboard_D>(); - if (anotherKeyboard != null) - { - foreach (var binding in m_bindingPages) - { - binding.UnregistInputDevice(lostDevice); - } - } - } } - IEnumerable<T> DefineKeys() + internal void RaiseDeviceRegist(InputDevice_D device, ControllerBinder binding) { - return Enum.GetValues(typeof(T)).Cast<T>(); + if (device is Keyboard_D keyboard && this is IDeviceBinder<T, Keyboard_D> keyboardIn) keyboardIn.Bind(keyboard, binding); + if (device is GamePad_D gamePad && this is IDeviceBinder<T, GamePad_D> gamepadIn) gamepadIn.Bind(gamePad, binding); + if (device is DualShockController_D dsC && this is IDeviceBinder<T, DualShockController_D> dsIn) dsIn.Bind(dsC, binding); + if (device is XboxController_D xbC && this is IDeviceBinder<T, XboxController_D> xbIn) xbIn.Bind(xbC, binding); + if (device is PSVController_D psvC && this is IDeviceBinder<T, PSVController_D> psvIn) psvIn.Bind(psvC, binding); + else throw new NotImplementedException($"{device.GetType()}"); } - internal void RaiseDeviceRegist(InputDevice_D device, BindingPage binding) - { - OnRegistDevices(device, binding); - } - protected abstract void OnRegistDevices(InputDevice_D device, BindingPage binding); - public bool Start(T emuControl, int controllerIndex) { var binding = m_bindingPages[controllerIndex]; @@ -234,7 +216,7 @@ namespace AxibugEmuOnline.Client.Settings public class MapSetting : Dictionary<T, List<InputControl_C>> { } - public class BindingPage + public class ControllerBinder { Dictionary<Type, InputDevice_D> m_registedDevices = new Dictionary<Type, InputDevice_D>(); Dictionary<InputDevice_D, MapSetting> m_mapSetting = new Dictionary<InputDevice_D, MapSetting>(); @@ -242,7 +224,7 @@ namespace AxibugEmuOnline.Client.Settings public int ControllerIndex { get; } public EmuCoreControllerKeyBinding<T> Host { get; } - internal BindingPage(int controllerIndex, EmuCoreControllerKeyBinding<T> host) + internal ControllerBinder(int controllerIndex, EmuCoreControllerKeyBinding<T> host) { ControllerIndex = controllerIndex; Host = host; @@ -342,5 +324,10 @@ namespace AxibugEmuOnline.Client.Settings } } + public abstract void Bind(Keyboard_D device, ControllerBinder controller); + public abstract void Bind(GamePad_D device, ControllerBinder controller); + public abstract void Bind(DualShockController_D device, ControllerBinder controller); + public abstract void Bind(XboxController_D device, ControllerBinder controller); + public abstract void Bind(PSVController_D device, ControllerBinder controller); } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs index 8631ad58..39a2fe40 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/MAMEKeyBinding.cs @@ -1,5 +1,6 @@ using AxibugEmuOnline.Client.InputDevices; using AxibugProtobuf; +using UnityEngine.UIElements; namespace AxibugEmuOnline.Client.Settings { @@ -23,43 +24,120 @@ namespace AxibugEmuOnline.Client.Settings { public override int ControllerCount => 4; - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) + public override void Bind(Keyboard_D device, ControllerBinder controller) { - if (device is Keyboard_D keyboard) + switch (controller.ControllerIndex) { - switch (binding.ControllerIndex) - { - case 0: - binding.SetBinding(UMAMEKSingleKey.INSERT_COIN, keyboard.Q, 0); - binding.SetBinding(UMAMEKSingleKey.GAMESTART, keyboard.E, 0); - binding.SetBinding(UMAMEKSingleKey.UP, keyboard.W, 0); - binding.SetBinding(UMAMEKSingleKey.DOWN, keyboard.S, 0); - binding.SetBinding(UMAMEKSingleKey.LEFT, keyboard.A, 0); - binding.SetBinding(UMAMEKSingleKey.RIGHT, keyboard.D, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_A, keyboard.J, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_B, keyboard.K, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_C, keyboard.L, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_D, keyboard.U, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_E, keyboard.I, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_F, keyboard.O, 0); - break; - case 1: - binding.SetBinding(UMAMEKSingleKey.INSERT_COIN, keyboard.Delete, 0); - binding.SetBinding(UMAMEKSingleKey.GAMESTART, keyboard.PageDown, 0); - binding.SetBinding(UMAMEKSingleKey.UP, keyboard.UpArrow, 0); - binding.SetBinding(UMAMEKSingleKey.DOWN, keyboard.DownArrow, 0); - binding.SetBinding(UMAMEKSingleKey.LEFT, keyboard.LeftArrow, 0); - binding.SetBinding(UMAMEKSingleKey.RIGHT, keyboard.RightArrow, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_A, keyboard.Keypad1, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_B, keyboard.Keypad2, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_C, keyboard.Keypad3, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_D, keyboard.Keypad4, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_E, keyboard.Keypad5, 0); - binding.SetBinding(UMAMEKSingleKey.BTN_F, keyboard.Keypad6, 0); - break; - } + case 0: + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Q, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.E, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.W, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.S, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.A, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.D, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.J, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.K, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.L, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.U, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.I, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.O, 0); + break; + case 1: + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Delete, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.PageDown, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.UpArrow, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.DownArrow, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftArrow, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.RightArrow, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Keypad1, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Keypad2, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Keypad3, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Keypad4, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.Keypad5, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.Keypad6, 0); + break; } } + public override void Bind(DualShockController_D device, ControllerBinder controller) + { + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Share, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Options, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Square, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Cross, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Circle, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Triangle, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.R1, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.R2, 0); + + controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); + } + public override void Bind(GamePad_D device, ControllerBinder controller) + { + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Select, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Start, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.West, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.South, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.East, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.North, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.RightShoulder, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.RightTrigger, 0); + + controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); + } + public override void Bind(PSVController_D device, ControllerBinder controller) + { + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.Select, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Start, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.Square, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.Cross, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.Circle, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Triangle, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.L, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.R, 0); + + controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); + } + public override void Bind(XboxController_D device, ControllerBinder controller) + { + controller.SetBinding(UMAMEKSingleKey.INSERT_COIN, device.View, 0); + controller.SetBinding(UMAMEKSingleKey.GAMESTART, device.Menu, 0); + controller.SetBinding(UMAMEKSingleKey.UP, device.Up, 0); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.Down, 0); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.Left, 0); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.Right, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_A, device.X, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_B, device.A, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_C, device.B, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_D, device.Y, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_E, device.RightBumper, 0); + controller.SetBinding(UMAMEKSingleKey.BTN_F, device.RightTrigger, 0); + + controller.SetBinding(UMAMEKSingleKey.UP, device.LeftStick.Up, 1); + controller.SetBinding(UMAMEKSingleKey.DOWN, device.LeftStick.Down, 1); + controller.SetBinding(UMAMEKSingleKey.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(UMAMEKSingleKey.RIGHT, device.LeftStick.Right, 1); + } } public class NEOGEOKeyBinding : MAMEKeyBinding diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs index 3ab0e60e..39ddbade 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/NesKeyBinding.cs @@ -9,35 +9,100 @@ namespace AxibugEmuOnline.Client.Settings public override RomPlatformType Platform => RomPlatformType.Nes; public override int ControllerCount => 4; - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) + public override void Bind(Keyboard_D device, ControllerBinder controller) { - if (device is Keyboard_D keyboard) + switch (controller.ControllerIndex) { - switch (binding.ControllerIndex) - { - case 0: - binding.SetBinding(EnumButtonType.LEFT, keyboard.A, 0); - binding.SetBinding(EnumButtonType.RIGHT, keyboard.D, 0); - binding.SetBinding(EnumButtonType.UP, keyboard.W, 0); - binding.SetBinding(EnumButtonType.DOWN, keyboard.S, 0); - binding.SetBinding(EnumButtonType.A, keyboard.K, 0); - binding.SetBinding(EnumButtonType.B, keyboard.J, 0); - binding.SetBinding(EnumButtonType.SELECT, keyboard.V, 0); - binding.SetBinding(EnumButtonType.START, keyboard.B, 0); - binding.SetBinding(EnumButtonType.MIC, keyboard.M, 0); - break; - case 1: - binding.SetBinding(EnumButtonType.UP, keyboard.UpArrow, 0); - binding.SetBinding(EnumButtonType.DOWN, keyboard.DownArrow, 0); - binding.SetBinding(EnumButtonType.LEFT, keyboard.LeftArrow, 0); - binding.SetBinding(EnumButtonType.RIGHT, keyboard.RightArrow, 0); - binding.SetBinding(EnumButtonType.A, keyboard.Keypad2, 0); - binding.SetBinding(EnumButtonType.B, keyboard.Keypad1, 0); - binding.SetBinding(EnumButtonType.SELECT, keyboard.Keypad0, 0); - binding.SetBinding(EnumButtonType.START, keyboard.KeypadPeriod, 0); - break; - } + case 0: + controller.SetBinding(EnumButtonType.LEFT, device.A, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.D, 0); + controller.SetBinding(EnumButtonType.UP, device.W, 0); + controller.SetBinding(EnumButtonType.DOWN, device.S, 0); + controller.SetBinding(EnumButtonType.A, device.K, 0); + controller.SetBinding(EnumButtonType.B, device.J, 0); + controller.SetBinding(EnumButtonType.SELECT, device.V, 0); + controller.SetBinding(EnumButtonType.START, device.B, 0); + controller.SetBinding(EnumButtonType.MIC, device.M, 0); + break; + case 1: + controller.SetBinding(EnumButtonType.UP, device.UpArrow, 0); + controller.SetBinding(EnumButtonType.DOWN, device.DownArrow, 0); + controller.SetBinding(EnumButtonType.LEFT, device.LeftArrow, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.RightArrow, 0); + controller.SetBinding(EnumButtonType.A, device.Keypad2, 0); + controller.SetBinding(EnumButtonType.B, device.Keypad1, 0); + controller.SetBinding(EnumButtonType.SELECT, device.Keypad0, 0); + controller.SetBinding(EnumButtonType.START, device.KeypadPeriod, 0); + break; } } + public override void Bind(DualShockController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumButtonType.LEFT, device.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.Down, 0); + controller.SetBinding(EnumButtonType.A, device.Cross, 0); + controller.SetBinding(EnumButtonType.B, device.Square, 0); + controller.SetBinding(EnumButtonType.SELECT, device.Share, 0); + controller.SetBinding(EnumButtonType.START, device.Options, 0); + controller.SetBinding(EnumButtonType.MIC, device.L1, 0); + + controller.SetBinding(EnumButtonType.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EnumButtonType.RIGHT, device.LeftStick.Right, 1); + controller.SetBinding(EnumButtonType.UP, device.LeftStick.Up, 1); + controller.SetBinding(EnumButtonType.DOWN, device.LeftStick.Down, 1); + } + public override void Bind(GamePad_D device, ControllerBinder controller) + { + controller.SetBinding(EnumButtonType.LEFT, device.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.Down, 0); + controller.SetBinding(EnumButtonType.A, device.South, 0); + controller.SetBinding(EnumButtonType.B, device.West, 0); + controller.SetBinding(EnumButtonType.SELECT, device.Select, 0); + controller.SetBinding(EnumButtonType.START, device.Start, 0); + controller.SetBinding(EnumButtonType.MIC, device.LeftShoulder, 0); + + controller.SetBinding(EnumButtonType.LEFT, device.LeftStick.Left, 1); + controller.SetBinding(EnumButtonType.RIGHT, device.LeftStick.Right, 1); + controller.SetBinding(EnumButtonType.UP, device.LeftStick.Up, 1); + controller.SetBinding(EnumButtonType.DOWN, device.LeftStick.Down, 1); + } + public override void Bind(PSVController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumButtonType.LEFT, device.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.Down, 0); + controller.SetBinding(EnumButtonType.A, device.Cross, 0); + controller.SetBinding(EnumButtonType.B, device.Square, 0); + controller.SetBinding(EnumButtonType.SELECT, device.Select, 0); + controller.SetBinding(EnumButtonType.START, device.Start, 0); + controller.SetBinding(EnumButtonType.MIC, device.L, 0); + + controller.SetBinding(EnumButtonType.LEFT, device.LeftStick.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.LeftStick.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.LeftStick.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.LeftStick.Down, 0); + } + public override void Bind(XboxController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumButtonType.LEFT, device.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.Down, 0); + controller.SetBinding(EnumButtonType.A, device.A, 0); + controller.SetBinding(EnumButtonType.B, device.X, 0); + controller.SetBinding(EnumButtonType.SELECT, device.View, 0); + controller.SetBinding(EnumButtonType.START, device.Menu, 0); + controller.SetBinding(EnumButtonType.MIC, device.LeftBumper, 0); + + controller.SetBinding(EnumButtonType.LEFT, device.LeftStick.Left, 0); + controller.SetBinding(EnumButtonType.RIGHT, device.LeftStick.Right, 0); + controller.SetBinding(EnumButtonType.UP, device.LeftStick.Up, 0); + controller.SetBinding(EnumButtonType.DOWN, device.LeftStick.Down, 0); + } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs index caec9054..f749e14b 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/XMBKeyBinding.cs @@ -9,38 +9,94 @@ namespace AxibugEmuOnline.Client public override RomPlatformType Platform => RomPlatformType.Invalid; public override int ControllerCount => 2; - protected override void OnRegistDevices(InputDevice_D device, BindingPage binding) + public override void Bind(Keyboard_D device, ControllerBinder controller) { - if (device is Keyboard_D keyboard) + switch (controller.ControllerIndex) { - switch (binding.ControllerIndex) - { - case 0://设置标准UI控制 - //第一套控制布局 WSAD+JKLI - binding.SetBinding(EnumCommand.Back, keyboard.L, 0); - binding.SetBinding(EnumCommand.Enter, keyboard.K, 0); - binding.SetBinding(EnumCommand.OptionMenu, keyboard.I, 0); - binding.SetBinding(EnumCommand.SelectItemDown, keyboard.S, 0); - binding.SetBinding(EnumCommand.SelectItemLeft, keyboard.A, 0); - binding.SetBinding(EnumCommand.SelectItemRight, keyboard.D, 0); - binding.SetBinding(EnumCommand.SelectItemUp, keyboard.W, 0); + case 0://设置标准UI控制 //第一套控制布局 WSAD+JKLI + controller.SetBinding(EnumCommand.Back, device.L, 0); + controller.SetBinding(EnumCommand.Enter, device.K, 0); + controller.SetBinding(EnumCommand.OptionMenu, device.I, 0); + controller.SetBinding(EnumCommand.SelectItemDown, device.S, 0); + controller.SetBinding(EnumCommand.SelectItemLeft, device.A, 0); + controller.SetBinding(EnumCommand.SelectItemRight, device.D, 0); + controller.SetBinding(EnumCommand.SelectItemUp, device.W, 0); - //第二套控制布局 LOWB用 - binding.SetBinding(EnumCommand.Back, keyboard.Escape, 1); - binding.SetBinding(EnumCommand.Back, keyboard.Backspace, 2); - binding.SetBinding(EnumCommand.Enter, keyboard.Return, 1); - binding.SetBinding(EnumCommand.OptionMenu, keyboard.LeftShift, 1); - binding.SetBinding(EnumCommand.OptionMenu, keyboard.RightShift, 2); - binding.SetBinding(EnumCommand.SelectItemDown, keyboard.DownArrow, 1); - binding.SetBinding(EnumCommand.SelectItemLeft, keyboard.LeftArrow, 1); - binding.SetBinding(EnumCommand.SelectItemRight, keyboard.RightArrow, 1); - binding.SetBinding(EnumCommand.SelectItemUp, keyboard.UpArrow, 1); - break; - case 1://游戏中UI控制 - binding.SetBinding(EnumCommand.OptionMenu, keyboard.Escape, 0); - break; - } + //第二套控制布局 LOWB用 + controller.SetBinding(EnumCommand.Back, device.Escape, 1); + controller.SetBinding(EnumCommand.Back, device.Backspace, 2); + controller.SetBinding(EnumCommand.Enter, device.Return, 1); + controller.SetBinding(EnumCommand.OptionMenu, device.LeftShift, 1); + controller.SetBinding(EnumCommand.OptionMenu, device.RightShift, 2); + controller.SetBinding(EnumCommand.SelectItemDown, device.DownArrow, 1); + controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftArrow, 1); + controller.SetBinding(EnumCommand.SelectItemRight, device.RightArrow, 1); + controller.SetBinding(EnumCommand.SelectItemUp, device.UpArrow, 1); + break; + case 1://游戏中UI控制 + controller.SetBinding(EnumCommand.OptionMenu, device.Escape, 0); + break; } } + public override void Bind(DualShockController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumCommand.Back, device.Circle, 0); + controller.SetBinding(EnumCommand.Enter, device.Cross, 0); + controller.SetBinding(EnumCommand.OptionMenu, device.Options, 0); + controller.SetBinding(EnumCommand.SelectItemDown, device.Down, 0); + controller.SetBinding(EnumCommand.SelectItemLeft, device.Left, 0); + controller.SetBinding(EnumCommand.SelectItemRight, device.Right, 0); + controller.SetBinding(EnumCommand.SelectItemUp, device.Up, 0); + + controller.SetBinding(EnumCommand.SelectItemDown, device.LeftStick.Down, 1); + controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftStick.Left, 1); + controller.SetBinding(EnumCommand.SelectItemRight, device.LeftStick.Right, 1); + controller.SetBinding(EnumCommand.SelectItemUp, device.LeftStick.Up, 1); + } + public override void Bind(GamePad_D device, ControllerBinder controller) + { + controller.SetBinding(EnumCommand.Back, device.East, 0); + controller.SetBinding(EnumCommand.Enter, device.South, 0); + controller.SetBinding(EnumCommand.OptionMenu, device.Start, 0); + controller.SetBinding(EnumCommand.SelectItemDown, device.Down, 0); + controller.SetBinding(EnumCommand.SelectItemLeft, device.Left, 0); + controller.SetBinding(EnumCommand.SelectItemRight, device.Right, 0); + controller.SetBinding(EnumCommand.SelectItemUp, device.Up, 0); + + controller.SetBinding(EnumCommand.SelectItemDown, device.LeftStick.Down, 1); + controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftStick.Left, 1); + controller.SetBinding(EnumCommand.SelectItemRight, device.LeftStick.Right, 1); + controller.SetBinding(EnumCommand.SelectItemUp, device.LeftStick.Up, 1); + } + public override void Bind(PSVController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumCommand.Back, device.Circle, 0); + controller.SetBinding(EnumCommand.Enter, device.Cross, 0); + controller.SetBinding(EnumCommand.OptionMenu, device.Start, 0); + controller.SetBinding(EnumCommand.SelectItemDown, device.Down, 0); + controller.SetBinding(EnumCommand.SelectItemLeft, device.Left, 0); + controller.SetBinding(EnumCommand.SelectItemRight, device.Right, 0); + controller.SetBinding(EnumCommand.SelectItemUp, device.Up, 0); + + controller.SetBinding(EnumCommand.SelectItemDown, device.LeftStick.Down, 1); + controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftStick.Left, 1); + controller.SetBinding(EnumCommand.SelectItemRight, device.LeftStick.Right, 1); + controller.SetBinding(EnumCommand.SelectItemUp, device.LeftStick.Up, 1); + } + public override void Bind(XboxController_D device, ControllerBinder controller) + { + controller.SetBinding(EnumCommand.Back, device.B, 0); + controller.SetBinding(EnumCommand.Enter, device.A, 0); + controller.SetBinding(EnumCommand.OptionMenu, device.Menu, 0); + controller.SetBinding(EnumCommand.SelectItemDown, device.Down, 0); + controller.SetBinding(EnumCommand.SelectItemLeft, device.Left, 0); + controller.SetBinding(EnumCommand.SelectItemRight, device.Right, 0); + controller.SetBinding(EnumCommand.SelectItemUp, device.Up, 0); + + controller.SetBinding(EnumCommand.SelectItemDown, device.LeftStick.Down, 1); + controller.SetBinding(EnumCommand.SelectItemLeft, device.LeftStick.Left, 1); + controller.SetBinding(EnumCommand.SelectItemRight, device.LeftStick.Right, 1); + controller.SetBinding(EnumCommand.SelectItemUp, device.LeftStick.Up, 1); + } } } \ No newline at end of file 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 26cdf723..2243ef8a 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 @@ -7,7 +7,7 @@ namespace AxibugEmuOnline.Client.InputDevices /// </summary> public class Stick_C : InputControl_C { - public VirtualButton UP; + public VirtualButton Up; public VirtualButton Down; public VirtualButton Left; public VirtualButton Right; @@ -20,8 +20,8 @@ namespace AxibugEmuOnline.Client.InputDevices { var axis = GetVector2(); - UP.m_performing = axis.y > 0f; - UP.Update(); + Up.m_performing = axis.y > 0f; + Up.Update(); Down.m_performing = axis.y < 0f; Down.Update(); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs index 0de419b2..b41cc3cb 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs @@ -55,6 +55,14 @@ namespace AxibugEmuOnline.Client.InputDevices return null; } + /// <summary> + /// 获得所有存在的输入设备 + /// </summary> + /// <returns></returns> + public IEnumerable<InputDevice_D> GetDevices() + { + return m_devices.Values; + } /// <summary> 由外部驱动的逻辑更新入口 </summary> public void Update() 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 82f226ce..6f2c76ab 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs @@ -1,12 +1,8 @@ #if ENABLE_INPUT_SYSTEM -using Google.Protobuf.WellKnownTypes; -using NUnit.Framework.Internal; using System.Collections.Generic; -using UnityEditor.Experimental.GraphView; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.DualShock; -using UnityEngine.InputSystem.Haptics; using UnityEngine.InputSystem.XInput; namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem @@ -249,7 +245,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem mapper[ds_d.LeftStick] = ipDsGamePad.leftStick; mapper[ds_d.RightStick] = ipDsGamePad.rightStick; } - else if(device_d is XboxController_D xbox_d) + else if (device_d is XboxController_D xbox_d) { var ipXInputGamePad = ipdevice as XInputController; mapper[xbox_d.X] = ipXInputGamePad.xButton;