From ad6d34ad13c2f860a3c1101b125d26e92d86e73b Mon Sep 17 00:00:00 2001 From: sin365 <353374337@qq.com> Date: Wed, 5 Mar 2025 18:03:06 +0800 Subject: [PATCH] fixed axiinput --- .../AxiInput.Settings/GamingMultiKeysSetting.cs | 2 +- .../AxiInput.Settings/UMAMEMultiKeysSetting.cs | 2 +- .../AxiInput.Settings/XMBMultiKeysSetting.cs | 3 ++- .../UI/CommandDispatcher/CommandListener.cs | 17 ++++++++++++----- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/GamingMultiKeysSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/GamingMultiKeysSetting.cs index 8aac4e3f..ae206c73 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/GamingMultiKeysSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/GamingMultiKeysSetting.cs @@ -102,7 +102,7 @@ namespace Assets.Script.AppMain.AxiInput.Settings if (AxiInputArr == null) return false; - for (int i = 0; AxiInputArr.Length > 0; i++) + for (int i = 0; i < AxiInputArr.Length; i++) { if (AxiInputArr[i].IsKey()) return true; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/UMAMEMultiKeysSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/UMAMEMultiKeysSetting.cs index 518a52e5..d119a072 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/UMAMEMultiKeysSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/UMAMEMultiKeysSetting.cs @@ -162,7 +162,7 @@ namespace Assets.Script.AppMain.AxiInput.Settings if (AxiInputArr == null) return false; - for (int i = 0; AxiInputArr.Length > 0; i++) + for (int i = 0; i < AxiInputArr.Length; i++) { if (AxiInputArr[i].IsKey()) return true; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/XMBMultiKeysSetting.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/XMBMultiKeysSetting.cs index ef1b6294..629b3094 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/XMBMultiKeysSetting.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/AxiInput.Settings/XMBMultiKeysSetting.cs @@ -55,6 +55,7 @@ namespace Assets.Script.AppMain.AxiInput.Settings controllers[0].SetKey((ulong)EnumCommand.SelectItemLeft, AxiInputEx.ByKeyCode(KeyCode.A)); controllers[0].SetKey((ulong)EnumCommand.SelectItemRight, AxiInputEx.ByKeyCode(KeyCode.D)); controllers[0].SetKey((ulong)EnumCommand.Enter, AxiInputEx.ByKeyCode(KeyCode.J)); + controllers[0].SetKey((ulong)EnumCommand.Enter, AxiInputEx.ByKeyCode(KeyCode.Return)); controllers[0].SetKey((ulong)EnumCommand.Back, AxiInputEx.ByKeyCode(KeyCode.K)); controllers[0].SetKey((ulong)EnumCommand.OptionMenu, AxiInputEx.ByKeyCode(KeyCode.I)); @@ -132,7 +133,7 @@ namespace Assets.Script.AppMain.AxiInput.Settings if (AxiInputArr == null) return false; - for (int i = 0; AxiInputArr.Length > 0; i++) + for (int i = 0; i < AxiInputArr.Length; i++) { if (AxiInputArr[i].IsKey()) return true; diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/CommandDispatcher/CommandListener.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/CommandDispatcher/CommandListener.cs index 35725ae7..e865e10e 100644 --- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/CommandDispatcher/CommandListener.cs +++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/CommandDispatcher/CommandListener.cs @@ -1,8 +1,9 @@ using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.Manager; +using System.CodeDom.Compiler; using System.Collections.Generic; +using System.Linq; using UnityEngine; -using static UnityEditor.Progress; namespace AxibugEmuOnline.Client { @@ -21,6 +22,8 @@ namespace AxibugEmuOnline.Client // if (Input.GetKeyDown(item.Key)) m_commands.Add(new CommandState { Cmd = item.Value, Cancel = false }); // if (Input.GetKeyUp(item.Key)) m_commands.Add(new CommandState { Cmd = item.Value, Cancel = true }); //} + + //不再依赖KeyDown KeyUp的做法,兼容UGUI,或者Axis if (m_checkCmds != null) { foreach (var cmd in m_checkCmds) @@ -41,11 +44,15 @@ namespace AxibugEmuOnline.Client { //var cfg = (Dictionary)changer.GetConfig(); singleKeysSetting = changer.GetKeySetting(); - m_dictLastState.Clear(); + App.log.Debug($"CommandListener ApplyKeyMapper | {Time.frameCount} {changer.Name}"); EnumCommand[] arr = changer.GetConfig(); - for (int i = 0; i < arr.Length; i++) + //不要直接清m_dictLastState.Clear(),同样的Key维持状态,避免造成多余CommandState + EnumCommand[] temp = m_dictLastState.Keys.ToArray(); + //仅添加新增 + foreach (var cmd in arr) { - m_dictLastState[arr[i]] = false; + if(!m_dictLastState.ContainsKey(cmd)) + m_dictLastState[cmd] = false; } m_checkCmds = arr; } @@ -56,7 +63,7 @@ namespace AxibugEmuOnline.Client { foreach (var executer in executers) { - App.log.Debug($"{cmd.Cmd}|{cmd.Cancel}"); + App.log.Debug($"CommandListener GetCommand | {Time.frameCount}|{executer.name}| {cmd.Cmd}|{cmd.Cancel}"); executer.ExecuteCommand(cmd.Cmd, cmd.Cancel); } }