diff options
| author | mpnico <mpnico@gmail.com> | 2021-08-05 00:39:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-05 00:39:40 +0200 |
| commit | 70f79e689bc947313aab11c41e59928ce43be517 (patch) | |
| tree | db4aecd13e2895c650a6cf2cd84966ab06b44648 /Ryujinx.Input/HLE/NpadController.cs | |
| parent | 46ffc81d90bd3a8f2d24c2997166d22f12ecbbb6 (diff) | |
Implement vibrations (#2468)
* First working vibration implementation
* Fix Infinite Rumble in SDL2Mouse
* Stop ignoring one vibValues every 2
* Remove RumbleInfinity as suggested
* Reworked all the vibration handle / calculation
* Revert HidVibrationDevicePosition changes
* Add UI to enable and tune rumble
* Remove some stub logs
* Add PlayerIndex in rumble debug log
* Fix all requested changes
* Implements hid::GetVibrationDeviceInfo
* Better implements HidVibrationValue.Equals/GetHashCode
* Added requested changes from code review
* Last fixes from review
* Update configuration file version for rebase
Diffstat (limited to 'Ryujinx.Input/HLE/NpadController.cs')
| -rw-r--r-- | Ryujinx.Input/HLE/NpadController.cs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/Ryujinx.Input/HLE/NpadController.cs b/Ryujinx.Input/HLE/NpadController.cs index 3559b015..79c18ecf 100644 --- a/Ryujinx.Input/HLE/NpadController.cs +++ b/Ryujinx.Input/HLE/NpadController.cs @@ -2,8 +2,11 @@ using Ryujinx.Common.Configuration.Hid; using Ryujinx.Common.Configuration.Hid.Controller; using Ryujinx.Common.Configuration.Hid.Controller.Motion; +using Ryujinx.Common.Logging; using Ryujinx.HLE.HOS.Services.Hid; using System; +using System.Collections.Generic; +using System.Collections.Concurrent; using System.Numerics; using System.Runtime.CompilerServices; @@ -534,5 +537,29 @@ namespace Ryujinx.Input.HLE { Dispose(true); } + + public void UpdateRumble(ConcurrentQueue<(HidVibrationValue, HidVibrationValue)> queue) + { + if (queue.TryDequeue(out (HidVibrationValue, HidVibrationValue) dualVibrationValue)) + { + if (_config is StandardControllerInputConfig controllerConfig && controllerConfig.Rumble.EnableRumble) + { + HidVibrationValue leftVibrationValue = dualVibrationValue.Item1; + HidVibrationValue rightVibrationValue = dualVibrationValue.Item2; + + float low = Math.Min(1f, (float)((rightVibrationValue.AmplitudeLow * 0.85 + rightVibrationValue.AmplitudeHigh * 0.15) * controllerConfig.Rumble.StrongRumble)); + float high = Math.Min(1f, (float)((leftVibrationValue.AmplitudeLow * 0.15 + leftVibrationValue.AmplitudeHigh * 0.85) * controllerConfig.Rumble.WeakRumble)); + + _gamepad.Rumble(low, high, uint.MaxValue); + + Logger.Debug?.Print(LogClass.Hid, $"Effect for {controllerConfig.PlayerIndex} " + + $"L.low.amp={leftVibrationValue.AmplitudeLow}, " + + $"L.high.amp={leftVibrationValue.AmplitudeHigh}, " + + $"R.low.amp={rightVibrationValue.AmplitudeLow}, " + + $"R.high.amp={rightVibrationValue.AmplitudeHigh} " + + $"--> ({low}, {high})"); + } + } + } } } |
