From 8007af0bc54dbed7f4ce79f9838c0fb41110b882 Mon Sep 17 00:00:00 2001 From: "ALIENJACK\\alien" <alienjack@foxmail.com> Date: Thu, 27 Mar 2025 11:54:10 +0800 Subject: [PATCH] =?UTF-8?q?InputControl=E7=9A=84=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E7=B1=BB=E6=8C=AA=E5=85=A5=E5=9F=BA=E6=9C=AC=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?,=E4=B8=8D=E5=86=8D=E6=AF=8F=E4=B8=AA=E8=AE=BE=E5=A4=87?= =?UTF-8?q?=E5=8D=95=E7=8B=AC=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../KeyMapperSetting/EssgeeKeyBinding.cs | 1 - .../KeyMapperSetting/KeyMapperSetting.cs | 12 +- .../Devices/InputControls/Button.cs | 17 +++ .../Devices/InputControls/InputControl.cs | 59 ++++++++++ .../Devices/InputControls/Stick.cs | 70 ++++++++++++ .../Devices/InputDevice.cs | 56 +++++++++ .../InputDevicesManager/Devices/Keyboard.cs | 6 +- .../Devices/PSVController.cs | 79 +------------ .../{InputResolver => }/DualWayDictionary.cs | 0 .../DualWayDictionary.cs.meta | 0 .../InputDevicesManager.cs | 107 ------------------ .../InputResolver/InputResolver.cs | 6 +- .../InputResolver/InputSystemResolver.cs | 9 +- .../InputResolver/PSVResolver.cs | 60 ++++------ 14 files changed, 242 insertions(+), 240 deletions(-) create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick.cs create mode 100644 AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice.cs rename AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/{InputResolver => }/DualWayDictionary.cs (100%) rename AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/{InputResolver => }/DualWayDictionary.cs.meta (100%) 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 a32ebb71..5423edc2 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppSettings/KeyMapperSetting/EssgeeKeyBinding.cs @@ -1,6 +1,5 @@ using AxibugEmuOnline.Client.InputDevices; using AxibugProtobuf; -using AxiInputSP; using System; namespace AxibugEmuOnline.Client.Settings 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 53ff6296..bfb5a1ba 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<InputDevice.InputControl>> { } + public class MapSetting : Dictionary<T, List<InputControl>> { } public class BindingPage { @@ -277,7 +277,7 @@ namespace AxibugEmuOnline.Client.Settings m_mapSetting.Remove(device); } - public void SetBinding(T emuBtn, InputDevice.InputControl key, int settingSlot) + public void SetBinding(T emuBtn, InputControl 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<InputDevice.InputControl>(); + settingList = new List<InputControl>(); setting[emuBtn] = settingList; } @@ -297,7 +297,7 @@ namespace AxibugEmuOnline.Client.Settings settingList[settingSlot] = key; } - public InputDevice.InputControl GetBinding(T emuBtn, InputDevice device, int settingSlot) + public InputControl GetBinding(T emuBtn, InputDevice 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<InputDevice.InputControl> m_caches = new List<InputDevice.InputControl>(); - public IEnumerable<InputDevice.InputControl> GetBinding(T emuBtn) + private List<InputControl> m_caches = new List<InputControl>(); + public IEnumerable<InputControl> GetBinding(T emuBtn) { m_caches.Clear(); diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button.cs new file mode 100644 index 00000000..cc166856 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Button.cs @@ -0,0 +1,17 @@ +namespace AxibugEmuOnline.Client.InputDevices +{ + /// <summary> + /// 按键类型的输入控件 + /// </summary> + public class Button : InputControl + { + string m_controlName; + + public Button(InputDevice device, string controlName) : base(device) + { + m_controlName = controlName; + } + + public override string ControlName => m_controlName; + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl.cs new file mode 100644 index 00000000..9f8f811d --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/InputControl.cs @@ -0,0 +1,59 @@ +using UnityEngine; + +namespace AxibugEmuOnline.Client.InputDevices +{ + /// <summary> + /// 输入设备的抽象控件接口 + /// </summary> + public abstract class InputControl + { + /// <summary> 控件所属设备 </summary> + public InputDevice Device { get; internal set; } + + /// <summary> 获取该控件是否在当前调用帧被激发 </summary> + public bool Start { get; private set; } + /// <summary> 获取该控件是否在当前调用帧被释放 </summary> + public bool Release { get; private set; } + + bool m_performingLastFrame; + /// <summary> 获取该控件是否在当前调用帧是否处于活动状态 </summary> + public virtual bool Performing => Device.Resolver.CheckPerforming(this); + + /// <summary> 获得该控件的以二维向量表达的值 </summary> + /// <returns></returns> + public virtual Vector2 GetVector2() => Device.Resolver.GetVector2(this); + /// <summary> 获得该控件的以浮点数表达的值 </summary> + public virtual float GetFlaot() => Device.Resolver.GetFloat(this); + + internal void Update() + { + UpdateReleaseStartState(); + OnUpdate(); + } + + private void UpdateReleaseStartState() + { + var oldPerforming = m_performingLastFrame; + var newPerforming = Performing; + + Start = false; + Release = false; + if (oldPerforming != newPerforming) + { + if (oldPerforming == false) Start = true; + else Release = true; + } + m_performingLastFrame = Performing; + } + + protected virtual void OnUpdate() { } + + /// <summary> 控件名,这个控件名称必须是唯一的 </summary> + public abstract string ControlName { get; } + + internal InputControl(InputDevice device) + { + Device = device; + } + } +} \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick.cs new file mode 100644 index 00000000..227647c6 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputControls/Stick.cs @@ -0,0 +1,70 @@ +using UnityEngine; + +namespace AxibugEmuOnline.Client.InputDevices +{ + /// <summary> + /// 摇杆类型的输入控件,支持的返回值为Vector2 + /// </summary> + public class Stick : InputControl + { + string m_controlName; + public override string ControlName => m_controlName; + + 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(InputDevice device, string controlName) : base(device) + { + m_controlName = controlName; + + UP = new VirtualButton(device); + Down = new VirtualButton(device); + Left = new VirtualButton(device); + Right = new VirtualButton(device); + } + + protected override void OnUpdate() + { + var axis = GetVector2(); + + UP.m_performing = axis.y > 0f; + UP.Update(); + + Down.m_performing = axis.y < 0f; + Down.Update(); + + Left.m_performing = axis.x < 0f; + Left.Update(); + + Right.m_performing = axis.x > 0f; + Right.Update(); + } + + + public class VirtualButton : InputControl + { + internal bool m_performing; + + public VirtualButton(InputDevice device) : base(device) { } + + public override bool Performing + { + get => m_performing; + } + + public override Vector2 GetVector2() + { + return default; + } + + public override float GetFlaot() + { + return Performing ? 1 : 0; + } + + public override string ControlName => "VirtualStickButton"; + } + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice.cs new file mode 100644 index 00000000..e8f17bc6 --- /dev/null +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/InputDevice.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; + +namespace AxibugEmuOnline.Client.InputDevices +{ + public abstract class InputDevice + { + public string UniqueName => m_resolver.GetDeviceName(this); + + /// <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, InputControl> m_controlMapper = new Dictionary<string, InputControl>(); + protected InputResolver m_resolver; + public InputDevice(InputResolver resolver) + { + m_resolver = resolver; + + foreach (var control in DefineControls()) + { + m_controlMapper.Add(control.ControlName, control); + } + } + + public void Update() + { + AnyKeyDown = false; + + foreach (var control in m_controlMapper.Values) + { + control.Update(); + if (control.Start) + { + AnyKeyDown = true; + } + } + } + + /// <summary> 用于列出这个输入设备的所有输入控件实例 </summary> + /// <returns></returns> + protected abstract List<InputControl> DefineControls(); + + /// <summary> 通过控件名称,找到对应的控件 </summary> + /// <param name="keyName"></param> + /// <returns></returns> + public InputControl FindControlByName(string controlName) + { + m_controlMapper.TryGetValue(controlName, out var key); + return key; + } + + } +} diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard.cs index 5daa7d32..a85464a2 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/Keyboard.cs @@ -23,17 +23,15 @@ namespace AxibugEmuOnline.Client.InputDevices return keys; } - public class KeyboardKey : InputControl + public class KeyboardKey : Button { internal KeyCode m_keycode; internal KeyboardKey(KeyCode listenKey, KeyBoard keyboard) - : base(keyboard) + : base(keyboard, listenKey.ToString()) { m_keycode = listenKey; } - - public override string ControlName => m_keycode.ToString(); } } diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController.cs index 7b037956..9ebbbf72 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/Devices/PSVController.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { @@ -46,82 +45,10 @@ namespace AxibugEmuOnline.Client.InputDevices Down = new Button(this, "DOWN"); Left = new Button(this, "LEFT"); + LeftStick = new Stick(this, nameof(LeftStick)); + RightStick = new Stick(this, nameof(RightStick)); + return result; } - - public class Button : InputControl - { - internal string m_controlName; - - public Button(InputDevice device, string controlName) : base(device) - { - m_controlName = controlName; - } - - public override string ControlName => m_controlName; - } - - public class Stick : InputControl - { - internal bool m_left; - - 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(InputDevice device, bool left) : base(device) - { - m_left = left; - - UP = new VirtualButton(device); - Down = new VirtualButton(device); - Left = new VirtualButton(device); - Right = new VirtualButton(device); - } - - protected override void OnUpdate() - { - var axis = GetVector2(); - - UP.m_performing = axis.y > 0f; - UP.Update(); - - Down.m_performing = axis.y < 0f; - Down.Update(); - - Left.m_performing = axis.x < 0f; - Left.Update(); - - Right.m_performing = axis.x > 0f; - Right.Update(); - } - - public override string ControlName => $"{nameof(Stick)}_{(m_left ? "left" : "right")}"; - - public class VirtualButton : InputControl - { - internal bool m_performing; - - public VirtualButton(InputDevice device) : base(device) { } - - public override bool Performing - { - get => m_performing; - } - - public override Vector2 GetVector2() - { - return default; - } - - public override float GetFlaot() - { - return Performing ? 1 : 0; - } - - public override string ControlName => "VirtualStickButton"; - } - } } } \ No newline at end of file diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/DualWayDictionary.cs similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/DualWayDictionary.cs diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs.meta b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/DualWayDictionary.cs.meta similarity index 100% rename from AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/DualWayDictionary.cs.meta rename to AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/DualWayDictionary.cs.meta diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs index b4fff468..7dc4e2de 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputDevicesManager.cs @@ -62,111 +62,4 @@ namespace AxibugEmuOnline.Client.InputDevices foreach (var device in m_devices.Values) device.Update(); } } - - public abstract class InputDevice - { - public string UniqueName => m_resolver.GetDeviceName(this); - - /// <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, InputControl> m_controlMapper = new Dictionary<string, InputControl>(); - protected InputResolver m_resolver; - public InputDevice(InputResolver resolver) - { - m_resolver = resolver; - - foreach (var control in DefineControls()) - { - m_controlMapper.Add(control.ControlName, control); - } - } - - public void Update() - { - AnyKeyDown = false; - - foreach (var control in m_controlMapper.Values) - { - control.Update(); - if (control.Start) - { - AnyKeyDown = true; - } - } - } - - /// <summary> 用于列出这个输入设备的所有输入控件实例 </summary> - /// <returns></returns> - protected abstract List<InputControl> DefineControls(); - - /// <summary> 通过控件名称,找到对应的控件 </summary> - /// <param name="keyName"></param> - /// <returns></returns> - public InputControl FindControlByName(string controlName) - { - m_controlMapper.TryGetValue(controlName, out var key); - return key; - } - - /// <summary> - /// 输入设备的抽象控件接口 - /// </summary> - public abstract class InputControl - { - /// <summary> 控件所属设备 </summary> - public InputDevice Device { get; internal set; } - - /// <summary> 获取该控件是否在当前调用帧被激发 </summary> - public bool Start { get; private set; } - /// <summary> 获取该控件是否在当前调用帧被释放 </summary> - public bool Release { get; private set; } - - bool m_performingLastFrame; - /// <summary> 获取该控件是否在当前调用帧是否处于活动状态 </summary> - public virtual bool Performing => Device.Resolver.CheckPerforming(this); - - /// <summary> 获得该控件的以二维向量表达的值 </summary> - /// <returns></returns> - public virtual Vector2 GetVector2() => Device.Resolver.GetVector2(this); - /// <summary> 获得该控件的以浮点数表达的值 </summary> - public virtual float GetFlaot() => Device.Resolver.GetFloat(this); - - internal void Update() - { - UpdateReleaseStartState(); - OnUpdate(); - } - - private void UpdateReleaseStartState() - { - var oldPerforming = m_performingLastFrame; - var newPerforming = Performing; - - Start = false; - Release = false; - if (oldPerforming != newPerforming) - { - if (oldPerforming == false) Start = true; - else Release = true; - } - m_performingLastFrame = Performing; - } - - protected virtual void OnUpdate() { } - - /// <summary> 控件名,这个控件名称必须是唯一的 </summary> - public abstract string ControlName { get; } - - internal InputControl(InputDevice device) - { - Device = device; - } - } - - } } \ 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 390eafbd..80692459 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 : InputDevice.InputControl; - public abstract Vector2 GetVector2<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputDevice.InputControl; - public abstract float GetFloat<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputDevice.InputControl; + public abstract bool CheckPerforming<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl; + public abstract Vector2 GetVector2<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl; + public abstract float GetFloat<CONTROLLER>(CONTROLLER control) where CONTROLLER : InputControl; /// <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 49a03c53..9e121552 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/InputSystemResolver.cs @@ -1,7 +1,6 @@ #if ENABLE_INPUT_SYSTEM using System.Collections.Generic; using UnityEngine; -using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using IP = UnityEngine.InputSystem.InputSystem; using IPDevice = UnityEngine.InputSystem.InputDevice; @@ -9,8 +8,8 @@ using IPKeyboard = UnityEngine.InputSystem.Keyboard; namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem { - /// <summary> InputSystem对接类 </summary> - public partial class InputSystemResolver : InputResolver + /// <summary> 基于UnityInputSystem实现的输入解决器 </summary> + public class InputSystemResolver : InputResolver { DualWayDictionary<IPDevice, InputDevice> m_devices = new DualWayDictionary<IPDevice, InputDevice>(); @@ -101,10 +100,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem { throw new System.NotImplementedException(); } - } - public partial class InputSystemResolver : InputResolver - { static ButtonControl GetIPKeyboardKey(IPKeyboard keyboard, KeyCode key) { switch (key) @@ -228,6 +224,7 @@ namespace AxibugEmuOnline.Client.InputDevices.ForInputSystem 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/InputResolver/PSVResolver.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/PSVResolver.cs index 1c7ee738..6f95e0b2 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/PSVResolver.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/InputDevicesManager/InputResolver/PSVResolver.cs @@ -1,11 +1,9 @@ -using NUnit.Framework.Internal; -using System.Collections.Generic; +using System.Collections.Generic; using UnityEngine; -using static Essgee.Emulation.Audio.DMGAudio; -using static VirtualNes.Core.APU_INTERNAL; namespace AxibugEmuOnline.Client.InputDevices.ForPSV { + /// <summary> PSV特化输入解决器,只能用于PSV平台,并且只支持PSV控制器 </summary> public class PSVResolver : InputResolver { List<InputDevice> m_devices = new List<InputDevice>(); @@ -38,24 +36,21 @@ namespace AxibugEmuOnline.Client.InputDevices.ForPSV { if (control.Device is PSVController psvCon) { - if (control is PSVController.Button button) + if (control == psvCon.Cross) return Input.GetKey(KeyCode.Joystick1Button0); + else if (control == psvCon.Circle) return Input.GetKey(KeyCode.Joystick1Button1); + else if (control == psvCon.Square) return Input.GetKey(KeyCode.Joystick1Button2); + else if (control == psvCon.Triangle) return Input.GetKey(KeyCode.Joystick1Button3); + else if (control == psvCon.L) return Input.GetKey(KeyCode.Joystick1Button4); + else if (control == psvCon.R) return Input.GetKey(KeyCode.Joystick1Button5); + else if (control == psvCon.Select) return Input.GetKey(KeyCode.Joystick1Button6); + else if (control == psvCon.Start) return Input.GetKey(KeyCode.Joystick1Button7); + else if (control == psvCon.Up) return Input.GetKey(KeyCode.Joystick1Button8); + else if (control == psvCon.Right) return Input.GetKey(KeyCode.Joystick1Button9); + else if (control == psvCon.Down) return Input.GetKey(KeyCode.Joystick1Button10); + else if (control == psvCon.Left) return Input.GetKey(KeyCode.Joystick1Button11); + else if (control == psvCon.LeftStick || control == psvCon.RightStick) { - if (button == psvCon.Cross) return Input.GetKey(KeyCode.Joystick1Button0); - else if (button == psvCon.Circle) return Input.GetKey(KeyCode.Joystick1Button1); - else if (button == psvCon.Square) return Input.GetKey(KeyCode.Joystick1Button2); - else if (button == psvCon.Triangle) return Input.GetKey(KeyCode.Joystick1Button3); - else if (button == psvCon.L) return Input.GetKey(KeyCode.Joystick1Button4); - else if (button == psvCon.R) return Input.GetKey(KeyCode.Joystick1Button5); - else if (button == psvCon.Select) return Input.GetKey(KeyCode.Joystick1Button6); - else if (button == psvCon.Start) return Input.GetKey(KeyCode.Joystick1Button7); - else if (button == psvCon.Up) return Input.GetKey(KeyCode.Joystick1Button8); - else if (button == psvCon.Right) return Input.GetKey(KeyCode.Joystick1Button9); - else if (button == psvCon.Down) return Input.GetKey(KeyCode.Joystick1Button10); - else if (button == psvCon.Left) return Input.GetKey(KeyCode.Joystick1Button11); - } - else if (control is PSVController.Stick stick) - { - var vec2 = stick.GetVector2(); + var vec2 = control.GetVector2(); return vec2.x != 0 || vec2.y != 0; } } @@ -65,24 +60,15 @@ namespace AxibugEmuOnline.Client.InputDevices.ForPSV public override Vector2 GetVector2<CONTROLLER>(CONTROLLER control) { - if (control.Device is PSVController) + if (control.Device is PSVController psvCon) { - if (control is PSVController.Stick stick) + if (control == psvCon.LeftStick) { - Vector2 result = Vector2.zero; - - if (stick.m_left) - { - result.x = Input.GetAxis("Joy1 Axis X"); - result.y = Input.GetAxis("Joy1 Axis Y"); - } - else - { - result.x = Input.GetAxis("Joy1 Axis 4"); - result.y = Input.GetAxis("Joy1 Axis 5"); - } - - return result; + return new Vector2(Input.GetAxis("Joy1 Axis X"), Input.GetAxis("Joy1 Axis Y")); + } + else if (control == psvCon.RightStick) + { + return new Vector2(Input.GetAxis("Joy1 Axis 4"), Input.GetAxis("Joy1 Axis 5")); } }