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);
}
}
}