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 /common | |
| parent | Merge pull request #37 from JacobPalecki/GUI (diff) | |
| download | rawaccel-57be3fadb777f185454361270c1a8076417ed6a5.tar.xz rawaccel-57be3fadb777f185454361270c1a8076417ed6a5.zip | |
add speed cap
Diffstat (limited to 'common')
| -rw-r--r-- | common/rawaccel-settings.h | 1 | ||||
| -rw-r--r-- | common/rawaccel.hpp | 28 |
2 files changed, 23 insertions, 6 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); } } } |