diff options
| author | a1xd <[email protected]> | 2020-10-20 00:40:22 -0400 |
|---|---|---|
| committer | a1xd <[email protected]> | 2020-10-20 00:40:22 -0400 |
| commit | 57be3fadb777f185454361270c1a8076417ed6a5 (patch) | |
| tree | 4ee498e409350da01c936307458407b7bc51edd3 | |
| parent | Merge pull request #37 from JacobPalecki/GUI (diff) | |
| download | rawaccel-57be3fadb777f185454361270c1a8076417ed6a5.tar.xz rawaccel-57be3fadb777f185454361270c1a8076417ed6a5.zip | |
add speed cap
| -rw-r--r-- | common/rawaccel-settings.h | 1 | ||||
| -rw-r--r-- | common/rawaccel.hpp | 28 | ||||
| -rw-r--r-- | grapher/Models/AccelGUI.cs | 3 | ||||
| -rw-r--r-- | wrapper/wrapper.cpp | 3 |
4 files changed, 28 insertions, 7 deletions
diff --git a/common/rawaccel-settings.h b/common/rawaccel-settings.h index aeb89e8..02f0a8a 100644 --- a/common/rawaccel-settings.h +++ b/common/rawaccel-settings.h @@ -18,6 +18,7 @@ namespace rawaccel { bool combine_mags = true; vec2<accel_mode> modes = { accel_mode::noaccel, accel_mode::noaccel }; vec2<accel_args> argsv; + double speed_cap = 0; vec2d sens = { 1, 1 }; milliseconds time_min = DEFAULT_TIME_MIN; }; diff --git a/common/rawaccel.hpp b/common/rawaccel.hpp index ecd3850..3a49aa6 100644 --- a/common/rawaccel.hpp +++ b/common/rawaccel.hpp @@ -200,11 +200,25 @@ namespace rawaccel { accel(args, mode, lut), gain_cap(args.gain_cap, accel), clamp(args.scale_cap) {} - inline double apply(double speed) const { + inline double apply(double speed, double output_speed_cap) const { + double scale; + if (gain_cap.should_apply(speed)) { - return clamp(gain_cap.apply(speed)); + scale = gain_cap.apply(speed); + } + else { + scale = accel.apply(speed); + } + + scale = clamp(scale); + + double output_speed = scale * speed; + + if (output_speed_cap > 0 && output_speed > output_speed_cap) { + scale = output_speed_cap / speed; } - else return clamp(accel.apply(speed)); + + return scale; } accelerator() = default; @@ -216,6 +230,7 @@ namespace rawaccel { bool apply_accel = false; bool combine_magnitudes = true; rotator rotate; + double output_speed_cap = 0; vec2<accelerator> accels; vec2d sensitivity = { 1, 1 }; @@ -236,6 +251,7 @@ namespace rawaccel { return; } + output_speed_cap = maxsd(args.speed_cap, 0); accels.x = accelerator(args.argsv.x, args.modes.x, luts.x); accels.y = accelerator(args.argsv.y, args.modes.y, luts.y); apply_accel = true; @@ -259,13 +275,13 @@ namespace rawaccel { if (combine_magnitudes) { double mag = sqrtsd(movement.x * movement.x + movement.y * movement.y); double speed = mag / time; - double scale = accels.x.apply(speed); + double scale = accels.x.apply(speed, output_speed_cap); movement.x *= scale; movement.y *= scale; } else { - movement.x *= accels.x.apply(fabs(movement.x) / time); - movement.y *= accels.y.apply(fabs(movement.y) / time); + movement.x *= accels.x.apply(fabs(movement.x) / time, output_speed_cap); + movement.y *= accels.y.apply(fabs(movement.y) / time, output_speed_cap); } } } diff --git a/grapher/Models/AccelGUI.cs b/grapher/Models/AccelGUI.cs index dd1e37d..902b135 100644 --- a/grapher/Models/AccelGUI.cs +++ b/grapher/Models/AccelGUI.cs @@ -120,7 +120,8 @@ namespace grapher combineMagnitudes = ApplyOptions.IsWhole, modes = ApplyOptions.GetModes(), args = ApplyOptions.GetArgs(), - minimumTime = driverSettings.minimumTime + minimumTime = driverSettings.minimumTime, + speedCap = driverSettings.speedCap }; WriteButtonDelay(); diff --git a/wrapper/wrapper.cpp b/wrapper/wrapper.cpp index a921801..1bfb251 100644 --- a/wrapper/wrapper.cpp +++ b/wrapper/wrapper.cpp @@ -63,6 +63,9 @@ public ref struct DriverSettings [JsonProperty("Accel parameters")] Vec2<AccelArgs> args; + [JsonProperty("Output Speed Cap", Required = Required::Default)] + double speedCap; + [JsonProperty("Sensitivity multipliers")] Vec2<double> sensitivity; |