diff --git a/src/BizHawk.Client.Common/Controller.cs b/src/BizHawk.Client.Common/Controller.cs index 071fd13dac..1b09dc3b0f 100644 --- a/src/BizHawk.Client.Common/Controller.cs +++ b/src/BizHawk.Client.Common/Controller.cs @@ -110,7 +110,10 @@ namespace BizHawk.Client.Common { if (_haptics.TryGetValue(kvp.Key, out var strength)) { - finalHostController.SetHapticChannelStrength(kvp.Value.GamepadPrefix + kvp.Value.Channel, (int) ((double) strength * kvp.Value.Prescale)); + foreach (var hostChannel in kvp.Value.Channels!.Split('+')) + { + finalHostController.SetHapticChannelStrength(kvp.Value.GamepadPrefix + hostChannel, (int) ((double) strength * kvp.Value.Prescale)); + } } } } diff --git a/src/BizHawk.Client.Common/config/FeedbackBind.cs b/src/BizHawk.Client.Common/config/FeedbackBind.cs index 49ba11c031..207e94d763 100644 --- a/src/BizHawk.Client.Common/config/FeedbackBind.cs +++ b/src/BizHawk.Client.Common/config/FeedbackBind.cs @@ -6,7 +6,8 @@ namespace BizHawk.Client.Common { public struct FeedbackBind { - public string? Channel; + /// may be a '+'-delimited list (e.g. "Left+Right"), which will be passed through the input pipeline to + public string? Channels; /// "X# "/"J# " (with the trailing space) public string? GamepadPrefix; @@ -16,10 +17,10 @@ namespace BizHawk.Client.Common public float Prescale; - public FeedbackBind(string prefix, string channel, float prescale) + public FeedbackBind(string prefix, string channels, float prescale) { GamepadPrefix = prefix; - Channel = channel; + Channels = channels; Prescale = prescale; } } diff --git a/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbackBindControl.cs b/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbackBindControl.cs index c7ac6023b8..7d896bff98 100644 --- a/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbackBindControl.cs +++ b/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbackBindControl.cs @@ -24,7 +24,7 @@ namespace BizHawk.Client.EmuHawk public FeedbackBindControl(string vChannel, FeedbackBind existingBind, IHostInputAdapter hostInputAdapter) { - BoundChannels = existingBind.Channel ?? string.Empty; + BoundChannels = existingBind.Channels ?? string.Empty; BoundGamepadPrefix = existingBind.GamepadPrefix ?? string.Empty; Prescale = existingBind.IsZeroed ? 1.0f : existingBind.Prescale; VChannelName = vChannel; diff --git a/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbacksBindPanel.cs b/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbacksBindPanel.cs index 1b83c5b19c..ed7c52f44e 100644 --- a/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbacksBindPanel.cs +++ b/src/BizHawk.Client.EmuHawk/config/ControllerConfig/FeedbacksBindPanel.cs @@ -36,10 +36,7 @@ namespace BizHawk.Client.EmuHawk foreach (var c in _flpMain.Controls.OfType()) { if (string.IsNullOrEmpty(c.BoundGamepadPrefix)) continue; - foreach (var channel in c.BoundChannels.Split('+')) - { - saveTo[c.VChannelName] = new(c.BoundGamepadPrefix, channel, c.Prescale); - } + saveTo[c.VChannelName] = new(c.BoundGamepadPrefix, c.BoundChannels, c.Prescale); } } }