diff --git a/Assets/dll/mupen64plus-input-bkm.dll b/Assets/dll/mupen64plus-input-bkm.dll index 434c6d1a03..f3d8a91c19 100644 Binary files a/Assets/dll/mupen64plus-input-bkm.dll and b/Assets/dll/mupen64plus-input-bkm.dll differ diff --git a/libmupen64plus/mupen64plus-input-bkm/mupen64plus-input-bkm/mupen64plus-input-bkm.vcxproj b/libmupen64plus/mupen64plus-input-bkm/mupen64plus-input-bkm/mupen64plus-input-bkm.vcxproj index 6d95c34e2d..deb25ec98c 100644 --- a/libmupen64plus/mupen64plus-input-bkm/mupen64plus-input-bkm/mupen64plus-input-bkm.vcxproj +++ b/libmupen64plus/mupen64plus-input-bkm/mupen64plus-input-bkm/mupen64plus-input-bkm.vcxproj @@ -21,6 +21,7 @@ {3D8BD211-6002-4698-B5C1-A0F3146B6ACF} mupen64plusinputbkm + 10.0 diff --git a/libmupen64plus/mupen64plus-input-bkm/plugin.c b/libmupen64plus/mupen64plus-input-bkm/plugin.c index 953a45a618..8e1a15965e 100644 --- a/libmupen64plus/mupen64plus-input-bkm/plugin.c +++ b/libmupen64plus/mupen64plus-input-bkm/plugin.c @@ -424,6 +424,7 @@ EXPORT void CALL SetInputCallback(int (*inputCallback)(int i)) ---------------------------------------------------------------------- */ EXPORT void CALL SetRumbleCallback(void (*rumbleCallback)(int Control, int on)) { + l_setrumbleCallback = rumbleCallback; } /* ---------------------------------------------------------------------- diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64Input.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64Input.cs index da9b5f13be..e40b871963 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64Input.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64Input.cs @@ -18,7 +18,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 _emuCore = emuCore; _api = new mupen64plusInputApi(core); - _api.SetM64PInputCallback(GetControllerInput); + _api.SetM64PInputCallbacks(GetControllerInput, SetRumble); core.VInterrupt += ShiftInputPolledBools; for (int i = 0; i < controllerSettings.Length; ++i) @@ -86,6 +86,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 return value; } + private void SetRumble(int player, int bIsActive) + => Controller.SetHapticChannelStrength($"P{player + 1} Rumble Pak", bIsActive == 0 ? 0 : int.MaxValue); + /// /// Read all buttons from a controller and translate them /// into a form the N64 understands diff --git a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs index 57094e9f22..259220cc70 100644 --- a/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs +++ b/src/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusInputApi.cs @@ -58,11 +58,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi private readonly SetControllerConnected InpSetControllerConnected; - /// - /// Event fired when mupen changes rumble pak status - /// - private event RumbleCallback OnRumbleChange; - public mupen64plusInputApi(mupen64plusApi core) { T GetInputDelegate(string proc) where T : Delegate => mupen64plusApi.GetTypedDelegate(InpDll, proc); @@ -70,25 +65,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi InpDll = core.AttachPlugin(mupen64plusApi.m64p_plugin_type.M64PLUGIN_INPUT, "mupen64plus-input-bkm.dll"); - mupen64plusApi.m64p_error result; InpSetInputCallback = GetInputDelegate("SetInputCallback"); InpSetRumbleCallback = GetInputDelegate("SetRumbleCallback"); InpSetControllerPakType = GetInputDelegate("SetControllerPakType"); InpSetControllerConnected = GetInputDelegate("SetControllerConnected"); - - m64pRumbleCallback = new RumbleCallback(FireOnRumbleChange); - result = InpSetRumbleCallback(m64pRumbleCallback); } - public void SetM64PInputCallback(InputCallback inputCallback) + public void SetM64PInputCallbacks(InputCallback inputCallback, RumbleCallback rumbleCallback) { - InpInputCallback = inputCallback; - InpSetInputCallback(InpInputCallback); - } - - private void FireOnRumbleChange(int Control, int on) - { - OnRumbleChange?.Invoke(Control, @on); + InpSetInputCallback(InpInputCallback = inputCallback); + _ = InpSetRumbleCallback(m64pRumbleCallback = rumbleCallback); } public void SetM64PControllerPakType(int controller, N64SyncSettings.N64ControllerSettings.N64ControllerPakType type)